Görüntüleyici
Ana belge görüntüleyici sınıfı
Viewer (namespace Doconut) Razor sayfalarından, MVC denetleyicilerinden, Blazor bileşenlerinden veya minimal API'lerden belge açmak için genel giriş noktasını sağlar. sealed (mühürlenmiş) olup AddDoconut() ile transient (geçici) hizmet olarak kaydedilir ve yapıcı enjeksiyonu üzerinden çözülür — doğrudan oluşturulmaz.
Viewer istek başına durum tutmaz ve kasıtlı olarak IDisposable uygulamaz: belge oturumları oturum önbelleğinde bağımsız olarak yaşar, bu yüzden hizmeti yok etmek açık bir belgeyi asla kapatamaz (bkz. Core Concepts → Viewer Nasıl Çalışır).
OpenDocumentAsync
Bir belge açar ve istemci widget'ının sonraki tüm isteklerde kullandığı oturum jetonunu döndürür.
| Aşırı Yükleme | Ne zaman kullanılmalı |
|---|---|
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default) | Diskten otomatik format algılaması ve formatın varsayılan yapılandırmasıyla açma |
Task<string> OpenDocumentAsync(string filePath, BaseConfig? config, DocOptions? options = null, CancellationToken ct = default) | Her format için ayrı render ayarlarına (PdfConfig, WordConfig, …) ihtiyacınız olduğunda |
Task<string> OpenDocumentAsync(Stream stream, FileInfo fileInfo, BaseConfig? config = null, DocOptions? options = null, CancellationToken ct = default) | Belge diskte bir dosya değil (yükleme, veritabanı, blob). fileInfo doğru uzantıyı taşımalıdır — bu uzantı format algılamasını yönlendirir |
// 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));Ele alınması gereken istisnalar:
LicenseException— bulunan bir lisans reddedilir (mesaj reddetme nedenini taşır) veya format artık sağlanmayan bir eklenti yeteneği gerektirir. Reddetme mesajı olmadan takvim süresi dolması, istisna fırlatmak yerine su işareti ekli rendera düşer.FormatNotSupportedException—Document format '<extension>' is not supported.InvalidDataException— dosya içeriği bozuk veya uzantısıyla eşleşmiyor.
CloseDocument
void CloseDocument(string token)Oturumu önbellekten kaldırır (belge motorunu hemen yok eder), güvenlik işaretçisini siler ve erişim iznini iptal eder. İsteğe bağlı — kayma süresi aynı temizlik işlemini yapar — ancak büyük belgeler için önerilir.
GetPageCount
int GetPageCount(string token)Açık oturumun toplam sayfa sayısını döndürür. Jeton bilinmiyorsa veya süresi dolmuşsa istisna fırlatır.
DocOptions
Açma başına, format bağımsız seçenekler (namespace Doconut):
| Tür | Özellik | Varsayılan | Açıklama |
|---|---|---|---|
string | Password | "" | Korunan belgeler için şifre (format yapılandırmasına otomatik olarak kopyalanır). |
int | ImageResolution | 0 | Eski. Yalnızca uyumluluk için tutulur — bunun yerine format yapılandırmasında ImageResolution ayarlayın. |
string | Watermark | "" | Render edilen sayfalara çizilen özel su işareti metni. Biçim dizesi: "^Text~Color~FontSize~FontName~Opacity~Angle", örn. "^Sample Copy~Red~24~Verdana~80~-45". |
int | TimeOut | 60 | Oturum kayma süresi dakikalar içinde. |
bool | IsSecured | true | Şu anda zorunlu değil — ayrılmış. Jeton bağlaması global olarak DoconutOptions.UnsafeMode tarafından kontrol edilir (bkz. Core Concepts → Sessions & Security). |
Sınıf ayrıca normal tek‑host görüntüleme akışının dışına kasıtlı olarak konulmuş özel özellikler sunar:
| Tür | Özellik | Varsayılan | Açıklama |
|---|---|---|---|
bool | IsWebFarm | false | Açma işlemini web‑farm senaryosu olarak işaretler. Yalnızca ilgili paylaşımlı depolama/oturum mimarisiyle kullanın. |
string | WebFarmPath | "" | Özel web‑farm iş akışı tarafından kullanılan paylaşımlı yol. Normal tek‑host görüntüleyicide boş olur. |
bool | EditMode | false | Ayrı dağıtılan Editor iş akışı için ayrılmıştır; standart görüntüleyici için false bırakın. |
Özel su işareti
DocOptions.Watermark altı tilde‑ayırıcı alana sahiptir. İsteğe bağlı baştaki ^ tüm köşelerde yerleşim talep eder:
^Text~Color~FontSize~FontName~Opacity~Anglestring token = await viewer.OpenDocumentAsync(
path,
new PdfConfig(),
new DocOptions
{
Watermark = "^Confidential~Red~24~Verdana~80~-45",
TimeOut = 30
});| Alan | Örnek | Anlam |
|---|---|---|
Başlangıç ^ | ^ | İsteğe bağlı tüm köşelerde yerleşim. Olmazsa normal su işareti konumu kullanılır. |
| Text | Confidential | Her sayfada render edilen metin. Boş olmamalıdır. |
| Color | Red | Çizim katmanı tarafından anlaşılan adlandırılmış renk. |
| FontSize | 24 | Yazı boyutu; geçersiz sayısal giriş varsayılan rendera geri döner. |
| FontName | Verdana | İstenen yazı tipi ailesi. Dağıtım ortamında kurulu olduğundan emin olun. |
| Opacity | 80 | 0‑255 arası byte değeri. Başarıyla ayrıştırılmalıdır. |
| Angle | -45 | Derece cinsinden dönüş açısı; geçersiz sayısal giriş varsayılan değere geri döner. |
Ayrıştırıcı, isteğe bağlı ^ sonrası tam altı alan bekler. Geçersiz tanım, SDK'nın görünür Invalid Watermark geri dönüşüyle değiştirilir; sessizce kaybolmaz.
Lisans kararı
| Lisans durumu | Sağlanan özel değer | Oluşturulan sonuç |
|---|---|---|
| Geçerli ücretli görüntüleyici lisansı | Hayır | Temiz sayfa |
| Geçerli ücretli görüntüleyici lisansı | Evet | Özel su işareti |
| Etkin Geçici/Demo temel görüntüleyici | Hayır | Temiz temel‑görüntüleyici sayfası |
| Etkin Geçici/Demo temel görüntüleyici | Evet | Temiz temel‑görüntüleyici yolu uygulandığında özel su işareti |
| Eksik, reddedilmiş, süresi dolmuş, yanlış sürüm veya geçersiz‑alan lisansı | İster | Zorunlu/değerlendirme su işareti; özel değer bunu geçersiz kılmaz |
| Değerlendirme kuralları altında eklenti renderı | İster | Değerlendirme su işareti |
Aynı karar, sunulan sayfa görüntülerine ve açıklama dışa aktarımlarına da uygulanır. Animasyonlu GIF çıktısı kare‑kare damgalanır. Özel su işareti dolayısıyla lisanslı bir uygulama özelliğidir; değerlendirme su işaretini değiştirmek veya kaldırmak için kullanılmaz.
Açıklamalar API
Sunucu tarafı açıklama yükleme ve dışa aktarma. Tam kılavuz Guides → Annotations içinde bulunur; yüzey şu şekildedir:
| Üye | Amaç |
|---|---|
AnnotationManager GetAnnotationManager(string token) | Açık oturumun sayfa boyutlarına bağlı yönetici |
AnnotationManager GetAnnotationManager(string token, int pageWidth, int pageHeight) | Açık sayfa boyutlarıyla yönetici |
AnnotationManager GetAnnotationManager(int pageWidth, int pageHeight) | Oturumdan bağımsız yönetici |
void LoadAnnotationData(string token, AnnotationManager manager) | C# içinde oluşturulan açıklamaları oturuma yükle |
void LoadAnnotationData(string token, string annotationData) | AnnotationManager.GetAnnotationData() tarafından döndürülen kodlanmış sayfa/Base64 zarfından açıklamaları yükle |
void LoadAnnotationXML(string token, XmlDocument annotationXml) | XML üzerinden açıklamaları yükle |
XmlDocument GetAnnotationXML(string token) | Oturumun açıklamalarını XML olarak dışa aktar |
Task<byte[]> ExportAnnotationsToPdfAsync(string token, int zoom = 100, CancellationToken ct = default) | Açıklamaları yanmış PDF |
Task<int> ExportAnnotationsToPngAsync(…) | Açıklamaları yanmış PNG dosyaları |
Task<byte[]> ExportAnnotationsToPngZipAsync(string token, int zoom = 100, CancellationToken ct = default) | Açıklamaları yanmış sayfa‑PNG'lerinin ZIP'i |
DICOM meta verileri
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)Metod, API uyumluluğu için bulunur, ancak .NET 6 DICOM görüntüleyicisi teknik etiketleri sağlayamaz. DICOM ve DICOM olmayan oturumlar için null döner; bir DICOM oturumunda platform sınırlamasını açıklayan tek seferlik bir uyarı da yazar. Sayfa, kare ve animasyon renderı desteklenmeye devam eder.
Kaynak yardımcıları — ReferenceCss / ReferenceScripts
UseDoconutResources() tarafından sunulan gömülü kaynaklar için <link>/<script> etiketlerini doğru bağımlılık sırasıyla üretir. Arama ve açıklama gibi lisans‑kısıtlı özellikler yalnızca lisans bunları etkinleştirdiğinde emit edilir, böylece istemci UI'si sunucu davranışıyla tutarlı kalır.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)CssConfig bayrakları: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (arama‑kısıtlı), IncludeAnnotationCss (açıklama‑kısıtlı).
ScriptConfig bayrakları: IncludeJQuery (tüm diğerleri için gereklidir), IncludeBootstrap, IncludeViewerScripts (core: docViewer.js + splitter + links), IncludeSearchScripts ve IncludeSearchBar (arama‑kısıtlı), IncludeAnnotationScripts ve IncludeAnnotationBar (açıklama‑kısıtlı).
@inject Doconut.Viewer Viewer
@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))Bu sayfa yardımcı oldu mu?