Trình xem
Lớp trình xem tài liệu chính
Viewer (namespace Doconut) là điểm vào công cộng để mở tài liệu từ các trang Razor, controller MVC, component Blazor, hoặc minimal APIs. Nó được sealed, đăng ký như một dịch vụ transient bởi AddDoconut(), và được giải quyết thông qua constructor injection — không bao giờ tạo trực tiếp.
Viewer không giữ trạng thái per-request và cố ý không triển khai IDisposable: các phiên tài liệu tồn tại độc lập trong cache phiên, vì vậy việc giải phóng dịch vụ sẽ không bao giờ hủy một tài liệu đang mở (xem Các khái niệm cốt lõi → Cách hoạt động của Viewer).
OpenDocumentAsync
Mở một tài liệu và trả về token phiên mà widget client sử dụng cho tất cả các yêu cầu tiếp theo.
| Phương thức | Khi nào sử dụng |
|---|---|
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default) | Mở từ đĩa với phát hiện định dạng tự động và cấu hình mặc định của định dạng |
Task<string> OpenDocumentAsync(string filePath, BaseConfig? config, DocOptions? options = null, CancellationToken ct = default) | Bạn cần các tùy chọn render cho từng định dạng (PdfConfig, WordConfig, …) |
Task<string> OpenDocumentAsync(Stream stream, FileInfo fileInfo, BaseConfig? config = null, DocOptions? options = null, CancellationToken ct = default) | Tài liệu không phải là tệp trên đĩa (tải lên, cơ sở dữ liệu, blob). fileInfo phải chứa phần mở rộng đúng — nó quyết định việc phát hiện định dạng |
// 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));Các ngoại lệ cần xử lý:
LicenseException— một giấy phép được tìm thấy bị từ chối (tin nhắn chứa lý do từ chối), hoặc định dạng cần một khả năng plugin mà không còn được cấp. Hết hạn lịch mà không có tin nhắn từ chối sẽ chuyển sang render có watermark thay vì ném ngoại lệ.FormatNotSupportedException—Document format '<extension>' is not supported.InvalidDataException— nội dung tệp bị hỏng hoặc không khớp với phần mở rộng của nó.
CloseDocument
void CloseDocument(string token)Xóa phiên khỏi cache (giải phóng engine tài liệu ngay lập tức), xóa dấu bảo mật, và thu hồi quyền truy cập. Tùy chọn — thời gian hết hạn trượt thực hiện cùng một quá trình dọn dẹp — nhưng được khuyến nghị cho tài liệu lớn.
GetPageCount
int GetPageCount(string token)Tổng số trang của phiên đang mở. Ném ngoại lệ nếu token không tồn tại hoặc đã hết hạn.
DocOptions
Các tùy chọn không phụ thuộc vào định dạng, áp dụng cho mỗi lần mở (namespace Doconut):
| Kiểu | Thuộc tính | Mặc định | Mô tả |
|---|---|---|---|
string | Password | "" | Mật khẩu cho tài liệu được bảo vệ (được sao chép vào cấu hình định dạng tự động). |
int | ImageResolution | 0 | Lỗi thời. Chỉ giữ lại để tương thích — thay vào đó đặt ImageResolution trên cấu hình định dạng. |
string | Watermark | "" | Văn bản watermark tùy chỉnh được vẽ trên các trang đã render. Chuỗi định dạng: "^Text~Color~FontSize~FontName~Opacity~Angle", ví dụ "^Sample Copy~Red~24~Verdana~80~-45". |
int | TimeOut | 60 | Thời gian hết hạn trượt của phiên tính bằng phút. |
bool | IsSecured | true | Hiện không được thực thi — dành riêng. Ràng buộc token được kiểm soát toàn cầu bởi DoconutOptions.UnsafeMode (xem Các khái niệm cốt lõi → Phiên & Bảo mật). |
Lớp cũng cung cấp các thuộc tính chuyên biệt được cố ý đặt ngoài luồng xem đơn máy bình thường:
| Kiểu | Thuộc tính | Mặc định | Mô tả |
|---|---|---|---|
bool | IsWebFarm | false | Đánh dấu thao tác mở như một kịch bản web-farm. Chỉ sử dụng với kiến trúc lưu trữ/phiên chia sẻ tương ứng. |
string | WebFarmPath | "" | Đường dẫn chia sẻ được sử dụng bởi quy trình web-farm chuyên biệt. Trống trong trình xem đơn máy bình thường. |
bool | EditMode | false | Dành riêng cho quy trình Editor được phân phối riêng; để false cho trình xem tiêu chuẩn. |
Watermark tùy chỉnh
DocOptions.Watermark sử dụng sáu trường ngăn cách bằng dấu ~. Một ^ đầu tùy chọn yêu cầu bố cục ở mọi góc:
^Text~Color~FontSize~FontName~Opacity~Anglestring token = await viewer.OpenDocumentAsync(
path,
new PdfConfig(),
new DocOptions
{
Watermark = "^Confidential~Red~24~Verdana~80~-45",
TimeOut = 30
});| Trường | Ví dụ | Ý nghĩa |
|---|---|---|
Leading ^ | ^ | ^ đầu: Bố cục tất cả các góc tùy chọn. Nếu không có, sẽ sử dụng vị trí watermark bình thường. |
| Text | Confidential | Văn bản: Văn bản được render trên mỗi trang. Không được để trống. |
| Color | Red | Màu: Màu được đặt tên mà lớp vẽ hiểu. |
| FontSize | 24 | Kích thước phông chữ: Kích thước phông chữ; nếu nhập số không hợp lệ sẽ quay lại mặc định của renderer. |
| FontName | Verdana | Tên phông chữ: Họ phông chữ yêu cầu. Đảm bảo nó được cài đặt trong môi trường triển khai. |
| Opacity | 80 | Độ trong suốt: Giá trị byte từ 0 đến 255. Phải phân tích thành công. |
| Angle | -45 | Góc: Góc quay tính bằng độ; nếu nhập số không hợp lệ sẽ quay lại mặc định. |
Trình phân tích mong đợi đúng sáu trường sau ^ tùy chọn. Định nghĩa không hợp lệ sẽ được thay thế bằng fallback Invalid Watermark có thể nhìn thấy của SDK thay vì biến mất im lặng.
Quyết định giấy phép
| Trạng thái giấy phép | Giá trị tùy chỉnh cung cấp | Kết quả render |
|---|---|---|
| Giấy phép viewer trả phí hợp lệ | Không | Trang sạch |
| Giấy phép viewer trả phí hợp lệ | Có | Watermark tùy chỉnh |
| Viewer tạm thời/demo cơ bản đang hoạt động | Không | Trang base-viewer sạch |
| Viewer tạm thời/demo cơ bản đang hoạt động | Có | Watermark tùy chỉnh khi đường dẫn base-viewer sạch được áp dụng |
| Giấy phép thiếu, bị từ chối, hết hạn, phiên bản sai, hoặc domain không hợp lệ | Bất kỳ | Watermark thực thi/đánh giá; giá trị tùy chỉnh không ghi đè lên nó |
| Render plugin theo quy tắc đánh giá | Bất kỳ | Watermark đánh giá |
Quyết định tương tự được áp dụng cho các hình ảnh trang được phục vụ và xuất chú thích. Đầu ra GIF động được dán dấu từng khung. Do đó, watermark tùy chỉnh là tính năng ứng dụng có giấy phép, không phải cách để thay thế hoặc ẩn watermark đánh giá.
API chú thích
Tải và xuất chú thích phía máy chủ. Hướng dẫn đầy đủ nằm trong Guides → Annotations; giao diện là:
| Thành viên | Mục đích |
|---|---|
AnnotationManager GetAnnotationManager(string token) | Trình quản lý liên kết với kích thước trang của phiên đang mở |
AnnotationManager GetAnnotationManager(string token, int pageWidth, int pageHeight) | Trình quản lý với kích thước trang được chỉ định |
AnnotationManager GetAnnotationManager(int pageWidth, int pageHeight) | Trình quản lý không phụ thuộc vào phiên |
void LoadAnnotationData(string token, AnnotationManager manager) | Tải chú thích được xây dựng bằng C# vào phiên |
void LoadAnnotationData(string token, string annotationData) | Tải chú thích từ envelope trang/ Base64 đã mã hoá trả về bởi AnnotationManager.GetAnnotationData() |
void LoadAnnotationXML(string token, XmlDocument annotationXml) | Tải chú thích từ XML |
XmlDocument GetAnnotationXML(string token) | Xuất chú thích của phiên dưới dạng XML |
Task<byte[]> ExportAnnotationsToPdfAsync(string token, int zoom = 100, CancellationToken ct = default) | PDF với chú thích được chèn vào |
Task<int> ExportAnnotationsToPngAsync(…) | Các tệp PNG với chú thích được chèn vào |
Task<byte[]> ExportAnnotationsToPngZipAsync(string token, int zoom = 100, CancellationToken ct = default) | ZIP các PNG theo trang với chú thích được chèn vào |
Siêu dữ liệu DICOM
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)Trả về siêu dữ liệu thẻ DICOM cho các phiên được mở qua plugin DICOM; null cho tài liệu không phải DICOM.
Trợ giúp tài nguyên — ReferenceCss / ReferenceScripts
Phát ra các thẻ <link>/<script> cho các tài nguyên nhúng được phục vụ bởi UseDoconutResources(), theo đúng thứ tự phụ thuộc. Các bundle cho các tính năng có giấy phép như tìm kiếm và chú thích chỉ được phát khi giấy phép cho phép, giữ giao diện người dùng client nhất quán với hành vi server.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)Cờ CssConfig: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (được bật khi có tính năng tìm kiếm), IncludeAnnotationCss (được bật khi có tính năng chú thích).
Cờ ScriptConfig: IncludeJQuery (bắt buộc cho tất cả các cờ khác), IncludeBootstrap, IncludeViewerScripts (cốt lõi: docViewer.js + splitter + links), IncludeSearchScripts và IncludeSearchBar (được bật khi có tính năng tìm kiếm), IncludeAnnotationScripts và IncludeAnnotationBar (được bật khi có tính năng chú thích).
@inject Doconut.Viewer Viewer
@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))Trang này có hữu ích không?