Dönüştürücü Eklentisi
Belgeleri 24 hedef formata dönüştürün
Dönüştürücü 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şmesi olan bir drop-in widget sunar, böylece belgeleri C#'tan, widget'tan veya kendinizin yazdığı bir ön uçtan dönüştürebilirsiniz.
Paketi Yükleyin
En son kararlı Dönüştürücü eklentisini yükleyin:
dotnet add package Doconut.NET8.ConverterEklentiyi mevcut 26.7.0 sürümüne sabitlemek için sürümü ayrı olarak geçirin:
dotnet add package Doconut.NET8.Converter --version 26.7.0Dönüştürücü paketini Doconut.NET8 ile aynı sürümde tutun. Paket kimliği Doconut.NET8.Converter; .26.7.0 yalnızca indirilen .nupkg dosya adında görünür.
Eklentiyi Kaydedin
AddConverter() yöntemi yoktur — Doconut'un eklenti modeli tekdüzedir. Her eklenti, Dönüştürücü dahil, aynı şekilde kaydedilir: AddDoconut() içinde AddPlugin<TPlugin>() çağırın. ConverterPlugin kendi NuGet paketinde, Doconut.NET8.Converter, 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ı veyaConverteryeteneğini vermeyen geçici olmayan bir lisans nedeniyle başlangıçta bir istisna fırlatır —AddDoconut()içinde yükseltilen birInvalidOperationException, uygulama istekleri hizmet vermeden önce. Geçici Demo/NFR kayıtları kabul edilir; takvim süresi dolduktan sonra dönüşüm, filigranlı çıktı ile kullanılabilir olmaya devam eder. Sessiz bir ücretsiz katman yoktur. Lisansların nasıl yüklendiği için Lisans Kurulumu bölümüne bakın.
C#'tan Dönüştürme
Her dönüşüm, 0 konumunda konumlandırılmış, hemen okunabilir veya kopyalanabilir bir MemoryStream döndürür. DocumentConverter'ı ihtiyacınız olan her yerde DI'dan alın — tasarım gereği durumsuzdur, 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 detay: akış aşırı yüklemesindeki sourceExtension baştaki noktayı içermelidir (".xlsx", "xlsx" değil) — dönüştürücü bunu format kataloğuyla eşleştirir ve yalnızca uzantı çözülmez. Ve adı ne olursa olsun, WordToHtmlAsync Task<string> yerine Task<Stream> döndürür — HTML belgesini (Base64 olarak gömülü görüntülerle) 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ülmez — 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ümesine eşler. Bu enum'ı UI'nizin hedef listesi olarak sabit kodlamayın: ?convert=open yeni yüklenen dosya için gerçek allowedTargets döndürür ve bu, seçim aracını yönlendirmelidir.
Drop-in widget
Widget'ın ?convert=open|run|download uç noktaları isteğe bağlıdır ve varsayılan olarak devre dışıdır — varsayılan olarak güvenlidir. 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() olmadan, üç ?convert= uç noktası 404 yanıt verir — ancak JS dosyası yine de servis edilir (bu, gömülü bir statik kaynaktır; yalnızca iletişim kurduğu uç noktalar kısıtlanmıştır). AddConverterWidget() hâlâ Converter eklentisinin kaydedilmiş olmasını ve Converter yetkisi veren bir lisansı gerektirir — kendi başına dönüşüm hakları vermez.
Widget'ı Özelleştirme
Doconut.convert(seçici, seçenekler)'a geçirilen başlangıç seçenekleri:
| Seçenek | Tür | Varsayılan | Notlar |
|---|---|---|---|
basePath | string | /doconut | ?convert= uç noktaları için temel yol; UseDoconut()'ın gerçekte bağlandığı ASP.NET dalıyla eşleşmelidir (genellikle MiddlewarePath aracılığıyla 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 URL oluşturmaz |
maxUploadMb | number | 25 | Yalnızca istemci tarafı ön kontrol — dosya çok büyükse yüklemeden önce 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ıya dönüştürür |
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ırak 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ı (başta nokta yok), izin verilen hedef listesi |
onConverted({ downloadToken, resultToken, resultPages, downloadName, watermarked, target }) | ?convert=run başarılı olduğunda | run yanıtındaki aynı alanlar, ayrıca istenen target |
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 }) | open veya run isteği başarısız olduğunda | phase 'open' ya da 'run'; message temizlenmiş sunucu hatası (veya yükleme boyutu ön kontrolü için istemci tarafı mesajı) |
Doconut.convert() widget örneğini döndürür — programatik olarak widget'ı kontrol etmek için saklayın:
const conv = Doconut.convert('#doconut-convert', { basePath: '/doconut' });
conv.reset(); // back to the idle/drop screen; does not re-fire onReady
conv.loadFile(file); // starts the flow with a File object; no-op unless currently idle
conv.destroy(); // removes listeners, empties the mount; the instance is unusable after thisKendi ön ucunuzu oluşturun
Widget, bu HTTP sözleşmesi için yalnızca bir istemcidir — farklı bir kullanıcı deneyimi için doğrudan ona karşı kendi ön ucunuzu oluşturun. Üç rota da UseDoconut()'ın bağlandığı ASP.NET dalının altında bulunur (genellikle /doconut):
| Rota | Amaç | Başarı 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 — file bytes, Content-Disposition: attachment, Cache-Control: no-store |
Yüklenen kaynak baytları sunucu tarafında 30 dakikalık 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 bulunur — dönüşüm tamamlandığında downloadToken kendi yeni 30 dakikalık penceresine sahip olur — resultToken ise görüntüleyicinin oturum önbelleğinin süresini izleyen normal bir oturum tokenıdır, saklamadan bağımsız.
open yanıtındaki sourceExt başta nokta içermez (ör. "docx") — DocumentConverter.ConvertAsync üzerindeki sourceExtension parametresinin tersine, bu bir nokta gerektirir.
Hata Modları, Rota Bazında Gruplanmış
| Rota | Durum | Ne Zaman | Gövde |
|---|---|---|---|
| any | 404 | Widget etkinleştirilmemiş (AddConverterWidget() hiç çağrılmamış) — üç rotadan herhangi birine yönlendirilmeden önce kontrol edilir | yalnızca durum |
| any | 405 | Yanlış HTTP yöntemi (open/run POST gerektirir; download GET gerektirir) | yalnızca durum |
open | 413 | Uploaded file exceeds MaxUploadMb | { "error": "File is too large." } |
open | 400 | No multipart body, no file, or a source extension that can't be converted | { "error": "..." } |
run | 400 | Malformed token (not a GUID), or a target that doesn't parse to a ConversionTarget | { "error": "Invalid token." } / { "error": "Unknown target format." } |
run | 400 | target isn't in the source's allowedTargets | { "error": "That target format is not available for this file." } |
run | 404 | The stashed upload has expired (30-minute TTL) or the token was never opened | { "error": "Upload expired — please re-open the file." } |
open, run | 500 | Processing failed internally | { "error": "<sanitized message>" } — sanitized the same way as every other Doconut error path; never leaks internal engine names |
download | 400 | Malformed token (not a GUID) | status only |
download | 404 | Unknown or expired download token | status only |
Kaynak Sahipliği
Dönüştürücü, sıfır konumunda konumlandırılmış bir MemoryStream döndürür. Çağıran bu akışın sahibidir ve içeriği kopyaladıktan veya döndürdükten sonra serbest bırakmalıdır. DocumentConverter hizmeti durumsuzdur ve bağımlılık enjeksiyonundan çözülür; hizmeti manuel olarak oluşturmayın veya 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 oturum süresini izler. Bir görüntüleyici sonucunu kapatmak, hâlâ geçerli bir indirme saklamasını silmez ve tarayıcı widget'ını sıfırlamak hiçbir TTL'yi uzatmaz.
Sorun Giderme
| Belirti | Kontrol |
|---|---|
DocumentConverter çözümlemesi başarısız | ConverterPlugin kaydı AddDoconut() içinde gerçekleşti |
| Uygulama başlangıçta başarısız olur | Yüklenen lisans Converter yetkisini verir |
| Akış dönüşümü formatın desteklenmediğini söyler | sourceExtension baştaki noktayı içerir |
| Widget JavaScript'i yüklenir ancak istekler 404 döner | AddConverterWidget() çağrılmadı |
| Widget istekleri yanlış URL kullanıyor | basePath UseDoconut()'ın eşlendiği dal ile eşleşir |
| Hedef eksik | convert=open tarafından döndürülen allowedTargets kullanın; her kaynak her enum hedefini desteklemez |
| İndirme süresi doldu | convert=open/convert=run işlemlerini tekrarlayın; saklama tokenları 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çer | Temiz — watermarked: false |
| Aktif değerlendirme (demo/NFR) lisansı | Geçer | 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 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 kalır | Değerlendirme filigranı ile dönüştürür — watermarked: true |
Her iki çağrı yolu da bayrağı aynı kurala göre hesaplar: DocumentConverter C# arayüzü, lisansın IsViewerLicensed ve IsTemporary durumundan dahili olarak türetir ve widget'ın ?convert=run işleyicisi aynı kontrolü (IsViewerLicensed && !IsTrial && !IsTemporary) yaparak döndürdüğü watermarked alanını doldurur. Bir entegrasyon, satın almadan önce değerlendirme lisansı ile uçtan uca oluşturulup test edilebilir — yalnızca çıktı baytları değişir.
Bu sayfa yardımcı oldu mu?