نمایشگر
کلاس اصلی نمایشگر سند
Viewer (namespace Doconut) نقطهٔ ورودی عمومی برای باز کردن اسناد از صفحات Razor، کنترلرهای MVC، کامپوننتهای Blazor یا APIهای حداقل است. این کلاس sealed است، بهعنوان سرویس transient توسط AddDoconut() ثبت میشود و از طریق تزریق سازنده حل میشود — هرگز بهصورت مستقیم آن را ساخت نکنید.
Viewer هیچ وضعیت درخواست‑به‑درخواست نگه نمیدارد و عمداً does not پیادهسازی IDisposable را انجام میدهد: جلسات سند بهصورت مستقل در کش جلسه زندگی میکنند، بنابراین تخلیه سرویس هرگز نمیتواند سند باز را از بین ببرد (به Core Concepts → How the Viewer Works مراجعه کنید).
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 باید پسوند صحیح را داشته باشد — این پسوند تشخیص فرمت را هدایت میکند |
// Simple open
string token = await viewer.OpenDocumentAsync(path);
// With per-format config and options
token = await viewer.OpenDocumentAsync(
path,
new PdfConfig { AllowSearch = true, AllowCopy = true },
new DocOptions { TimeOut = 30 });
// From an upload
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 کنترل میشود (به Core Concepts → Sessions & Security مراجعه کنید). |
کلاس همچنین ویژگیهای تخصصی را ارائه میدهد که عمداً خارج از جریان مشاهده تک‑میزبان معمولی هستند:
| Type | Property | Default | Description |
|---|---|---|---|
bool | IsWebFarm | false | عملیات باز کردن را به عنوان سناریوی وبفارم علامتگذاری میکند. فقط با معماری ذخیرهسازی/جلسه مشترک مربوطه استفاده شود. |
string | WebFarmPath | "" | مسیر مشترکی که توسط جریان کار وبفارم تخصصی استفاده میشود. در نمایشگر تکمیزبان عادی خالی است. |
bool | EditMode | false | برای جریان کار ویرایشگر جداگانه رزرو شده؛ برای نمایشگر استاندارد false بگذارید. |
Custom watermark
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
});| Field | Example | Meaning |
|---|---|---|
Leading ^ | ^ | چیدمان همهگوشهای اختیاری. بدون آن، مکانگذاری عادی واترمارک استفاده میشود. |
| Text | Confidential | متنی که بر هر صفحه رندر میشود. نباید خالی باشد. |
| Color | Red | رنگ نامگذاریشدهای که لایه رسم آن را میداند. |
| FontSize | 24 | اندازه فونت؛ ورودی عددی نامعتبر به پیشفرض رندرر باز میگردد. |
| FontName | Verdana | خانواده فونت درخواستشده. اطمینان حاصل کنید که در محیط استقرار نصب شده باشد. |
| Opacity | 80 | مقدار بایت از 0 تا 255. باید بهدرستی تجزیه شود. |
| Angle | -45 | زاویه چرخش بر حسب درجه؛ ورودی عددی نامعتبر به پیشفرض باز میگردد. |
پارسر دقیقاً شش فیلد پس از ^ اختیاری انتظار دارد. تعریف نامعتبر با fallback قابل مشاهده Invalid Watermark SDK جایگزین میشود بهجای اینکه بهصورت ساکت ناپدید شود.
License decision
| وضعیت لایسنس | مقدار سفارشی ارائهشده | نتیجه رندر شده |
|---|---|---|
| مجوز معتبر پرداختشده برای نمایشگر | خیر | صفحه تمیز |
| مجوز معتبر پرداختشده برای نمایشگر | بله | واترمارک سفارشی |
| نمایشگر پایه موقت/دموی فعال | خیر | صفحه تمیز نمایشگر پایه |
| نمایشگر پایه موقت/دموی فعال | بله | واترمارک سفارشی وقتی مسیر تمیز نمایشگر پایه اعمال میشود |
| مجوز گمشده، رد شده، منقضیشده، نسخه نادرست یا دامنه نامعتبر | هر کدام | واترمارک اعمال/ارزیابی؛ مقدار سفارشی آن را بازنویسی نمیکند |
| رندرینگ افزونه تحت قوانین ارزیابی | هر کدام | واترمارک ارزیابی |
همین تصمیم برای تصاویر صفحه سرو شده و خروجیهای حاشیهنویسی اعمال میشود. خروجی GIF متحرک فریم به فریم مهر میشود. بنابراین واترمارک سفارشی یک ویژگی برنامهدار تحت لایسنس است، نه روشی برای جایگزینی یا حذف واترمارک ارزیابی.
Annotations API
بارگذاری و خروجی حاشیهنویسی سمت سرور. راهنمای کامل در Guides → Annotations موجود است؛ سطح کارکرد به این صورت است:
| Member | Purpose |
|---|---|
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 metadata
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)این متد برای همسویی API وجود دارد، اما نمایشگر DICOM .NET 6 نمیتواند برچسبهای فنی را فراهم کند. برای جلسات DICOM و غیر‑DICOM null برمیگرداند؛ در یک جلسه DICOM همچنین یک هشدار یکباریه مینویسد که محدودیت پلتفرم را توضیح میدهد. رندرینگ صفحه، فریم و انیمیشن همچنان پشتیبانی میشود.
Resource helpers — ReferenceCss / ReferenceScripts
برچسبهای <link>/<script> برای منابع جاسازیشدهای که توسط UseDoconutResources() سرو میشوند، در ترتیب وابستگی صحیح تولید میکند. بستهها برای ویژگیهای تحت لایسنس مانند جستجو و حاشیهنویسی فقط زمانی که لایسنس آنها را فعال کند تولید میشوند، بهطوری که UI مشتری با رفتار سرور سازگار بماند.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)پرچمهای CssConfig: IncludeBootstrapCss، IncludeViewerCss، IncludeSearchCss (search‑gated)، IncludeAnnotationCss (annotation‑gated).
پرچمهای ScriptConfig: IncludeJQuery (required by all others)، IncludeBootstrap، IncludeViewerScripts (core: docViewer.js + splitter + links)، IncludeSearchScripts و IncludeSearchBar (search‑gated)، IncludeAnnotationScripts و IncludeAnnotationBar (annotation‑gated).
@inject Doconut.Viewer Viewer
@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))آیا این صفحه مفید بود؟