Dönüştürücü Eklentisi

Belgeleri 24 hedef formata dönüştürün

Converter eklentisi, Doconut'ı bir belge‑dönüştürme hizmetine dönüştürür. Genel DocumentConverter arayüzünün arkasındaki motoru sağlar ve — isteğe bağlı olarak — kendi HTTP sözleşmesine sahip bir drop‑in widget sunar; böylece belgeleri C#'tan, widget'tan ya da kendinizin yazdığı bir ön uçtan dönüştürebilirsiniz.

Paketi Yükleyin

En son kararlı Converter eklentisini yükleyin:

bash
dotnet add package Doconut.NET6.Converter

Eklentiyi mevcut 26.7.0 sürümüne sabitlemek için sürümü ayrı olarak belirtin:

bash
dotnet add package Doconut.NET6.Converter --version 26.7.0

Converter paketini Doconut.NET6 ile aynı sürümde tutun. Paket kimliği Doconut.NET6.Converter'dır; .26.7.0 yalnızca indirilen .nupkg dosya adında görünür.

Eklentiyi Kaydedin

AddConverter() yöntemi yoktur — Doconut'ın eklenti modeli tekdüzeldir. Her eklenti, Converter dahil, aynı şekilde kaydedilir: AddDoconut() içinde AddPlugin<TPlugin>() çağrılır. ConverterPlugin kendi NuGet paketi Doconut.NET6.Converter içinde gelir ve temel görüntüleyici paketiyle birlikte kurulur.

csharp
builder.Services.AddDoconut(options =>
{
    options.LicensePath = "Doconut.Viewer.lic";
    options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
});

Bu çağrı, eksik bir lisans, eski bir TRIAL dosyası veya Converter yetkisi vermeyen geçici olmayan bir lisans nedeniyle başlangıçta bir istisna fırlatır — AddDoconut() içinde yükseltilen bir InvalidOperationException ile, uygulama istekleri işlemeye başlamadan önce. Geçici Demo/NFR kayıtları kabul edilir; süresi dolduktan sonra dönüşüm, filigranlı çıktı ile kullanılabilir. Sessiz bir ücretsiz katman yoktur. Lisansların nasıl yüklendiğini görmek için Lisans Kurulumu sayfasına bakın.

C#'tan Dönüştürün

Her dönüşüm, 0 konumunda konumlandırılmış, hemen okunabilir veya kopyalanabilir bir MemoryStream döndürür. DocumentConverter'ı ihtiyacınız olduğu yerde DI'dan alın — tasarım gereği durum bilgisizdir, bu yüzden tek bir örnek istekler arasında güvenle yeniden kullanılabilir.

csharp
// Inject DocumentConverter; its constructor is internal, so never `new` it.
Stream pdf = await converter.ConvertAsync("contract.docx", ConversionTarget.Pdf, ct: ct);
csharp
// sourceExtension includes the leading dot. password is null unless the document is protected.
Stream png = await converter.ConvertAsync(upload, ".xlsx", ConversionTarget.Png, password: null, ct: ct);
csharp
Stream html = await converter.WordToHtmlAsync("report.docx", ct);
csharp
Stream docx = await converter.HtmlToWordAsync(html, ConversionTarget.Docx, ct);

Yanlış yapılması kolay iki nokta vardır: akış aşırı yüklemesindeki sourceExtension ön ek nokta içermelidir (".xlsx" gibi, "xlsx" değil) — dönüştürücü bunu format kataloğuna karşı eşleştirir ve noktasız bir uzantı çözülemez. Ayrıca adı ne olursa olsun, WordToHtmlAsync Task<Stream> döndürür, Task<string> değil — HTML belgesini (Base64 gömülü resimlerle) bir akış olarak alırsınız, diğer tüm dönüşüm sonuçları gibi.

Hedef formatları

text
Pdf, Docx, Doc, Html, Xlsx, Pptx, Png, Jpeg, Csv, Tiff, Bmp, Gif, Svg, Xml,
Txt, Xls, Jp2, Rtf, Odt, Ods, Odp, Epub, Xps, Webp

Her kaynak her hedefe dönüştürülemez — eklenti, her kaynağın format ailesini (Word, Excel, PowerPoint, PDF, CAD, Image, Email, Diagram, Project/Task, PSD, web document) kendi sabit izin verilen hedef kümesiyle eşleştirir. Bu enum'ı UI'nizin hedef listesi olarak sabitlemeyin: ?convert=open yeni yüklenen dosya için gerçek allowedTargets değerlerini döndürür ve bu değerler bir seçim kutusunu beslemelidir.

Drop-in widget

Widget'ın ?convert=open|run|download uç noktaları isteğe bağlıdır ve kutudan çıkar çıkmaz devre dışıdır — varsayılan olarak güvenlidir. Bu uç noktaları sunucu tarafında, eklenti kaydıyla birlikte etkinleştirin:

