Trình xem
The main document viewer class
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 API. Nó được sealed, đăng ký như một dịch vụ transient bởi AddDoconut(), và được giải quyết qua injection trong constructor — 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 Core Concepts → How the Viewer Works).
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.
| Overload | Use when |
|---|---|
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 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 việc 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ệ (tự động sao chép vào cấu hình định dạ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 áp dụng — dành riêng. Ràng buộc token được kiểm soát toàn cầu bởi DoconutOptions.UnsafeMode (xem Core Concepts → Sessions & Security). |
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ở là 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. |
Custom watermark
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 toàn 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 ^ | ^ | Bố cục toàn 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 được render trên mỗi trang. Không được để trống. |
| Color | Red | Màu được đặt tên mà lớp vẽ hiểu. |
| FontSize | 24 | Kích thước phông; nếu nhập số không hợp lệ sẽ quay lại mặc định của renderer. |
| FontName | Verdana | Họ phông được yêu cầu. Đảm bảo nó đã được cài đặt trong môi trường triển khai. |
| Opacity | 80 | Giá trị byte từ 0 đến 255. Phải phân tích thành công. |
| Angle | -45 | Góc quay tính bằng độ; nếu nhập số không hợp lệ sẽ quay lại mặc định. |
Bộ phân tích yêu cầu chính xác 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 hiển thị của SDK thay vì biến mất im lặng.
License decision
| 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 cơ bản tạm thời/demo đang hoạt động | Không | Trang base-viewer sạch |
| Viewer cơ bản tạm thời/demo đ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 đè |
| 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 watermark từng khung. Do đó watermark tùy chỉnh là tính năng có giấy phép, không phải cách để thay thế hoặc ẩn watermark đánh giá.
Annotations API
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 rõ ràng |
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 page/Base64 được 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 nhúng |
Task<int> ExportAnnotationsToPngAsync(…) | Các tệp PNG với chú thích được nhúng |
Task<byte[]> ExportAnnotationsToPngZipAsync(string token, int zoom = 100, CancellationToken ct = default) | ZIP các PNG theo trang với chú thích được nhúng |
DICOM metadata
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)Phương thức này tồn tại để đồng bộ API, nhưng trình xem DICOM .NET 6 không thể cung cấp các thẻ kỹ thuật. Nó trả về null cho các phiên DICOM và không DICOM; trên phiên DICOM nó cũng ghi một cảnh báo một lần giải thích giới hạn nền tảng. Việc render trang, khung và hoạt hình vẫn được hỗ trợ.
Resource helpers — 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 ra khi giấy phép cho phép, giữ giao diện 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ác cờ CssConfig: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (có giấy phép tìm kiếm), IncludeAnnotationCss (có giấy phép chú thích).
Các 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ó giấy phép tìm kiếm), IncludeAnnotationScripts và IncludeAnnotationBar (có giấy phép 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?