Plugin pro konverzi

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

Plugin Converter promění Doconut na službu pro převod dokumentů. Poskytuje motor za veřejnou fasádou DocumentConverter a — volitelně — vložitelný widget se svým vlastním HTTP kontraktem, takže můžete převádět dokumenty z C#, z widgetu nebo z frontendové aplikace, kterou si sami napíšete.

Instalace balíčku

Nainstalujte nejnovější stabilní verzi pluginu Converter:

bash
dotnet add package Doconut.NET8.Converter

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

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

Udržujte balíček Converter ve stejné verzi jako Doconut.NET8. Identifikátor balíčku je Doconut.NET8.Converter; .26.7.0 se objeví jen v název staženého souboru .nupkg.

Registrace pluginu

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 součástí vlastního NuGet balíčku Doconut.NET8.Converter, který se nainstaluje spolu se základním balíčkem vieweru.

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

Toto volání vyvolá výjimku při startu, pokud chybí licence, starý soubor TRIAL nebo ne‑dočasná licence, která nepřiděluje schopnost Converter — InvalidOperationException vyvolaná uvnitř AddDoconut(), ještě před tím, než aplikace začne obsluhovat požadavky. Dočasné Demo/NFR licence jsou akceptovány; po jejich kalendářním vypršení je převod nadále dostupný, ale s vodoznakem. Tichý bezplatný tarif neexistuje. Viz Nastavení licence pro způsob načítání licencí.

Převod z C#

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

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);

Dvě detaily, které se snadno přehlédnou: sourceExtension u přetížení pro stream musí obsahovat úvodní tečku (".xlsx", ne "xlsx" ) — konvertor ji porovnává s katalogem formátů a samotná přípona by se jinak nerozpoznala. A ačkoliv název napovídá, WordToHtmlAsync vrací Task<Stream>, nikoli Task<string> — získáte HTML dokument (obrázky vložené jako Base64) jako stream, stejně jako výsledek každého jiného 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 lze převést na každý cíl — plugin mapuje 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ů. Nepište tento enum přímo do UI jako pevný seznam: ?convert=open vrací skutečné allowedTargets pro právě nahraný soubor a právě to by mělo napájet výběrový seznam.

Vložitelný widget

Endpointy widgetu ?convert=open|run|download jsou volitelné a výchozí jsou zakázané — bezpečné z výchozího nastavení. Povolit je můžete na serveru při registraci 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() vrací tři endpointy ?convert= chybu 404 — ale samotný JS soubor je i tak servírován (je to prostý vložený statický zdroj; jen endpointy, ke kterým se odkazuje, jsou omezené). AddConverterWidget() stále vyžaduje, aby byl registrován plugin Converter a aby licence udělovala Converter — sama o sobě nepřiděluje práva k převodu.

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 endpointy ?convert=; musí odpovídat větvi ASP.NET, kde je UseDoconut() skutečně namontováno (obvykle koordinováno přes MiddlewarePath)
resPathstring/doconut-resPřijato pro konzistenci konfigurace s ostatními Doconut widgety; widget převodníku momentálně nevyužívá tuto cestu k sestavování URL
maxUploadMbnumber25Pouze klientská předkontrola — odmítne příliš velký soubor ještě před nahráním. Server vynutí vlastní limit nezávisle a vrátí 413, pokud je překročen
licenseUrlstring | nullnullPokud je nastaveno, změní vodotisk na výsledné obrazovce na odkaz na tuto URL
labelsobject{}Přepíše libovolnou podmnožinu výchozích anglických řetězců widgetu (texty drop‑oblasti, tlačítka, aria‑live oznámení, chybové zprávy)

Callbacky:

CallbackKdy se spustíNáklad
onReady()Widget dokončil renderování své nečinné/drop obrazovky
onSourceLoaded({ token, pages, sourceExt, allowedTargets })?convert=open uspějetoken relace zdroje, počet stran, přípona zdroje (bez úvodní tečky), seznam povolených cílů
onConverted({ downloadToken, resultToken, resultPages, downloadName, watermarked, target })?convert=run uspějestejné pole jako odpověď run, 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 — neinterceptuje ani nenahrazuje jej
onError({ phase, message })Požadavek open nebo run selžephase je 'open' nebo 'run'; message je očištěná chybová zpráva serveru (nebo klientská zpráva při předkontrole velikosti)

Doconut.convert() vrací samotnou instanci widgetu — uchovejte ji, pokud chcete widget ovládat programově:

javascript
const conv = Doconut.convert('#doconut-convert', { basePath: '/doconut' });
conv.reset();         // zpět na nečinnou/drop obrazovku; nevyvolá znovu onReady
conv.loadFile(file);  // spustí tok s objektem File; neudělá nic, pokud není v idle stavu
conv.destroy();       // odstraní posluchače, vyprázdní montáž; instance po tomto není použitelná

