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. Ini sealed, terdaftar sebagai layanan transient oleh AddDoconut(), dan diresolusikan melalui injeksi konstruktor — jangan pernah membuatnya secara langsung.

Viewer tidak menyimpan state per-permintaan dan secara sengaja tidak mengimplementasikan IDisposable: sesi dokumen hidup secara independen dalam cache sesi, sehingga membuang layanan tidak pernah dapat menutup dokumen yang terbuka (lihat Konsep Inti → Cara Kerja Viewer).

OpenDocumentAsync

Membuka 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 membutuhkan 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 benar — 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 membawa alasan penolakan), atau format membutuhkan kemampuan plugin yang tidak lagi diberikan. Kedaluwarsa kalender tanpa pesan penolakan beralih ke rendering berwatermark 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 (membuang mesin dokumen segera), menghapus penanda keamanan, dan mencabut hak akses. Opsional — kedaluwarsa bergulir melakukan pembersihan yang sama — tetapi disarankan untuk dokumen besar.

GetPageCount

text
int GetPageCount(string token)

Total halaman dari sesi yang terbuka. Melempar pengecualian jika token tidak dikenal atau kedaluwarsa.

DocOptions

Opsi per-buka, independen format (namespace Doconut):

TipePropertiDefaultDeskripsi
stringPassword""Password untuk dokumen yang dilindungi (disalin ke konfigurasi format secara otomatis).
intImageResolution0Usang. Disimpan hanya untuk kompatibilitas — atur 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.
boolIsSecuredtrueTidak sedang ditegakkan — cadangan. Pengikatan token dikontrol secara global oleh DoconutOptions.UnsafeMode (lihat Konsep Inti → Sessions & Security).

Kelas ini juga mengekspos properti khusus yang sengaja berada di luar alur penayangan satu-host normal:

TipePropertiDefaultDeskripsi
boolIsWebFarmfalseMenandai operasi buka sebagai skenario web-farm. Gunakan hanya dengan arsitektur penyimpanan/sesi bersama yang sesuai.
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.

Custom watermark

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
    });
BidangContohMakna
Leading ^^Tata letak semua sudut opsional. Tanpa itu, penempatan watermark normal digunakan.
TextConfidentialTeks yang dirender pada setiap halaman. Tidak boleh kosong.
ColorRedWarna bernama yang dipahami oleh lapisan gambar.
FontSize24Ukuran font; input numerik tidak valid kembali ke default perender.
FontNameVerdanaKeluarga font yang diminta. Pastikan terpasang di lingkungan penyebaran.
Opacity80Nilai byte dari 0 hingga 255. Harus dapat diurai dengan sukses.
Angle-45Sudut rotasi dalam derajat; input numerik tidak valid kembali ke default.

Parser mengharapkan tepat enam bidang setelah ^ opsional. Definisi tidak valid digantikan oleh fallback Invalid Watermark yang terlihat dari SDK alih-alih menghilang secara diam-diam.

License decision

Status lisensiNilai khusus yang diberikanHasil render
Lisensi penampil berbayar yang validTidakHalaman bersih
Lisensi penampil berbayar yang validYaWatermark khusus
Penampil dasar Sementara/Demo yang aktifTidakHalaman penampil dasar bersih
Penampil dasar Sementara/Demo yang aktifYaWatermark khusus ketika jalur penampil dasar bersih diterapkan
Lisensi hilang, ditolak, kedaluwarsa, versi salah, atau domain tidak validKeduanyaWatermark penegakan/evaluasi; nilai khusus tidak menggantikannya
Rendering plugin di bawah aturan evaluasiKeduanyaWatermark evaluasi

Keputusan yang sama diterapkan pada gambar halaman yang disajikan dan ekspor anotasi. Output GIF animasi ditandai frame demi frame. Oleh karena itu watermark khusus adalah fitur aplikasi berlisensi, bukan cara untuk mengganti atau menekan watermark evaluasi.

Annotations API

Pemuatan dan ekspor anotasi sisi server. Panduan lengkap berada di Panduan → Anotasi; antarmukanya adalah:

AnggotaTujuan
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)Muat anotasi yang dibangun dalam C# ke dalam sesi
void LoadAnnotationData(string token, string annotationData)Muat anotasi dari halaman yang dienkode/ampul Base64 yang dikembalikan oleh AnnotationManager.GetAnnotationData()
void LoadAnnotationXML(string token, XmlDocument annotationXml)Muat anotasi dari XML
XmlDocument GetAnnotationXML(string token)Ekspor 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 dari PNG per halaman dengan anotasi terbakar di dalamnya

DICOM metadata

text
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)

Metode ini ada untuk penyelarasan API, tetapi penampil DICOM .NET 6 tidak dapat menyediakan tag teknis. Ia mengembalikan null untuk sesi DICOM dan non-DICOM; pada sesi DICOM juga menulis peringatan satu kali yang menjelaskan keterbatasan platform. Rendering halaman, frame, dan animasi tetap didukung.

Resource helpers — ReferenceCss / ReferenceScripts

Menghasilkan tag <link>/<script> untuk sumber daya tersemat yang disajikan oleh UseDoconutResources(), dalam urutan ketergantungan yang benar. 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 lainnya), 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?