Plugin pro převod

Převádějte dokumenty do 24 cílových formátů

Plugin Converter promění Doconut na službu pro převod dokumentů. Přispívá k enginu stojícímu za veřejnou DocumentConverter fasádou a — po opt-in — poskytuje vložitelný widget s vlastním HTTP kontraktem, takže můžete převádět dokumenty z C#, z widgetu nebo z frontendu, který si vytvoříte.

Nainstalujte balíček

Nainstalujte nejnovější stabilní plugin Converter:

bash
dotnet add package Doconut.NET6.Converter

Pro připnutí pluginu k aktuálnímu vydání 26.7.0 předávejte verzi samostatně:

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

Udržujte balíček Converter ve stejné verzi jako Doconut.NET6. ID balíčku je Doconut.NET6.Converter; .26.7.0 se objevuje pouze v názvu staženého souboru .nupkg.

Zaregistrujte plugin

Neexistuje metoda AddConverter() — model pluginů Doconut je jednotný. Každý plugin, včetně Converter, se registruje stejným způsobem: zavolejte AddPlugin<TPlugin>() uvnitř AddDoconut(). ConverterPlugin je dodáván ve svém vlastním NuGet balíčku, Doconut.NET6.Converter, nainstalovaném vedle základního balíčku vieweru.

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

Toto volání vyhodí výjimku při startu při chybějící licenci, starém souboru TRIAL nebo ne‑dočasné licenci, která nepřiděluje schopnost Converter — InvalidOperationException vyvolaná uvnitř AddDoconut(), předtím než aplikace začne obsluhovat požadavky. Dočasné registrace Demo/NFR jsou akceptovány; po jejich kalendářním vypršení zůstává převod dostupný s vodoznakovým výstupem. Tichý bezplatný tarif neexistuje. Viz License Setup pro způsob načítání licencí.

Převod z C#

Každý převod vrací vyhledávatelný MemoryStream nastavený na 0, připravený okamžitě číst nebo kopírovat. Získejte DocumentConverter z DI kdekoliv jej potřebujete — je navržen jako bezstavový, takže jedna instance je bezpečná pro opakované použití napříč požadavky.

csharp
// Injektujte DocumentConverter; jeho konstruktor je interní, takže jej nikdy `new` nevolejte.
Stream pdf = await converter.ConvertAsync("contract.docx", ConversionTarget.Pdf, ct: ct);
csharp
// sourceExtension obsahuje úvodní tečku. password je null, pokud není dokument chráněn.
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);

Dvě detaily, které se snadno špatně pochopí: sourceExtension u přetížení streamu musí obsahovat úvodní tečku (".xlsx", ne "xlsx") — převodník ji porovnává s katalogem formátů a samotná přípona se nevyřeší. A navzdory svému názvu, WordToHtmlAsync vrací Task<Stream>, ne Task<string> — získáte HTML dokument (obrázky vložené jako Base64) jako stream, stejně jako každý jiný výsledek převodu.

Cílové formáty

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

Ne každý zdroj se převádí na každý cíl — plugin mapuje každou rodinu formátů zdroje (Word, Excel, PowerPoint, PDF, CAD, Image, Email, Diagram, Project/Task, PSD, webový dokument) na vlastní pevně danou sadu povolených cílů. Není vhodné tuto výčtovou hodnotu zakódovat jako seznam cílů ve vašem UI: ?convert=open vrací skutečný allowedTargets pro jakýkoli právě nahraný soubor, a to by mělo řídit výběr.

Widget typu Drop‑in

Widgetova ?convert=open|run|download koncová místa jsou volitelná a jsou ve výchozím nastavení zakázaná — zabezpečené z výchozího nastavení. Povolit je na straně serveru spolu s registrací pluginu:

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>

Bez AddConverterWidget() odpovídají tři koncová místa ?convert= s 404 — ale soubor JS je i tak stále poskytován (jedná se o prostý vložený statický zdroj; pouze koncová místa, ke kterým se připojuje, jsou omezená). AddConverterWidget() stále vyžaduje, aby byl registrován plugin Converter a licence, která poskytuje Converter — neposkytuje samotná práva ke konverzi.

