نمایشگر

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

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

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

OpenDocumentAsync

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

بارگذاریزمان استفاده
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):

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

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

نوعویژگیپیش‌فرضتوضیح
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رنگ نام‌گذاری‌شده‌ای که لایه رسم آن را می‌فهمد.
اندازه‌فونت24اندازهٔ فونت؛ ورودی عددی نامعتبر به پیش‌فرض رندرر باز می‌گردد.
نام‌فونتVerdanaخانوادهٔ فونت درخواست‌شده. اطمینان حاصل کنید که در محیط استقرار نصب شده باشد.
شفافیت80مقدار بایتی از ۰ تا ۲۵۵. باید به‌درستی تجزیه شود.
زاویه-45زاویهٔ چرخش به درجه؛ ورودی عددی نامعتبر به پیش‌فرض باز می‌گردد.

پارسِر دقیقاً شش فیلد پس از ^ اختیاری انتظار دارد. یک تعریف نامعتبر با بازگشت پیش‌فرض قابل مشاهدهٔ Invalid Watermark SDK جایگزین می‌شود به‌جای ناپدید شدن بی‌صدا.

تصمیم‌گیری مجوز

وضعیت مجوزمقدار سفارشی ارائه‌شدهنتیجهٔ رندر شده
مجوز مشاهده‌گر پرداخت‌شده معتبرخیرصفحهٔ تمیز
مجوز مشاهده‌گر پرداخت‌شده معتبربلهآب‌نشان سفارشی
مشاهده‌گر پایه موقت/دموی فعالخیرصفحهٔ پایه‌مشاهده‌گر تمیز
مشاهده‌گر پایه موقت/دموی فعالبلهآب‌نشان سفارشی وقتی مسیر پایه‌مشاهده‌گر تمیز اعمال می‌شود
مجوز گمشده، رد‌شده، منقضی‌شده، نسخه‌نادرست یا دامنه‌نامعتبرهر کدامآب‌نشان اعمال/ارزیابی؛ مقدار سفارشی آن را بازنویسی نمی‌کند
رندر افزونه تحت قوانین ارزیابیهر کدامآب‌نشان ارزیابی

همان تصمیم برای تصاویر صفحهٔ ارائه‌شده و خروجی‌های حاشیه‌نویسی اعمال می‌شود. خروجی GIF انیمیشنی به‌صورت فریم به فریم مهر می‌شود. بنابراین آب‌نشان سفارشی یک ویژگی برنامه تحت مجوز است، نه روشی برای جایگزینی یا سرکوب آب‌نشان ارزیابی.

API حاشیه‌نویسی

بارگذاری و خروجی حاشیه‌نویسی در سمت سرور. راهنمای کامل در «راهنماها → حاشیه‌نویسی» موجود است؛ سطح کار به این صورت است:

عضوهدف
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)

متادیتای برچسب 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 }))

GetWorksheetNames

text
IReadOnlyList<string> GetWorksheetNames(string token)

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

اضافه شده در 26.9.0.

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