Penampil
Kelas penampil dokumen utama
Viewer (namespace Doconut) adalah titik masuk publik untuk membuka dokumen dari halaman Razor, kontroler MVC, komponen Blazor, atau API minimal. Kelas ini sealed, terdaftar sebagai layanan transient oleh AddDoconut(), dan di‑resolve melalui injeksi konstruktor — jangan pernah membuatnya secara langsung.
Viewer tidak menyimpan keadaan per‑permintaan dan dengan sengaja tidak mengimplementasikan IDisposable: sesi dokumen hidup secara independen di cache sesi, sehingga membuang layanan tidak akan pernah menutup dokumen yang terbuka (lihat Konsep Inti → Cara Kerja Penampil).
OpenDocumentAsync
Membuka sebuah dokumen dan mengembalikan token sesi yang digunakan widget klien untuk semua permintaan berikutnya.
| Overload | Gunakan ketika |
|---|---|
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default) | Membuka dari disk dengan deteksi format otomatis dan konfigurasi default format |
Task<string> OpenDocumentAsync(string filePath, BaseConfig? config, DocOptions? options = null, CancellationToken ct = default) | Anda memerlukan opsi rendering per‑format (PdfConfig, WordConfig, …) |
Task<string> OpenDocumentAsync(Stream stream, FileInfo fileInfo, BaseConfig? config = null, DocOptions? options = null, CancellationToken ct = default) | Dokumen bukan file di disk (unggahan, basis data, blob). fileInfo harus membawa ekstensi yang tepat — ia mengarahkan deteksi format |
// 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));Pengecualian yang harus ditangani:
LicenseException— lisensi yang ditemukan ditolak (pesan berisi alasan penolakan), atau format memerlukan kemampuan plugin yang tidak lagi diberikan. Kedaluwarsa kalender tanpa pesan penolakan beralih ke rendering ber‑watermark alih‑alih melempar pengecualian.FormatNotSupportedException—Document format '<extension>' is not supported.InvalidDataException— konten file rusak atau tidak cocok dengan ekstensi nya.
CloseDocument
void CloseDocument(string token)Menghapus sesi dari cache (menyelesaikan mesin dokumen secara langsung), menghapus penanda keamanan, dan mencabut hak akses. Opsional — kedaluwarsa bergulir melakukan pembersihan yang sama — tetapi disarankan untuk dokumen berukuran besar.
GetPageCount
int GetPageCount(string token)Jumlah total halaman dari sesi yang terbuka. Melempar pengecualian jika token tidak dikenal atau kedaluwarsa.
DocOptions
Opsi independen format per‑buka (namespace Doconut):
| Type | Property | Default | Description |
|---|---|---|---|
string | Password | "" | Kata sandi untuk dokumen yang dilindungi (disalin ke konfigurasi format secara otomatis). |
int | ImageResolution | 0 | Obsolete. Dipertahankan hanya untuk kompatibilitas — setel ImageResolution pada konfigurasi format sebagai gantinya. |
string | Watermark | "" | Teks watermark khusus yang digambar pada halaman yang dirender. String format: "^Text~Color~FontSize~FontName~Opacity~Angle", contoh: "^Sample Copy~Red~24~Verdana~80~-45". |
int | TimeOut | 60 | Kedaluwarsa bergulir sesi dalam menit. |
bool | IsSecured | true | Not currently enforced — cadangan. Pengikatan token dikontrol secara global oleh DoconutOptions.UnsafeMode (lihat Konsep Inti → Sesi & Keamanan). |
Kelas ini juga mengekspos properti khusus yang sengaja berada di luar alur tampilan satu‑host standar:
| Type | Property | Default | Description |
|---|---|---|---|
bool | IsWebFarm | false | Menandai operasi buka sebagai skenario web‑farm. Gunakan hanya dengan arsitektur penyimpanan/sesi bersama yang bersesuaian. |
string | WebFarmPath | "" | Jalur bersama yang digunakan oleh alur kerja web‑farm khusus. Kosong pada penampil satu‑host normal. |
bool | EditMode | false | Cadangan untuk alur kerja Editor yang didistribusikan terpisah; biarkan false untuk penampil standar. |
Watermark Kustom
DocOptions.Watermark menggunakan enam bidang yang dipisahkan tilde. Awalan opsional ^ meminta tata letak semua sudut:
^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 ^ | ^ | Tata letak semua sudut opsional. Tanpa ini, penempatan watermark standar yang digunakan. |
| Text | Confidential | Teks yang digambar pada setiap halaman. Tidak boleh kosong. |
| Color | Red | Nama warna yang dipahami oleh lapisan gambar. |
| FontSize | 24 | Ukuran font; masukan numerik tidak valid akan kembali ke nilai default renderer. |
| FontName | Verdana | Keluarga font yang diminta. Pastikan sudah terpasang di lingkungan penyebaran. |
| Opacity | 80 | Nilai byte dari 0 hingga 255. Harus dapat di‑parse dengan sukses. |
| Angle | -45 | Sudut rotasi dalam derajat; masukan numerik tidak valid akan kembali ke nilai default. |
Parser mengharapkan tepat enam bidang setelah ^ opsional. Definisi yang tidak valid diganti dengan fallback Invalid Watermark yang terlihat dari SDK alih‑alih menghilang secara diam‑diam.
Keputusan Lisensi
| License state | Custom value supplied | Rendered result |
|---|---|---|
| Lisensi penampil berbayar yang valid | No | Halaman bersih |
| Lisensi penampil berbayar yang valid | Yes | Watermark khusus |
| Penampil dasar Sementara/Demo yang aktif | No | Halaman penampil dasar bersih |
| Penampil dasar Sementara/Demo yang aktif | Yes | Watermark khusus ketika jalur penampil dasar bersih diterapkan |
| Lisensi hilang, ditolak, kedaluwarsa, versi salah, atau domain tidak valid | Either | Watermark penegakan/evaluasi; nilai khusus tidak menggantikannya |
| Rendering plugin di bawah aturan evaluasi | Either | Watermark evaluasi |
Keputusan yang sama diterapkan pada gambar halaman yang disajikan dan ekspor anotasi. Output GIF animasi ditandai frame per frame. Watermark khusus oleh karena itu merupakan fitur aplikasi berlisensi, bukan cara untuk mengganti atau menekan watermark evaluasi.
API Anotasi
Pemuatan dan ekspor anotasi sisi‑server. Panduan lengkap ada di Panduan → Anotasi; antarmukanya adalah:
| Member | Purpose |
|---|---|
AnnotationManager GetAnnotationManager(string token) | Manajer yang terikat pada dimensi halaman sesi yang terbuka |
AnnotationManager GetAnnotationManager(string token, int pageWidth, int pageHeight) | Manajer dengan dimensi halaman eksplisit |
AnnotationManager GetAnnotationManager(int pageWidth, int pageHeight) | Manajer independen sesi |
void LoadAnnotationData(string token, AnnotationManager manager) | Memuat anotasi yang dibangun dalam C# ke dalam sesi |
void LoadAnnotationData(string token, string annotationData) | Memuat anotasi dari envelope halaman/Base64 yang dikodekan yang dikembalikan oleh AnnotationManager.GetAnnotationData() |
void LoadAnnotationXML(string token, XmlDocument annotationXml) | Memuat anotasi dari XML |
XmlDocument GetAnnotationXML(string token) | Mengekspor anotasi sesi sebagai XML |
Task<byte[]> ExportAnnotationsToPdfAsync(string token, int zoom = 100, CancellationToken ct = default) | PDF dengan anotasi terbakar di dalamnya |
Task<int> ExportAnnotationsToPngAsync(…) | File PNG dengan anotasi terbakar di dalamnya |
Task<byte[]> ExportAnnotationsToPngZipAsync(string token, int zoom = 100, CancellationToken ct = default) | ZIP berisi PNG per‑halaman dengan anotasi terbakar di dalamnya |
Metadata DICOM
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)Mengembalikan metadata tag DICOM untuk sesi yang dibuka melalui plugin DICOM; null untuk dokumen non‑DICOM.
Pembantu Sumber Daya — ReferenceCss / ReferenceScripts
Menghasilkan tag <link>/<script> untuk sumber daya tersemat yang disajikan oleh UseDoconutResources(), dalam urutan ketergantungan yang tepat. Paket untuk fitur yang dibatasi lisensi seperti pencarian dan anotasi dihasilkan hanya ketika lisensi mengaktifkannya, menjaga UI klien konsisten dengan perilaku server.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)Flag CssConfig: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (dibatasi pencarian), IncludeAnnotationCss (dibatasi anotasi).
Flag ScriptConfig: IncludeJQuery (dibutuhkan oleh semua yang lain), IncludeBootstrap, IncludeViewerScripts (inti: docViewer.js + splitter + links), IncludeSearchScripts dan IncludeSearchBar (dibatasi pencarian), IncludeAnnotationScripts dan IncludeAnnotationBar (dibatasi anotasi).
@inject Doconut.Viewer Viewer
@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))Apakah halaman ini membantu?