Přizpůsobení widgetu

Inicializační možnosti předávané do Doconut.convert(selector, options):

MožnostTypVýchozíPoznámky
basePathstring/doconutZákladní cesta pro koncové body ?convert=; musí odpovídat větvi ASP.NET, kde je UseDoconut() skutečně nasazeno (obvykle koordinováno přes MiddlewarePath)
resPathstring/doconut-resPřijato pro konzistenci konfigurace s ostatními widgety Doconut; widget konvertoru v současnosti z něj nevytváří žádnou URL
maxUploadMbnumber25Pouze předběžná kontrola na klientovi — odmítne příliš velký soubor před nahráním. Server vynutí svůj vlastní limit nezávisle a odpoví 413, pokud je překročen
licenseUrlstring | nullnullKdyž je nastaveno, změní upozornění vodoznaku na výsledkové obrazovce na odkaz na tuto URL
labelsobject{}Přepíše libovolnou podmnožinu výchozích anglických řetězců widgetu (text pro přetažení, tlačítka, oznámení aria-live, chybové zprávy)

Zpětné volání:

CallbackKdy se spustíData
onReady()Widget vykreslil svou nečinnou/drag‑and‑drop obrazovku—
onSourceLoaded({ token, pages, sourceExt, allowedTargets })Úspěšné dokončení ?convert=opentoken relace zdroje, počet stránek, přípona zdroje (bez úvodní tečky), seznam povolených cílů
onConverted({ downloadToken, resultToken, resultPages, downloadName, watermarked, target })Úspěšné dokončení ?convert=runstejné pole jako odpověď běhu, plus požadovaný target
onDownload({ downloadName, downloadToken })Uživatel klikne na odkaz Stáhnoutspustí se spolu s nativním stahováním prohlížeče — nezasahuje ani nenahrazuje jej
onError({ phase, message })Požadavek na otevření nebo spuštění selžephase je 'open' nebo 'run'; message je očištěná chyba serveru (nebo zpráva na straně klienta pro předběžnou kontrolu velikosti nahrávání)

Doconut.convert() vrací samotnou instanci widgetu — uchovejte si ji pro programové ovládání widgetu:

javascript
const conv = Doconut.convert('#doconut-convert', { basePath: '/doconut' });
conv.reset();         // zpět na obrazovku idle/drop; nespouští znovu onReady
conv.loadFile(file);  // spustí tok s objektem File; no-op pokud není aktuálně idle
conv.destroy();       // odstraní posluchače, vyprázdní mount; instance po tomto není použitelná

Vytvořte si vlastní frontend

Widget je jen klient pro tuto HTTP smlouvu — vytvořte si vlastní frontend přímo proti ní pro odlišnou uživatelskou zkušenost. Všechny tři cesty jsou pod větví ASP.NET, kde je nasazeno UseDoconut() (obvykle /doconut):

CestaÚčelÚspěšná odpověď
POST ?convert=open (multipart, field file)Nahrát a otevřít zdrojový dokument pro náhled200 — { token, pages, sourceExt, allowedTargets }
POST ?token=<token>&convert=run&target=<ext>Převést uložený zdroj na target200 — { downloadToken, resultToken, resultPages, downloadName, watermarked }
GET ?convert=download&token=<downloadToken>Streamovat převedený soubor200 — bajty souboru, Content-Disposition: attachment, Cache-Control: no-store

Nahrané bajty zdroje jsou uloženy na serveru s TTL 30 minut; po uplynutí tohoto intervalu run odpovídá 404 a soubor je nutné znovu otevřít. Převod výsledku žije ve stejném úložišti — downloadToken získá své vlastní čerstvé 30‑minutové okno po dokončení konverze — zatímco resultToken je běžný token relace prohlížeče, jehož životnost následuje cache relace prohlížeče, nezávisle na úložišti.

sourceExt v odpovědi open nemá úvodní tečku (např. "docx") — opačná konvence oproti parametru sourceExtension na DocumentConverter.ConvertAsync, který tečku vyžaduje.