Vytvořte si vlastní frontend

Widget je jen klient pro tento HTTP kontrakt — postavte si vlastní frontend přímo proti němu pro odlišný UX. Všechny tři cesty leží pod ASP.NET větví, kde je UseDoconut() namontováno (obvykle /doconut):

CestaÚčelÚspěšná odpověď
POST ?convert=open (multipart, pole file)Nahrání a otevření zdrojového dokumentu k náhledu200 — { token, pages, sourceExt, allowedTargets }
POST ?token=<token>&convert=run&target=<ext>Převod uloženého zdroje na target200 — { downloadToken, resultToken, resultPages, downloadName, watermarked }
GET ?convert=download&token=<downloadToken>Streamování převedeného souboru200 — bajty souboru, Content-Disposition: attachment, Cache-Control: no-store

Nahrané bajty zdroje jsou uloženy na serveru s TTL 30 minut; po uplynutí tohoto okna vrátí run chybu 404 a soubor je třeba znovu otevřít. Převodní výsledek žije ve stejném úložišti — downloadToken získá vlastní čerstvé 30‑minutové okno po dokončení převodu — zatímco resultToken je obyčejný token relace vieweru, jehož životnost následuje cache relace vieweru, nezávisle na úložišti.

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

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

CestaStatusKdyTělo
libovolná404Widget není povolen (AddConverterWidget() nebylo nikdy zavoláno) — kontrola proběhne před jakýmkoli dispatchem tří cestpouze status
libovolná405Špatná HTTP metoda (open/run vyžadují POST; download vyžaduje GET)pouze status
open413Nahraný soubor překračuje MaxUploadMb{ "error": "File is too large." }
open400Chybí multipart tělo, soubor, nebo přípona zdroje, kterou nelze převést{ "error": "..." }
run400Špatně formátovaný token (ne GUID) nebo target, který se nedá převést 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 min) nebo token nikdy nebyl otevřen{ "error": "Upload expired — please re-open the file." }
open, run500Interní selhání zpracování{ "error": "<sanitized message>" } — očištěno stejným způsobem jako každá jiná cesta chyby Doconut; interní názvy enginu se nikdy nepropagují
download400Špatně formátovaný token (ne GUID)pouze status
download404Neznámý nebo vypršený token ke staženípouze status

Vlastnictví zdrojů

Konvertor vrací vyhledávatelný MemoryStream nastavený na nulu. Volající vlastní tento stream a měl by jej uvolnit po zkopírování nebo vrácení obsahu. Služba DocumentConverter je bezstavová a získává se z dependency injection; nesnažte se ji konstruovat ani ručně uvolňovat.

Pro webový widget mají úložiště nahrávání a stahování nezávislé TTL 30 minut. Token resultToken vieweru následuje životnost relace vieweru. Uzavření výsledku vieweru nesmaže stále platné úložiště ke stažení a resetování widgetu v prohlížeči neprodlouží žádný z TTL.

Řešení problémů

PříznakKontrola
Selhání získání DocumentConverterRegistrace ConverterPlugin proběhla uvnitř AddDoconut()
Aplikace selže při startuNačtená licence uděluje Converter
Streamový převod hlásí nepodporovaný formátsourceExtension obsahuje úvodní tečku
JavaScript widget se načte, ale požadavky vrací 404AddConverterWidget() nebylo zavoláno
Požadavky widgetu používají špatnou URLbasePath odpovídá větvi, kde je UseDoconut() namapováno
Chybí cílPoužijte allowedTargets vrácené 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 licenceBrána při startuVýstup převodu
Placená licence vieweru, která uděluje Converter, v platnostiProjdeČistý — watermarked: false
Aktivní evaluační (demo/NFR) licenceProjdeÚspěšný převod, opatřený evaluačním vodoznakem — watermarked: true
Nelicencováno, starý soubor TRIAL nebo ne‑dočasná licence, která neuděluje ConverterAplikace se nikdy nespustí — brána při startu vyvolá výše popsanou výjimku
Vypršená dočasná/demo licenceRegistrace přežije vypršeníPřevod s evaluačním vodoznakem — watermarked: true

Oba cesty výpočtu flagu používají stejný pravidlo: C# fasáda DocumentConverter interně odvozuje stav z licence (IsViewerLicensed a IsTemporary), a widgetův handler ?convert=run provádí ekvivalentní kontrolu (IsViewerLicensed && !IsTrial && !IsTemporary) pro naplnění pole watermarked. Integraci lze postavit a otestovat end‑to‑end na evaluační licenci před zakoupením — mění se jen výstupní bajty.

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