csharp
builder.Services.AddDoconut(options =>
{
    options.LicensePath = "Doconut.Viewer.lic";
    options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
    options.AddConverterWidget(widget =>
    {
        widget.MaxUploadMb = 25;
    });
});
html
<div id="doconut-convert"></div>
<script src="/doconut-res/js/doconutConverter.js"></script>
<script>
  Doconut.convert('#doconut-convert', { basePath: '/doconut', resPath: '/doconut-res', maxUploadMb: 25 });
</script>

AddConverterWidget() kullanılmadığında üç ?convert= uç noktası 404 yanıtı verir — ancak JavaScript dosyası yine de sunulur (bu, sadece iletişim kurduğu uç noktaların kısıtlandığı düz bir gömülü statik kaynaktır). AddConverterWidget() hâlâ Converter eklentisinin kaydedilmiş olmasını ve Converter yetkisi veren bir lisansın bulunmasını gerektirir; kendi başına dönüşüm hakkı vermez.

Widget'ı Özelleştirin

Doconut.convert(seçici, seçenekler) fonksiyonuna geçirilen başlangıç seçenekleri:

SeçenekTürVarsayılanNotlar
basePathstring/doconut?convert= uç noktaları için temel yol; UseDoconut()'un gerçekten bağlandığı ASP.NET dalı ile eşleşmelidir (genellikle MiddlewarePath üzerinden koordine edilir)
resPathstring/doconut-resDiğer Doconut widget'larıyla yapılandırma tutarlılığı için kabul edilir; dönüştürücü widget şu anda ondan bir URL oluşturmaz
maxUploadMbnumber25Yalnızca istemci tarafı ön kontrol — dosya yüklenmeden önce aşırı büyük bir dosyayı reddeder. Sunucu bağımsız olarak kendi sınırını uygular ve aşılırsa 413 yanıtı verir
licenseUrlstring | nullnullAyarlandığında, sonuç ekranındaki filigran uyarısını bu URL'ye bir bağlantı haline getirir
labelsobject{}Widget'ın İngilizce varsayılan metinlerinin (bırakma metni, düğmeler, aria-live duyuruları, hata mesajları) herhangi bir alt kümesini geçersiz kılar

Geri Çağrılar:

Geri ÇağrıNe zaman TetiklenirYük
onReady()Widget boş/bırakma ekranını render ettiğinde
onSourceLoaded({ token, pages, sourceExt, allowedTargets })?convert=open başarılı olduğundakaynak oturum token'ı, sayfa sayısı, kaynak uzantısı (ön ek nokta yok), izin verilen hedef listesi
onConverted({ downloadToken, resultToken, resultPages, downloadName, watermarked, target })?convert=run başarılı olduğundaçalıştırma yanıtındaki aynı alanlar, istenen target ile birlikte
onDownload({ downloadName, downloadToken })Kullanıcı İndir linkine tıkladığındatarayıcının yerel indirmesiyle birlikte tetiklenir — engellemez veya değiştirmez
onError({ phase, message })Bir open veya run isteği başarısız olduğundaphase 'open' ya da 'run'; message sunucu hatasının (veya yükleme boyutu ön kontrolü için istemci tarafı mesajının) temizlenmiş hali

Doconut.convert() widget örneğini döndürür — programatik olarak widget'ı kontrol etmek için bu örneği saklayın:

javascript
const conv = Doconut.convert('#doconut-convert', { basePath: '/doconut' });
conv.reset();         // boş/bırakma ekranına geri döner; onReady tekrar tetiklenmez
conv.loadFile(file);  // bir File nesnesiyle akışı başlatır; şu anda boş değilse hiçbir şey yapmaz
conv.destroy();       // dinleyicileri kaldırır, bağlamayı boşaltır; örnek bundan sonra kullanılamaz

Kendi Ön Ucunuzun Oluşturun

Widget sadece bu HTTP sözleşmesi için bir istemcidir — farklı bir UX için doğrudan ona karşı kendi ön ucunuzu oluşturun. Üç rota da UseDoconut()'un bağlandığı ASP.NET dalı altında bulunur (genellikle /doconut):

RotaAmaçBaşarılı yanıt
POST ?convert=open (multipart, field file)Kaynak belgeyi ön izleme için yükleyip açar200{ token, pages, sourceExt, allowedTargets }
POST ?token=<token>&convert=run&target=<ext>Saklanan kaynağı target'a dönüştürür200{ downloadToken, resultToken, resultPages, downloadName, watermarked }
GET ?convert=download&token=<downloadToken>Dönüştürülmüş dosyayı akış olarak gönderir200 — dosya baytları, Content-Disposition: attachment, Cache-Control: no-store

Yüklenen kaynak baytları sunucu tarafında 30 dakikalık bir TTL ile saklanır; bu süre dolduğunda run 404 yanıtı verir ve dosya yeniden açılmalıdır. Dönüştürülmüş sonuç aynı saklamada kalır — dönüşüm tamamlandığında downloadToken kendi 30 dakikalık süresini alır — resultToken ise görüntüleyicinin oturum önbelleğinin süresini izleyen normal bir görüntüleyici oturum token'ıdır, saklamadan bağımsızdır.

