Dönüştürücü Eklentisi
Belgeleri 45 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ı — kendi HTTP sözleşmesine sahip 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ı Converter eklentisini yükleyin:
dotnet add package Doconut.NETStandard.ConverterEklentiyi mevcut 26.8.0 sürümüne sabitlemek için, sürümü ayrı olarak geçirin:
dotnet add package Doconut.NETStandard.Converter --version 26.8.0Converter paketini Doconut.NETStandard ile aynı sürümde tutun. Paket kimliği Doconut.NETStandard.Converter; .26.8.0 yalnızca indirilen .nupkg dosya adında görünür.
Eklentiyi Kaydedin
AddConverter() yöntemi yoktur — Doconut'ın eklenti modeli tekdüzedir. Converter dahil her eklenti aynı şekilde kaydedilir: AddDoconut() içinde AddPlugin<TPlugin>() çağırın. ConverterPlugin kendi NuGet paketinde, Doconut.NETStandard.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 su işareti eklenmiş çıktı ile kullanılabilir olmaya devam eder. Sessiz bir ücretsiz katman yoktur. Lisansların nasıl yüklendiği için Lisans Kurulumu sayfasına 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 durum içermez, bu yüzden tek bir örnek istekler arasında güvenle yeniden kullanılabilir.
viewer.Converter.GetConverter() burada mevcut değildir. Dönüşüm artık görüntüleyici örneği üzerinden erişilmez: bunun yerine Doconut.DocumentConverter'ı enjekte edin.
// DocumentConverter'ı enjekte edin; yapıcı içtedir, bu yüzden asla `new` ile oluşturmayın.
Stream pdf = await converter.ConvertAsync("contract.docx", ConversionTarget.Pdf, ct: ct);// sourceExtension baştaki noktayı içerir. password, belge korunmuyorsa null olur.
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ğuna karşı eşleştirir ve yalnızca uzantı çözülmez. Ve adının aksine, WordToHtmlAsync Task<string> yerine Task<Stream> döndürür — HTML belgesini (gömülü Base64 resimler) bir akış olarak alırsınız, diğer tüm dönüşüm sonuçları gibi.
Hedef formatlar
ConversionTarget (namespace Doconut.Configs.Conversion) 45 üyeye sahiptir:
Pdf, Docx, Doc, Html, Xlsx, Pptx, Png, Jpeg, Csv, Tiff, Bmp, Gif, Svg, Xml,
Txt, Xls, Jp2, Rtf, Odt, Ods, Odp, Epub, Xps, Webp, Msg, Eml, Emlx, Mhtml,
Xlsm, Xlsb, Ppt, Docm, Dot, Dotx, Dotm, Vsdx, Vssx, Vstx, Vsdm, Vssm, Vstm,
Vdx, Vsx, Vtx, IcoBu tek enum, her kaynak ailesini kapsar. Önceki kütüphane, aile başına bir *ConfigConverter türüne sahipti — WordConfigConverter, ExcelConfigConverter vb. — her biri kendi iç içe EnTargetFormat enum'ına ve giriş için bir SourceFormatConverter enum'ına sahipti. Hepsi kaldırıldı; göç rehberine bakın.
Her 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 belgesi) kendi sabit izin verilen hedef kümesine eşler. Bu enum'ı UI'nızın hedef listesi olarak sabit kodlamayın: ?convert=open yeni yüklenen dosya için gerçek allowedTargets değerini döndürür ve bu değer bir seçim aracını yönlendirmelidir.
Yerleştirilebilir 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. 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ü basit bir statik kaynaktır; yalnızca iletişim kurduğu uç noktalar kısıtlanmıştır). AddConverterWidget() hâlâ Converter eklentisinin kaydedilmesini ve Converter izni veren bir lisansı gerektirir — tek başına dönüşüm hakları vermez.
Widget'ı özelleştir
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 monte edildiği ASP.NET dalı ile 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 bundan bir 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 | Ayarlanırsa, sonuç ekranındaki filigran bildirimini 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 aramalar:
| GeriArama | 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ı (başında nokta olmadan), 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 bağlantısına 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' değerindedir; message ise temizlenmiş sunucu hatasıdır (veya yük‑boyutu ön‑kontrolü için istemci tarafı mesajı) |
Doconut.convert() widget örneğini kendisi olarak 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 yüzünüzü 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 yüzünüzü oluşturun. Üç rota da UseDoconut()'ın monte edildiği ASP.NET dalı altında bulunur (genellikle /doconut):
| Rota | Amaç | Başarılı yanıt |
|---|---|---|
POST ?convert=open (multipart, alan file) | Kaynak belgeyi ön izleme için yükler ve 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 bulunur — dönüşüm tamamlandığında downloadToken kendi yeni 30 dakikalık süresini alır — resultToken ise saklamadan bağımsız olarak görüntüleyicinin oturum önbelleğine bağlı normal bir görüntüleyici oturum token'ıdır.
open yanıtındaki sourceExt başında nokta içermez (ör. "docx" ) — DocumentConverter.ConvertAsync üzerindeki sourceExtension parametresinin tersine, bu parametre bir nokta gerektirir.
Hata modları, rotaya göre gruplanmıştır:
| Rota | Durum | Ne zaman | Gövde |
|---|---|---|---|
| herhangi bir | 404 | Widget etkinleştirilmemiş (AddConverterWidget() hiç çağrılmamış) — üç rotadan herhangi biri işlenmeden önce kontrol edilir | yalnızca durum |
| herhangi bir | 405 | Yanlış HTTP fiili (open/run POST gerektirir; download GET gerektirir) | yalnızca durum |
open | 413 | Yüklenen dosya MaxUploadMb değerini aşıyor | { "error": "File is too large." } |
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 ConversionTarget'a ayrıştırılamayan bir target | { "error": "Invalid token." } / { "error": "Unknown target format." } |
run | 400 | target kaynak dosyanın allowedTargets listesinde yok | { "error": "That target format is not available for this file." } |
run | 404 | Saklanan yükleme süresi dolmuş (30 dakikalık TTL) veya token hiç açılmamış | { "error": "Upload expired — please re-open the file." } |
open, run | 500 | İşleme dahili olarak başarısız oldu | { "error": "<sanitized message>" } — her diğer Doconut hata yolunda olduğu gibi temizlenir; iç motor adları asla sızdırılmaz |
download | 400 | Geçersiz token (GUID değil) | yalnızca durum |
download | 404 | Bilinmeyen veya süresi dolmuş indirme token'ı | yalnızca durum |
Kaynak Sahipliği
Dönüştürücü, sıfır konumunda konumlandırılmış, aranabilir bir MemoryStream döndürür. Çağıran, bu akışı sahiplenir ve içeriğini kopyaladıktan veya döndürdükten sonra serbest bırakmalıdır. DocumentConverter hizmeti kendisi durumssızdır 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 bunun yerine görüntüleyici oturumu ömrünü 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 da hiçbir TTL'yi uzatmaz.
Sorun Giderme
| Belirti | Kontrol |
|---|---|
DocumentConverter çözümlemesi başarısız oluyor | ConverterPlugin kaydı AddDoconut() içinde gerçekleşti |
| 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 baştaki noktayı içeriyor |
| Widget JavaScript'i yükleniyor ancak istekler 404 döndürüyor | AddConverterWidget() çağrılmadı |
| Widget istekleri yanlış URL'yi kullanıyor | basePath, UseDoconut()'un eşlendiği dal ile eşleşiyor |
| 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şlemini 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ı |
|---|---|---|
Converter yetkisi veren ücretli görüntüleyici lisansı, 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ı ile damgalanır — 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 devam eder | Değerlendirme filigranı ile dönüştürür — watermarked: true |
Her iki çağrı yolu da bayrağı aynı kuraldan hesaplar: DocumentConverter C# arayüzü, lisansın IsViewerLicensed ve IsTemporary durumlarından dahili olarak türetir ve 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ı üzerinde uçtan uca oluşturulup test edilebilir — sadece çıktı baytları değişir.
Bu sayfa yardımcı oldu mu?