نمایشگر
کلاس اصلی نمایشگر سند
Viewer (namespace Doconut) نقطه ورود عمومی برای باز کردن اسناد از صفحات Razor، کنترلرهای MVC، کامپوننتهای Blazor یا APIهای حداقل است. این کلاس قفلشده است، توسط AddDoconut() به عنوان سرویس موقت ثبت میشود و از طریق تزریق سازنده حل میشود — هرگز بهصورت مستقیم آن را ساخت نکنید.
Viewer هیچ وضعیت درخواست‑به‑درخواستی نگه نمیدارد و عمداً اجرا نمیکند IDisposable: جلسات سند بهصورت مستقل در کش جلسه زندگی میکنند، بنابراین از بین بردن سرویس هرگز نمیتواند سند باز را خاتمه دهد (به مفاهیم اصلی → نحوه کار Viewer مراجعه کنید).
OpenDocumentAsync
یک سند را باز میکند و توکن جلسهای را برمیگرداند که ویجت مشتری برای تمام درخواستهای بعدی استفاده میکند.
| Overload | Use when |
|---|---|
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default) | باز کردن از دیسک با تشخیص خودکار فرمت و پیکربندی پیشفرض فرمت |
Task<string> OpenDocumentAsync(string filePath, BaseConfig? config, DocOptions? options = null, CancellationToken ct = default) | شما به گزینههای رندر برای هر فرمت نیاز دارید (PdfConfig، WordConfig، …) |
Task<string> OpenDocumentAsync(Stream stream, FileInfo fileInfo, BaseConfig? config = null, DocOptions? options = null, CancellationToken ct = default) | سند یک فایل روی دیسک نیست (بارگذاری، پایگاهداده، blob). fileInfo باید پسوند صحیح را داشته باشد — این پسوند تشخیص فرمت را هدایت میکند |
// باز کردن ساده
string token = await viewer.OpenDocumentAsync(path);
// با پیکربندی و گزینههای هر فرمت
token = await viewer.OpenDocumentAsync(
path,
new PdfConfig { AllowSearch = true, AllowCopy = true },
new DocOptions { TimeOut = 30 });
// از یک بارگذاری
await using var ms = new MemoryStream();
await file.CopyToAsync(ms);
ms.Position = 0;
token = await viewer.OpenDocumentAsync(ms, new FileInfo(file.FileName));استثناهای قابل مدیریت:
LicenseException— یک لایسنس پیدا شده رد میشود (پیام شامل دلیل رد است)، یا فرمت به قابلیت افزونهای نیاز دارد که دیگر اعطا نشده است. انقضای تقویم بدون پیام رد، به رندر با واترمارک تبدیل میشود بهجای پرتاب استثنا.FormatNotSupportedException—Document format '<extension>' is not supported.InvalidDataException— محتوای فایل خراب است یا با پسوند آن مطابقت ندارد.
CloseDocument
void CloseDocument(string token)جلسه را از کش حذف میکند (موتور سند را بلافاصله از بین میبرد)، علامت امنیتی را پاک میکند و دسترسی اعطا شده را لغو مینماید. این کار اختیاری است — انقضای لغزشی همان پاکسازی را انجام میدهد — اما برای اسناد بزرگ توصیه میشود.
GetPageCount
int GetPageCount(string token)کل صفحات جلسه باز. اگر توکن ناشناخته یا منقضی باشد، استثنا پرتاب میکند.
DocOptions
گزینههای مستقل از فرمت برای هر باز کردن (namespace Doconut):
| Type | Property | Default | Description |
|---|---|---|---|
string | Password | "" | رمز عبور برای اسناد محافظتشده (بهصورت خودکار به پیکربندی فرمت کپی میشود). |
int | ImageResolution | 0 | منسوخ. فقط برای سازگاری نگه داشته میشود — بهجای آن ImageResolution را در پیکربندی فرمت تنظیم کنید. |
string | Watermark | "" | متن واترمارک سفارشی که بر روی صفحات رندر شده کشیده میشود. رشته قالب: "^Text~Color~FontSize~FontName~Opacity~Angle"، به عنوان مثال "^Sample Copy~Red~24~Verdana~80~-45". |
int | TimeOut | 60 | انقضای لغزشی جلسه بر حسب دقیقه. |
bool | IsSecured | true | در حال حاضر اعمال نمیشود — رزرو شده. بایندینگ توکن بهصورت سراسری توسط DoconutOptions.UnsafeMode کنترل میشود (به مفاهیم اصلی → جلسات و امنیت مراجعه کنید). |
این کلاس همچنین ویژگیهای تخصصی را که عمداً خارج از جریان مشاهده تک‑سرور معمولی هستند، افشا میکند:
| Type | Property | Default | Description |
|---|---|---|---|
bool | IsWebFarm | false | عملیات باز کردن را بهعنوان سناریوی وب‑فارم علامتگذاری میکند. فقط با معماری ذخیرهسازی/جلسه مشترک مربوطه استفاده شود. |
string | WebFarmPath | "" | مسیر مشترکی که توسط جریان کار وب‑فارم تخصصی استفاده میشود. در نمایشگر تک‑سرور معمولی خالی است. |
bool | EditMode | false | برای جریان کار ویرایشگر جداگانه توزیعشده رزرو شده است؛ برای نمایشگر استاندارد false را رها کنید. |
آبنشان سفارشی
DocOptions.Watermark از شش فیلد جدا شده با تیلدا استفاده میکند. یک ^ پیشدرآمد اختیاری درخواست چیدمان تمام‑گوشهها را میکند:
^Text~Color~FontSize~FontName~Opacity~Anglestring token = await viewer.OpenDocumentAsync(
path,
new PdfConfig(),
new DocOptions
{
Watermark = "^Confidential~Red~24~Verdana~80~-45",
TimeOut = 30
});| فیلد | مثال | معنی |
|---|---|---|
پیشنویس ^ | ^ | چیدمان تمام‑گوشههای اختیاری. بدون آن، مکانگذاری معمولی آبنشان استفاده میشود. |
| متن | Confidential | متنی که در هر صفحه رندر میشود. نباید خالی باشد. |
| رنگ | Red | رنگ نامگذاریشدهای که لایه رسم میفهمد. |
| FontSize | 24 | اندازهٔ قلم؛ ورودی عددی نامعتبر به پیشفرض رندرر باز میگردد. |
| FontName | Verdana | خانوادهٔ قلم درخواستشده. اطمینان حاصل کنید که در محیط استقرار نصب شده است. |
| Opacity | 80 | مقدار بایت از ۰ تا ۲۵۵. باید بهدرستی تجزیه شود. |
| Angle | -45 | زاویهٔ چرخش بر حسب درجه؛ ورودی عددی نامعتبر به پیشفرض باز میگردد. |
پارسر دقیقاً شش فیلد پس از ^ اختیاری انتظار دارد. یک تعریف نامعتبر با بازگشتپذیری قابل مشاهدهٔ Invalid Watermark SDK جایگزین میشود بهجای اینکه بهصورت ساکت ناپدید شود.
تصمیمگیری مجوز
| وضعیت مجوز | مقدار سفارشی ارائهشده | نتیجهٔ رندر شده |
|---|---|---|
| مجوز مشاهدهگر پرداختشدهٔ معتبر | خیر | صفحهٔ تمیز |
| مجوز مشاهدهگر پرداختشدهٔ معتبر | بله | آبنشان سفارشی |
| مشاهدهگر پایه موقت/دموی فعال | خیر | صفحهٔ پایهمشاهدهگر تمیز |
| مشاهدهگر پایه موقت/دموی فعال | بله | آبنشان سفارشی وقتی مسیر پایهمشاهدهگر تمیز اعمال میشود |
| مجوز گمشده، ردشده، منقضیشده، نسخهغلط یا دامنهنامعتبر | هر کدام | آبنشان اعمال/ارزیابی؛ مقدار سفارشی آن را بازنویسی نمیکند |
| رندر پلاگین تحت قوانین ارزیابی | هر کدام | آبنشان ارزیابی |
همین تصمیم بر روی تصاویر صفحات سروشده و خروجیهای حاشیهنویسی اعمال میشود. خروجی GIF انیمیشنی بهصورت فریم به فریم مهر میشود. بنابراین آبنشان سفارشی یک ویژگی برنامه تحت مجوز است، نه روشی برای جایگزینی یا حذف آبنشان ارزیابی.
API حاشیهنویسی
بارگذاری و خروجی حاشیهنویسی در سمت سرور. راهنمای کامل در Guides → Annotations موجود است؛ سطح کار به این شکل است:
| عضو | هدف |
|---|---|
AnnotationManager GetAnnotationManager(string token) | مدیر مرتبط با ابعاد صفحهٔ جلسهٔ باز |
AnnotationManager GetAnnotationManager(string token, int pageWidth, int pageHeight) | مدیر با ابعاد صفحهٔ صریح |
AnnotationManager GetAnnotationManager(int pageWidth, int pageHeight) | مدیر مستقل از جلسه |
void LoadAnnotationData(string token, AnnotationManager manager) | بارگذاری حاشیهنویسیهای ساختهشده در C# به جلسه |
void LoadAnnotationData(string token, string annotationData) | بارگذاری حاشیهنویسیها از صفحهٔ رمزگذاریشده/پاکت Base64 که توسط AnnotationManager.GetAnnotationData() بازگردانده میشود |
void LoadAnnotationXML(string token, XmlDocument annotationXml) | بارگذاری حاشیهنویسیها از XML |
XmlDocument GetAnnotationXML(string token) | خروجی حاشیهنویسیهای جلسه به صورت XML |
Task<byte[]> ExportAnnotationsToPdfAsync(string token, int zoom = 100, CancellationToken ct = default) | PDF با حاشیهنویسیهای سوزاندهشده |
Task<int> ExportAnnotationsToPngAsync(…) | فایلهای PNG با حاشیهنویسیهای سوزاندهشده |
Task<byte[]> ExportAnnotationsToPngZipAsync(string token, int zoom = 100, CancellationToken ct = default) | ZIP شامل PNGهای صفحه به صفحه با حاشیهنویسیهای سوزاندهشده |
متادیتای DICOM
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)این متد برای همراستایی API وجود دارد، اما نمایشگر DICOM .NET 6 نمیتواند برچسبهای فنی را فراهم کند. برای جلسات DICOM و غیر‑DICOM مقدار null برمیگرداند؛ در یک جلسه DICOM همچنین یک هشدار یکبار مصرف مینویسد که محدودیت پلتفرم را توضیح میدهد. رندر صفحه، فریم و انیمیشن همچنان پشتیبانی میشود.
کمککنندههای منبع — ReferenceCss / ReferenceScripts
برچسبهای <link>/<script> را برای منابع جاسازیشدهای که توسط UseDoconutResources() سرو میشوند، به ترتیب وابستگی صحیح تولید کنید. بستهها برای ویژگیهای تحت مجوز مانند جستجو و حاشیهنویسی فقط زمانی که مجوز آنها را فعال میکند تولید میشوند، بهطوری که رابط کاربری کلاینت با رفتار سرور سازگار بماند.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + نمایشگر + جستجو + حاشیهنویسی
string ReferenceScripts(ScriptConfig? config = null)پرچمهای CssConfig: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (محدود به جستجو)، IncludeAnnotationCss (محدود به حاشیهنویسی).
پرچمهای ScriptConfig: IncludeJQuery (نیازمند توسط همهٔ دیگران), IncludeBootstrap, IncludeViewerScripts (هسته: docViewer.js + تقسیمکننده + لینکها), IncludeSearchScripts و IncludeSearchBar (محدود به جستجو), IncludeAnnotationScripts و IncludeAnnotationBar (محدود به حاشیهنویسی).
@inject Doconut.Viewer Viewer
@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))دریافت نامهای کاربرگها
IReadOnlyList<string> GetWorksheetNames(string token)نامهای کاربرگهای یک جدولمحور باز را به ترتیب کتابکار برمیگرداند، یا در صورتی که سند باز جدولمحور نباشد، یک لیست خالی برمیگرداند.
اضافه شده در ۲۶.۹.۰.
آیا این صفحه مفید بود؟