نمایشگر

کلاس اصلی نمایشگر سند

Viewer (namespace Doconut) نقطه ورود عمومی برای باز کردن اسناد از صفحات Razor، کنترلرهای MVC، کامپوننت‌های Blazor یا APIهای حداقل است. این کلاس قفل‌شده است، توسط AddDoconut() به عنوان سرویس موقت ثبت می‌شود و از طریق تزریق سازنده حل می‌شود — هرگز به‌صورت مستقیم آن را ساخت نکنید.

Viewer هیچ وضعیت درخواست‑به‑درخواستی نگه نمی‌دارد و عمداً اجرا نمی‌کند IDisposable: جلسات سند به‌صورت مستقل در کش جلسه زندگی می‌کنند، بنابراین از بین بردن سرویس هرگز نمی‌تواند سند باز را خاتمه دهد (به مفاهیم اصلی → نحوه کار Viewer مراجعه کنید).

OpenDocumentAsync

یک سند را باز می‌کند و توکن جلسه‌ای را برمی‌گرداند که ویجت مشتری برای تمام درخواست‌های بعدی استفاده می‌کند.

OverloadUse 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 باید پسوند صحیح را داشته باشد — این پسوند تشخیص فرمت را هدایت می‌کند
csharp
// باز کردن ساده
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

text
void CloseDocument(string token)

جلسه را از کش حذف می‌کند (موتور سند را بلافاصله از بین می‌برد)، علامت امنیتی را پاک می‌کند و دسترسی اعطا شده را لغو می‌نماید. این کار اختیاری است — انقضای لغزشی همان پاک‌سازی را انجام می‌دهد — اما برای اسناد بزرگ توصیه می‌شود.

GetPageCount

text
int GetPageCount(string token)

کل صفحات جلسه باز. اگر توکن ناشناخته یا منقضی باشد، استثنا پرتاب می‌کند.

DocOptions

گزینه‌های مستقل از فرمت برای هر باز کردن (namespace Doconut):

TypePropertyDefaultDescription
stringPassword""رمز عبور برای اسناد محافظت‌شده (به‌صورت خودکار به پیکربندی فرمت کپی می‌شود).
intImageResolution0منسوخ. فقط برای سازگاری نگه داشته می‌شود — به‌جای آن ImageResolution را در پیکربندی فرمت تنظیم کنید.
stringWatermark""متن واترمارک سفارشی که بر روی صفحات رندر شده کشیده می‌شود. رشته قالب: "^Text~Color~FontSize~FontName~Opacity~Angle"، به عنوان مثال "^Sample Copy~Red~24~Verdana~80~-45".
intTimeOut60انقضای لغزشی جلسه بر حسب دقیقه.
boolIsSecuredtrueدر حال حاضر اعمال نمی‌شود — رزرو شده. بایندینگ توکن به‌صورت سراسری توسط DoconutOptions.UnsafeMode کنترل می‌شود (به مفاهیم اصلی → جلسات و امنیت مراجعه کنید).

این کلاس همچنین ویژگی‌های تخصصی را که عمداً خارج از جریان مشاهده تک‑سرور معمولی هستند، افشا می‌کند:

TypePropertyDefaultDescription
boolIsWebFarmfalseعملیات باز کردن را به‌عنوان سناریوی وب‑فارم علامت‌گذاری می‌کند. فقط با معماری ذخیره‌سازی/جلسه مشترک مربوطه استفاده شود.
stringWebFarmPath""مسیر مشترکی که توسط جریان کار وب‑فارم تخصصی استفاده می‌شود. در نمایشگر تک‑سرور معمولی خالی است.
boolEditModefalseبرای جریان کار ویرایشگر جداگانه توزیع‌شده رزرو شده است؛ برای نمایشگر استاندارد false را رها کنید.

آب‌نشان سفارشی

DocOptions.Watermark از شش فیلد جدا شده با تیلدا استفاده می‌کند. یک ^ پیش‌درآمد اختیاری درخواست چیدمان تمام‑گوشه‌ها را می‌کند:

text
^Text~Color~FontSize~FontName~Opacity~Angle
csharp
string token = await viewer.OpenDocumentAsync(
    path,
    new PdfConfig(),
    new DocOptions
    {
        Watermark = "^Confidential~Red~24~Verdana~80~-45",
        TimeOut = 30
    });
فیلدمثالمعنی
پیش‌نویس ^^چیدمان تمام‑گوشه‌های اختیاری. بدون آن، مکان‌گذاری معمولی آب‌نشان استفاده می‌شود.
متنConfidentialمتنی که در هر صفحه رندر می‌شود. نباید خالی باشد.
رنگRedرنگ نام‌گذاری‌شده‌ای که لایه رسم می‌فهمد.
FontSize24اندازهٔ قلم؛ ورودی عددی نامعتبر به پیش‌فرض رندرر باز می‌گردد.
FontNameVerdanaخانوادهٔ قلم درخواست‌شده. اطمینان حاصل کنید که در محیط استقرار نصب شده است.
Opacity80مقدار بایت از ۰ تا ۲۵۵. باید به‌درستی تجزیه شود.
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

text
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)

این متد برای هم‌راستایی API وجود دارد، اما نمایشگر DICOM .NET 6 نمی‌تواند برچسب‌های فنی را فراهم کند. برای جلسات DICOM و غیر‑DICOM مقدار null برمی‌گرداند؛ در یک جلسه DICOM همچنین یک هشدار یک‌بار مصرف می‌نویسد که محدودیت پلتفرم را توضیح می‌دهد. رندر صفحه، فریم و انیمیشن همچنان پشتیبانی می‌شود.

کمک‌کننده‌های منبع — ReferenceCss / ReferenceScripts

برچسب‌های <link>/<script> را برای منابع جاسازی‌شده‌ای که توسط UseDoconutResources() سرو می‌شوند، به ترتیب وابستگی صحیح تولید کنید. بسته‌ها برای ویژگی‌های تحت مجوز مانند جستجو و حاشیه‌نویسی فقط زمانی که مجوز آن‌ها را فعال می‌کند تولید می‌شوند، به‌طوری که رابط کاربری کلاینت با رفتار سرور سازگار بماند.

text
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 (محدود به حاشیه‌نویسی).

html
@inject Doconut.Viewer Viewer

@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))

دریافت نام‌های کاربرگ‌ها

text
IReadOnlyList<string> GetWorksheetNames(string token)

نام‌های کاربرگ‌های یک جدول‌محور باز را به ترتیب کتاب‌کار برمی‌گرداند، یا در صورتی که سند باز جدول‌محور نباشد، یک لیست خالی برمی‌گرداند.

اضافه شده در ۲۶.۹.۰.

آیا این صفحه مفید بود؟