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:
dotnet add package Doconut.NET6.ConverterEklentiyi mevcut 26.7.0 sürümüne sabitlemek için sürümü ayrı olarak belirtin:
dotnet add package Doconut.NET6.Converter --version 26.7.0Converter 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.
builder.Services.AddDoconut(options =>
{
options.LicensePath = "Doconut.Viewer.lic";
options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
});Bu çağrı, eksik bir lisans, eski bir
TRIALdosyası veyaConverteryetkisi vermeyen geçici olmayan bir lisans nedeniyle başlangıçta bir istisna fırlatır —AddDoconut()içinde yükseltilen birInvalidOperationExceptionile, 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.
// Inject DocumentConverter; its constructor is internal, so never `new` it.
Stream pdf = await converter.ConvertAsync("contract.docx", ConversionTarget.Pdf, ct: ct);// 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);Stream html = await converter.WordToHtmlAsync("report.docx", ct);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ı
Pdf, Docx, Doc, Html, Xlsx, Pptx, Png, Jpeg, Csv, Tiff, Bmp, Gif, Svg, Xml,
Txt, Xls, Jp2, Rtf, Odt, Ods, Odp, Epub, Xps, WebpHer 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:
builder.Services.AddDoconut(options =>
{
options.LicensePath = "Doconut.Viewer.lic";
options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
options.AddConverterWidget(widget =>
{
widget.MaxUploadMb = 25;
});
});<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çenek | Tür | Varsayılan | Notlar |
|---|---|---|---|
basePath | string | /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) |
resPath | string | /doconut-res | Diğ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 |
maxUploadMb | number | 25 | Yalnı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 |
licenseUrl | string | null | null | Ayarlandığında, sonuç ekranındaki filigran uyarısını bu URL'ye bir bağlantı haline getirir |
labels | object | {} | 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 Tetiklenir | Yük |
|---|---|---|
onReady() | Widget boş/bırakma ekranını render ettiğinde | — |
onSourceLoaded({ token, pages, sourceExt, allowedTargets }) | ?convert=open başarılı olduğunda | kaynak 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ığında | tarayı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ğunda | phase '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:
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ılamazKendi Ö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):
| Rota | Amaç | Başarılı yanıt |
|---|---|---|
POST ?convert=open (multipart, field file) | Kaynak belgeyi ön izleme için yükleyip açar | 200 — { token, pages, sourceExt, allowedTargets } |
POST ?token=<token>&convert=run&target=<ext> | Saklanan kaynağı target'a dönüştürür | 200 — { downloadToken, resultToken, resultPages, downloadName, watermarked } |
GET ?convert=download&token=<downloadToken> | Dönüştürülmüş dosyayı akış olarak gönderir | 200 — 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:
| Rota | Durum | Ne Zaman | Gövde |
|---|---|---|---|
| any | 404 | Widget etkinleştirilmemiş (AddConverterWidget() hiç çağrılmamış) — üç rotadan önce kontrol edilir | sadece durum kodu |
| any | 405 | Yanlış HTTP yöntemi (open/run POST, download GET gerekir) | sadece durum kodu |
open | 413 | Yüklenen dosya MaxUploadMb limitini aşıyor | { "error": "Dosya çok büyük." } |
open | 400 | Multipart gövde yok, dosya yok veya dönüştürülemeyen bir kaynak uzantısı | { "error": "..." } |
run | 400 | Geçersiz token (GUID değil) veya target bir ConversionTarget'a parse edilemiyor | { "error": "Geçersiz token." } / { "error": "Bilinmeyen hedef formatı." } |
run | 400 | target kaynak dosyanın allowedTargets listesinde yok | { "error": "Bu hedef formatı bu dosya için mevcut değil." } |
run | 404 | Saklanan 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, run | 500 | İş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 |
download | 400 | Geçersiz token (GUID değil) | sadece durum kodu |
download | 404 | Bilinmeyen 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
| Semptom | Kontrol |
|---|---|
DocumentConverter çözümlemesi başarısız oluyor | ConverterPlugin kaydı AddDoconut() içinde yapılmış olmalı |
| Uygulama başlatma sırasında başarısız oluyor | Yüklenen lisans Converter yetkisi veriyor |
| Akış dönüşümü formatın desteklenmediğini söylüyor | sourceExtension ön ek nokta içeriyor |
| Widget JavaScript yükleniyor ancak istekler 404 döndürüyor | AddConverterWidget() çağrılmamış |
| Widget istekleri yanlış URL kullanıyor | basePath UseDoconut()'un bağlandığı dal ile eşleşiyor |
| Hedef eksik | convert=open tarafından dönen allowedTargets kullanın; her kaynak her enum hedefini desteklemez |
| İndirme süresi doldu | convert=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 durumu | Başlangıç kontrolü | Dönüşüm çıktısı |
|---|---|---|
Ödeme yapılan görüntüleyici lisansı Converter yetkisi veriyor, geçerlilik süresi içinde | Geçerli | Temiz — watermarked: false |
| Aktif değerlendirme (demo/NFR) lisansı | Geçerli | Baş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 lisans | Uygulama 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 eder | Değ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?