ตัวดู
คลาสตัวดูเอกสารหลัก
Viewer (namespace Doconut) คือจุดเข้าถึงสาธารณะสำหรับการเปิดเอกสารจาก Razor pages, MVC controllers, Blazor components หรือ minimal APIs. มันเป็น sealed, ลงทะเบียนเป็นบริการ transient โดย AddDoconut(), และได้รับการแก้ไขผ่านการฉีดคอนสตรัคเตอร์ — ไม่ควรสร้างมันโดยตรง.
Viewer ไม่เก็บสถานะต่อคำขอและตั้งใจ ไม่ implement IDisposable: เซสชันเอกสารทำงานอย่างอิสระในแคชเซสชัน, ดังนั้นการทำลายบริการจะไม่สามารถทำลายเอกสารที่เปิดอยู่ได้ (ดู แนวคิดหลัก → วิธีการทำงานของ Viewer).
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 (ดู แนวคิดหลัก → Sessions & Security). |
คลาสนี้ยังเปิดเผยคุณสมบัติพิเศษที่ตั้งใจอยู่นอกกระแสการดูแบบโฮสต์เดียวปกติ:
| ประเภท | คุณสมบัติ | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
bool | IsWebFarm | false | ทำเครื่องหมายการเปิดเป็นสถานการณ์เว็บฟาร์ม. ใช้เฉพาะกับสถาปัตยกรรมการจัดเก็บ/เซสชันที่แชร์ที่สอดคล้องกัน. |
string | WebFarmPath | "" | เส้นทางที่แชร์ที่ใช้โดยกระบวนการทำงานเว็บฟาร์มพิเศษ. ว่างในตัวดูแบบโฮสต์เดียวปกติ. |
bool | EditMode | false | จองไว้สำหรับกระบวนการทำงาน Editor ที่แยกออก; ปล่อย false สำหรับตัวดูมาตรฐาน. |
ลายน้ำแบบกำหนดเอง
DocOptions.Watermark ใช้หกฟิลด์ที่คั่นด้วย tilde. การนำ ^ นำหน้าแบบเลือกได้จะร้องขอการจัดวางที่มุมทั้งหมด:
^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 | ค่าบายต์ตั้งแต่ 0 ถึง 255. ต้องแปลงได้สำเร็จ. |
| มุม | -45 | มุมการหมุนเป็นองศา; หากค่าตัวเลขไม่ถูกต้องจะใช้ค่าเริ่มต้น. |
ตัวแยกวิเคราะห์คาดหวังหกฟิลด์ที่แน่นอนหลังจาก ^ ที่เป็นตัวเลือก. คำจำกัดความที่ไม่ถูกต้องจะถูกแทนที่ด้วย fallback ที่มองเห็นได้ของ SDK Invalid Watermark แทนที่จะหายไปโดยเงียบ.
การตัดสินใจเรื่องใบอนุญาต
| สถานะใบอนุญาต | ค่าที่กำหนดเองที่ให้ | ผลลัพธ์ที่แสดง |
|---|---|---|
| ใบอนุญาตผู้ชมแบบชำระเงินที่ถูกต้อง | ไม่ | หน้าสะอาด |
| ใบอนุญาตผู้ชมแบบชำระเงินที่ถูกต้อง | ใช่ | ลายน้ำแบบกำหนดเอง |
| ผู้ชมฐานชั่วคราว/สาธิตที่ใช้งานอยู่ | ไม่ | หน้าฐานผู้ชมที่สะอาด |
| ผู้ชมฐานชั่วคราว/สาธิตที่ใช้งานอยู่ | ใช่ | ลายน้ำแบบกำหนดเองเมื่อเส้นทางผู้ชมฐานที่สะอาดใช้ |
| ใบอนุญาตที่หายไป, ถูกปฏิเสธ, หมดอายุ, เวอร์ชันไม่ตรง, หรือโดเมนไม่ถูกต้อง | ใดก็ได้ | ลายน้ำการบังคับใช้/การประเมิน; ค่าที่กำหนดเองไม่สามารถแทนที่ได้ |
| การเรนเดอร์ปลั๊กอินภายใต้กฎการประเมิน | ใดก็ได้ | ลายน้ำการประเมิน |
การตัดสินใจเดียวกันนี้จะถูกนำไปใช้กับภาพหน้าที่ให้บริการและการส่งออกคำอธิบาย. ผลลัพธ์ 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)ส่งคืนเมตาดาต้าแท็ก DICOM สำหรับเซสชันที่เปิดผ่านปลั๊กอิน DICOM; null สำหรับเอกสารที่ไม่ใช่ DICOM.
ตัวช่วยทรัพยากร — ReferenceCss / ReferenceScripts
สร้างแท็ก <link>/<script> สำหรับทรัพยากรที่ฝังอยู่ที่ให้บริการโดย UseDoconutResources(), ตามลำดับการพึ่งพาที่ถูกต้อง. ชุดสำหรับคุณลักษณะที่จำกัดโดยใบอนุญาตเช่นการค้นหาและการอธิบายจะถูกสร้าง เฉพาะเมื่อใบอนุญาตเปิดใช้งาน, ทำให้ UI ของไคลเอนต์สอดคล้องกับพฤติกรรมของเซิร์ฟเวอร์.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + ตัวดู + การค้นหา + คำอธิบาย
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 and IncludeSearchBar (search-gated), IncludeAnnotationScripts and 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 }))GetWorksheetNames
IReadOnlyList<string> GetWorksheetNames(string token)ส่งคืนชื่อแผ่นงานของสเปรดชีตที่เปิดอยู่ตามลำดับของเวิร์กบุ๊ก, หรือรายการว่างเมื่อเอกสารที่เปิดไม่ใช่สเปรดชีต.
เพิ่มในเวอร์ชัน 26.9.0.
หน้านี้เป็นประโยชน์หรือไม่?