Režimy selhání, seskupené podle cesty:

CestaStavKdyTělo
libovolná404Widget není povolen (AddConverterWidget() nebylo nikdy zavoláno) — kontrolováno před odesláním jakékoli ze tří cestpouze stav
libovolná405Špatná HTTP metoda (open/run vyžadují POST; download vyžaduje GET)pouze stav
open413Nahraný soubor překračuje MaxUploadMb{ "error": "File is too large." }
open400Žádné multipart tělo, žádný soubor, nebo přípona zdroje, kterou nelze převést{ "error": "..." }
run400Poškozený token (není GUID), nebo target, který se nedá parsovat na ConversionTarget{ "error": "Invalid token." } / { "error": "Unknown target format." }
run400target není v allowedTargets zdroje{ "error": "That target format is not available for this file." }
run404Uložené nahrání vypršelo (TTL 30 minut) nebo token nebyl nikdy otevřen{ "error": "Upload expired — please re-open the file." }
open, run500Zpracování selhalo interně{ "error": "<sanitized message>" } — očištěno stejným způsobem jako každá jiná chybová cesta Doconut; nikdy neprozrazuje interní názvy enginu
download400Poškozený token (není GUID)pouze stav
download404Neznámý nebo vypršený token pro staženípouze stav

Vlastnictví zdroje

Převodník vrací seekovatelný MemoryStream umístěný na nulu. Volající vlastní tento stream a měl by jej po kopírování nebo vrácení jeho obsahu uvolnit. Služba DocumentConverter je sama o sobě bezstavová a je získávána z injekce závislostí; nevyvíjejte ani neuvolňujte službu ručně.

Pro webový widget mají nahrávací a stahovací úložiště nezávislé TTL 30 minut. Viewer resultToken místo toho sleduje životnost relace vieweru. Uzavření výsledku vieweru neodstraní stále platné stahovací úložiště a resetování widgetu v prohlížeči neprodlouží žádné z TTL.

Odstraňování potíží

PříznakKontrola
Řešení DocumentConverter selžeConverterPlugin registrace se stala uvnitř AddDoconut()
Aplikace selže během spouštěníNačtená licence poskytuje Converter
Převod proudu uvádí, že formát není podporovánsourceExtension obsahuje úvodní tečku
JavaScript widgetu se načte, ale požadavky vrací 404AddConverterWidget() nebyl zavolán
Požadavky widgetu používají špatnou URLbasePath odpovídá větvi, kde je UseDoconut() namapováno
Cíl chybíPoužijte allowedTargets vrácené z convert=open; ne každý zdroj podporuje každý enum cíl
Stahování vypršeloOpakujte convert=open/convert=run; tokeny úložiště jsou úmyslně dočasné

Vodoznakování

S registrovaným ConverterPlugin je licence hostitele v jednom ze tří stavů:

Stav licenceSpouštěcí bránaVýstup převodu
Placená licence vieweru poskytující Converter, během její platnostiProcházíČistý — watermarked: false
Aktivní evaluační (demo/NFR) licenceProcházíÚspěšně převádí, opatřeno evaluačním vodoznakem — watermarked: true
Bez licence, starý soubor TRIAL, nebo ne‑dočasná licence, která neposkytuje ConverterAplikace se nikdy nespustí — výše popsaná spouštěcí brána vyhodí výjimku—
Vypršená dočasná/demo licenceRegistrace přežije vypršeníPřevádí s evaluačním vodoznakem — watermarked: true

Obě volací cesty vypočítávají příznak podle stejného pravidla: facade DocumentConverter v C# jej interně odvozuje z IsViewerLicensed a IsTemporary stavu licence, a handler widgetu ?convert=run provádí ekvivalentní kontrolu (IsViewerLicensed && !IsTrial && !IsTemporary) pro vyplnění pole watermarked, které vrací. Integraci lze postavit a otestovat end-to-end na evaluační licenci před nákupem — mění se jen výstupní bajty.

Byla tato stránka užitečná?