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

Perpustakaan .NET Standard sebelumnya mengekspos konstruktor publik yang menerima cache memori, akses konteks HTTP, dan satu atau lebih jalur lisensi. Konstruktor itu sudah tidak ada; grafik layanan menyediakan ketergantungan tersebut.

Viewer tidak menyimpan status per-permintaan dan dengan sengaja tidak mengimplementasikan IDisposable: sesi dokumen hidup secara independen dalam cache sesi, sehingga membuang layanan tidak pernah dapat menghentikan dokumen yang terbuka (lihat Core Concepts → How the Viewer Works).

OpenDocumentAsync

Membuka dokumen dan mengembalikan token sesi yang digunakan widget klien untuk semua permintaan berikutnya. Setiap pembukaan bersifat asinkron — tidak ada OpenDocument sinkron.

Beban LebihGunakan 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 (unggah, basis data, blob). fileInfo harus membawa ekstensi yang benar — itu mengarahkan deteksi format
csharp
// Buka sederhana
string token = await viewer.OpenDocumentAsync(path);

// Dengan konfigurasi dan opsi per-format
token = await viewer.OpenDocumentAsync(
    path,
    new PdfConfig { AllowSearch = true, AllowCopy = true },
    new DocOptions { TimeOut = 30 });

// Dari unggahan
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.
  • FormatNotSupportedException — Document 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 secara langsung), menghapus penanda keamanan, dan mencabut pemberian 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.

Capability flags

AnggotaArti
bool IsSearchEnabledLisensi saat ini memberikan Search
bool IsAnnotationEnabledLisensi saat ini memberikan Annotation

Gunakan ini dalam tampilan Razor untuk merender Ribbon berlisensi hanya ketika server benar‑benar menyediakannya — lihat Panduan Cepat.

DocOptions

Opsi independen format per pembukaan (namespace Doconut):

TipePropertiDefaultDeskripsi
stringPassword""Kata sandi untuk dokumen yang dilindungi (disalin ke dalam konfigurasi format secara otomatis).
intImageResolution0Usang. Disimpan 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", misalnya "^Sample Copy~Red~24~Verdana~80~-45".
intTimeOut60Kedaluwarsa bergulir sesi dalam menit.
boolIsSecuredtrueTidak sedang ditegakkan — cadangan. Pengikatan token dikendalikan secara global oleh DoconutOptions.UnsafeMode (lihat Core Concepts → Sessions & Security).

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

TipePropertiDefaultDeskripsi
boolIsWebFarmfalseMenandai operasi buka sebagai skenario penyimpanan bersama. Perhatikan kapitalisasi — perpustakaan sebelumnya menuliskan ini sebagai IsWebfarm.
stringWebFarmPath""Jalur bersama yang digunakan oleh alur kerja tersebut. Sebelumnya dieja WebfarmPath. Kosong dalam penampil satu‑host normal, dan tidak diperlukan pada jalur publikasi yang dijelaskan dalam Penyebaran Terdistribusi.
boolEditModefalseCadangan untuk alur kerja penyuntingan yang didistribusikan secara terpisah; biarkan false untuk penampil standar.

Watermark khusus

DocOptions.Watermark menggunakan enam bidang yang dipisahkan oleh 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
Awalan ^^Tata letak semua sudut opsional. Tanpa itu, penempatan watermark normal digunakan.
TeksConfidentialTeks yang ditampilkan pada setiap halaman. Tidak boleh kosong.
WarnaRedWarna bernama yang dipahami oleh lapisan gambar.
UkuranFont24Ukuran font; input numerik tidak valid akan kembali ke default perender.
NamaFontVerdanaKeluarga font yang diminta. Pastikan sudah terpasang di lingkungan penyebaran.
Opasitas80Nilai byte dari 0 hingga 255. Harus dapat diparse dengan sukses.
Sudut-45Sudut rotasi dalam derajat; input numerik tidak valid akan kembali ke default.

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

Keputusan lisensi

Status lisensiNilai khusus disediakanHasil 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 yang hilang, ditolak, kedaluwarsa, versi salah, atau domain tidak validKeduanyaWatermark penegakan/penilaian; nilai khusus tidak menggantikannya
Rendering plugin di bawah aturan penilaianKeduanyaWatermark penilaian

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

API Anotasi

Pemuat dan ekspor anotasi sisi server. Panduan lengkapnya 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 dibuat dalam C# ke dalam sesi
void LoadAnnotationData(string token, string annotationData)Muat anotasi dari halaman yang dienkode / amplop 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 yang dibakar
Task<int> ExportAnnotationsToPngAsync(…)File PNG dengan anotasi yang dibakar
Task<byte[]> ExportAnnotationsToPngZipAsync(string token, int zoom = 100, CancellationToken ct = default)ZIP berisi PNG per halaman dengan anotasi yang dibakar

Setiap yang ini mengambil token sesi. Bebas sesi pada perpustakaan sebelumnya
Bentuk GetAnnotationManager(pageWidth, pageHeight) bertahan untuk membangun anotasi
di luar sesi, tetapi memuatnya masih memerlukan token.

Metadata DICOM

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

Metode ini ada untuk penyelarasan API, tetapi paket ini tidak dapat menyediakan tag teknis DICOM
tag: pembaca metadata hanya menyediakan build .NET 8. Ia mengembalikan null untuk DICOM dan
sesi non-DICOM; pada sesi DICOM juga menulis peringatan satu kali yang menjelaskan
batasan platform. Rendering halaman, frame, dan animasi tetap didukung.

Penolong sumber daya — ReferenceCss / ReferenceScripts

Keluarkan tag <link>/<script> untuk sumber daya tersemat yang disajikan oleh UseDoconutResources(), dalam urutan ketergantungan yang benar. Bundel untuk fitur yang dibatasi lisensi seperti pencarian dan anotasi dikeluarkan hanya ketika lisensi mengaktifkannya, menjaga UI klien tetap konsisten dengan perilaku server.

text
string ReferenceCss(CssConfig? config = null)      // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)

CssConfig bendera: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (dibatasi pencarian), IncludeAnnotationCss (dibatasi anotasi).

ScriptConfig bendera: 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 }))

Penolong ini adalah cara yang didukung untuk menyampaikan sumber daya peramban. Aplikasi yang menyalin docViewer.js, documentLinks.js, dan docViewer.UI.js ke dalam wwwroot harus menghapus salinan tersebut setelah halaman dirender dari tag yang dikeluarkan.

Apakah halaman ini membantu?