نمایشگر
کلاس اصلی نمایشگر سند
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 باید پسوند صحیح را داشته باشد — این پسوند تشخیص قالب را هدایت میکند |
// باز کردن ساده
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):
| نوع | ویژگی | پیشفرض | توضیح |
|---|---|---|---|
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 کنترل میشود (به مفاهیم اصلی → جلسات و امنیت مراجعه کنید). |
این کلاس همچنین ویژگیهای تخصصی را که عمداً خارج از جریان نمایش تک‑هاست معمولی هستند، افشا میکند:
| نوع | ویژگی | پیشفرض | توضیح |
|---|---|---|---|
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 | رنگ نامگذاریشدهای که لایه رسم آن را میفهمد. |
| اندازهفونت | 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
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)متادیتای برچسب 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 }))GetWorksheetNames
IReadOnlyList<string> GetWorksheetNames(string token)نامهای شیتهای یک صفحهگسترده باز را به ترتیب کتابکار برمیگرداند، یا در صورتی که سند باز یک صفحهگسترده نباشد، لیست خالی را برمیگرداند.
اضافه شده در 26.9.0.
آیا این صفحه مفید بود؟