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.

OverloadGunakan 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
csharp
// 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.
  • FormatNotSupportedExceptionDocument format '<extension>' is not supported.
  • InvalidDataException — konten file rusak atau tidak cocok dengan ekstensi nya.

CloseDocument

text
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

text
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):

TypePropertyDefaultDescription
stringPassword""Kata sandi untuk dokumen yang dilindungi (disalin ke konfigurasi format secara otomatis).
intImageResolution0Obsolete. Dipertahankan hanya untuk kompatibilitas — setel ImageResolution pada konfigurasi format sebagai gantinya.
stringWatermark""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".
intTimeOut60Kedaluwarsa bergulir sesi dalam menit.
boolIsSecuredtrueNot 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:

TypePropertyDefaultDescription
boolIsWebFarmfalseMenandai operasi buka sebagai skenario web‑farm. Gunakan hanya dengan arsitektur penyimpanan/sesi bersama yang bersesuaian.
stringWebFarmPath""Jalur bersama yang digunakan oleh alur kerja web‑farm khusus. Kosong pada penampil satu‑host normal.
boolEditModefalseCadangan 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
^Text~Color~FontSize~FontName~Opacity~Angle
csharp
string token = await viewer.OpenDocumentAsync(
    path,
    new PdfConfig(),
    new DocOptions
    {
        Watermark = "^Confidential~Red~24~Verdana~80~-45",
        TimeOut = 30
    });
FieldExampleMeaning
Leading ^^Tata letak semua sudut opsional. Tanpa ini, penempatan watermark standar yang digunakan.
TextConfidentialTeks yang digambar pada setiap halaman. Tidak boleh kosong.
ColorRedNama warna yang dipahami oleh lapisan gambar.
FontSize24Ukuran font; masukan numerik tidak valid akan kembali ke nilai default renderer.
FontNameVerdanaKeluarga font yang diminta. Pastikan sudah terpasang di lingkungan penyebaran.
Opacity80Nilai byte dari 0 hingga 255. Harus dapat di‑parse dengan sukses.
Angle-45Sudut 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 stateCustom value suppliedRendered result
Lisensi penampil berbayar yang validNoHalaman bersih
Lisensi penampil berbayar yang validYesWatermark khusus
Penampil dasar Sementara/Demo yang aktifNoHalaman penampil dasar bersih
Penampil dasar Sementara/Demo yang aktifYesWatermark khusus ketika jalur penampil dasar bersih diterapkan
Lisensi hilang, ditolak, kedaluwarsa, versi salah, atau domain tidak validEitherWatermark penegakan/evaluasi; nilai khusus tidak menggantikannya
Rendering plugin di bawah aturan evaluasiEitherWatermark 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:

MemberPurpose
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

text
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.

text
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).

html
@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?