open yanıtındaki sourceExt ön ek nokta içermez (ör. "docx"); bu, DocumentConverter.ConvertAsync üzerindeki sourceExtension parametresinin bir nokta gerektiren ters konvansiyonudur.

Hata Modları, Rota Bazında Gruplanmıştır:

RotaDurumNe ZamanGövde
any404Widget etkinleştirilmemiş (AddConverterWidget() hiç çağrılmamış) — üç rotadan önce kontrol edilirsadece durum kodu
any405Yanlış HTTP yöntemi (open/run POST, download GET gerekir)sadece durum kodu
open413Yüklenen dosya MaxUploadMb limitini aşıyor{ "error": "Dosya çok büyük." }
open400Multipart gövde yok, dosya yok veya dönüştürülemeyen bir kaynak uzantısı{ "error": "..." }
run400Geçersiz token (GUID değil) veya target bir ConversionTarget'a parse edilemiyor{ "error": "Geçersiz token." } / { "error": "Bilinmeyen hedef formatı." }
run400target kaynak dosyanın allowedTargets listesinde yok{ "error": "Bu hedef formatı bu dosya için mevcut değil." }
run404Saklanan yükleme süresi dolmuş (30 dk) veya token hiç açılmamış{ "error": "Yükleme süresi doldu — lütfen dosyayı yeniden açın." }
open, run500İşlem dahili olarak başarısız oldu{ "error": "<sanitized message>" } — diğer Doconut hata yolları gibi temizlenir; iç motor isimleri sızdırılmaz
download400Geçersiz token (GUID değil)sadece durum kodu
download404Bilinmeyen veya süresi dolmuş indirme token'ısadece durum kodu

Kaynak Sahipliği

Dönüştürücü, sıfır konumunda konumlandırılmış, arama yapılabilir bir MemoryStream döndürür. Bu akışı çağıran taraf sahip olur ve içeriği kopyaladıktan veya döndürdükten sonra serbest bırakmalıdır. DocumentConverter servisi durum bilgisizdir ve bağımlılık enjeksiyonundan çözülür; hizmeti elle oluşturmayın veya elle serbest bırakmayın.

Web widget'ı için, yükleme ve indirme saklamaları bağımsız 30 dakikalık TTL'lere sahiptir. Bir görüntüleyici resultToken ise görüntüleyici oturumunun ömrünü izler. Bir görüntüleyici sonucu kapatmak hâlâ geçerli bir indirme saklamasını silmez ve tarayıcı widget'ını sıfırlamak da TTL'leri uzatmaz.

Sorun Giderme

SemptomKontrol
DocumentConverter çözümlemesi başarısız oluyorConverterPlugin kaydı AddDoconut() içinde yapılmış olmalı
Uygulama başlatma sırasında başarısız oluyorYüklenen lisans Converter yetkisi veriyor
Akış dönüşümü formatın desteklenmediğini söylüyorsourceExtension ön ek nokta içeriyor
Widget JavaScript yükleniyor ancak istekler 404 döndürüyorAddConverterWidget() çağrılmamış
Widget istekleri yanlış URL kullanıyorbasePath UseDoconut()'un bağlandığı dal ile eşleşiyor
Hedef eksikconvert=open tarafından dönen allowedTargets kullanın; her kaynak her enum hedefini desteklemez
İndirme süresi dolduconvert=open/convert=run işlemlerini tekrarlayın; saklama token'ları kasıtlı olarak geçicidir

Filigranlama

ConverterPlugin kaydedildiğinde, ana bilgisayarın lisansı üç durumdan birinde olur:

Lisans durumuBaşlangıç kontrolüDönüşüm çıktısı
Ödeme yapılan görüntüleyici lisansı Converter yetkisi veriyor, geçerlilik süresi içindeGeçerliTemiz — watermarked: false
Aktif değerlendirme (demo/NFR) lisansıGeçerliBaşarıyla dönüştürür, değerlendirme filigranı eklenir — watermarked: true
Lisanssız, eski bir TRIAL dosyası veya Converter yetkisi vermeyen geçici olmayan bir lisansUygulama hiç başlamaz — yukarıda açıklanan başlangıç kontrolü bir istisna fırlatır
Süresi dolmuş Geçici/Demo lisansıKayıt süresi dolduktan sonra da devam ederDeğerlendirme filigranı ile dönüştürür — watermarked: true

Her iki çağrı yolu da aynı kuralı kullanarak bayrağı hesaplar: DocumentConverter C# arayüzü, lisansın IsViewerLicensed ve IsTemporary durumlarından içsel olarak türetir; widget'ın ?convert=run işleyicisi eşdeğer kontrolü (IsViewerLicensed && !IsTrial && !IsTemporary) yaparak döndürdüğü watermarked alanını doldurur. Bir entegrasyon, satın almadan önce bir değerlendirme lisansı ile uçtan uca kurulup test edilebilir — yalnızca çıktı baytları değişir.

Bu sayfa yardımcı oldu mu?