コンバータプラグイン
24 の対象フォーマットに文書を変換
ConverterプラグインはDoconutを文書変換サービスに変えます。
それは公開された DocumentConverter ファサードの背後にあるエンジンを提供し、オプトインで独自の HTTP 契約を持つドロップインウィジェットも提供するため、C# から、ウィジェットから、または自分で作成したフロントエンドから文書を変換できます。
パッケージをインストール
最新の安定版 Converter プラグインをインストールします:
dotnet add package Doconut.NET6.Converterプラグインを現在の 26.7.0 リリースに固定するには、バージョンを別途指定します:
dotnet add package Doconut.NET6.Converter --version 26.7.0Converter パッケージを Doconut.NET6 と同じバージョンに保ってください。パッケージ ID は Doconut.NET6.Converter です。.26.7.0 はダウンロードされた .nupkg のファイル名にのみ表示されます。
プラグインを登録
AddConverter() メソッドは存在しません — Doconut のプラグインモデルは統一されています。すべてのプラグインは、Converter も含めて、同じ方法で登録されます:AddDoconut() 内で AddPlugin<TPlugin>() を呼び出します。ConverterPlugin は独自の NuGet パッケージ Doconut.NET6.Converter として提供され、ベースビューアパッケージと共にインストールされます。
builder.Services.AddDoconut(options =>
{
options.LicensePath = "Doconut.Viewer.lic";
options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
});この呼び出しは、ライセンスが欠如している、レガシー
TRIALファイルがある、またはConverter機能を付与しない一時的でないライセンスがある場合に起動時に例外をスローします —AddDoconut()内部から発生したInvalidOperationExceptionです。アプリがリクエストを処理する前に発生します。テンポラリのデモ/NFR 登録は受け付けられますが、カレンダー上の有効期限が切れると、変換は透かし付き出力で利用可能なままです。サイレントな無料ティアはありません。ライセンスのロード方法については、ライセンス設定 を参照してください。
C# から変換
すべての変換は、位置が 0 に設定されたシーク可能な MemoryStream を返し、すぐに読み取りまたはコピーできる状態です。必要な場所で DI から DocumentConverter を解決してください — 設計上ステートレスなので、単一インスタンスをリクエスト間で安全に再利用できます。
// DocumentConverter を注入します。そのコンストラクタは internal なので、決して `new` しないでください。
Stream pdf = await converter.ConvertAsync("contract.docx", ConversionTarget.Pdf, ct: ct);// sourceExtension には先頭のドットが含まれます。ドキュメントが保護されていない限り、password は null です。
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);間違えやすい2つの詳細があります:ストリームオーバーロードの sourceExtension では先頭のドット(".xlsx"、"xlsx" ではなく)を含める必要があります — コンバータはそれをフォーマットカタログと照合し、ドットなしの拡張子では解決できません。また、名前に反して WordToHtmlAsync は Task<Stream> を返し、Task<string> ではありません — HTML ドキュメント(画像は Base64 埋め込み)をストリームとして取得し、他のすべての変換結果と同様です。
対象フォーマット
Pdf, Docx, Doc, Html, Xlsx, Pptx, Png, Jpeg, Csv, Tiff, Bmp, Gif, Svg, Xml,
Txt, Xls, Jp2, Rtf, Odt, Ods, Odp, Epub, Xps, Webpすべてのソースがすべてのターゲットに変換できるわけではありません — プラグインは各ソースのフォーマットファミリ(Word、Excel、PowerPoint、PDF、CAD、Image、Email、Diagram、Project/Task、PSD、Web ドキュメント)を独自の固定された許可対象セットにマッピングします。この enum を UI のターゲットリストとしてハードコードしないでください:?convert=open はアップロードされたファイルに対する実際の allowedTargets を返し、これがピッカーの駆動要素となります。
ドロップインウィジェット
ウィジェットの ?convert=open|run|download エンドポイントはオプトインで、デフォルトでは無効化されています — デフォルトで安全です。サーバー側でプラグイン登録とともに有効化してください:
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() がない場合、3 つの ?convert= エンドポイントは 404 と応答します — しかし、JS ファイル自体は引き続き配信されます(単なる埋め込み静的リソースです;通信するエンドポイントだけが制限されています)。AddConverterWidget() は Converter プラグインの登録と、Converter を付与するライセンスが必要です — それ自体では変換権限は付与されません。
ウィジェットのカスタマイズ
Doconut.convert(selector, options) に渡される初期オプション:
| オプション | 型 | デフォルト | 備考 |
|---|---|---|---|
basePath | string | /doconut | ?convert= エンドポイントのベースパスです。実際に UseDoconut() がマウントされている ASP.NET ブランチと一致する必要があります(通常は MiddlewarePath を通じて調整されます)。 |
resPath | string | /doconut-res | 他の Doconut ウィジェットとの設定一貫性のために受け入れられます;コンバータウィジェットは現在これから URL を構築しません。 |
maxUploadMb | number | 25 | クライアント側の事前チェックのみです — アップロード前にサイズオーバーのファイルを拒否します。サーバーは独立して独自の上限を強制し、超過した場合は 413 と応答します。 |
licenseUrl | string | null | null | 設定すると、結果画面の透かし通知をこの URL へのリンクに変換します。 |
labels | object | {} | ウィジェットの英語デフォルト文字列(ドロップテキスト、ボタン、aria-live アナウンス、エラーメッセージ)の任意のサブセットを上書きします。 |
コールバック:
| コールバック | 発火条件 | ペイロード |
|---|---|---|
onReady() | ウィジェットがアイドル/ドロップ画面を描画したとき | — |
onSourceLoaded({ token, pages, sourceExt, allowedTargets }) | ?convert=open が成功したとき | ソースセッショントークン、ページ数、ソース拡張子(先頭のドットなし)、許可されたターゲットリスト |
onConverted({ downloadToken, resultToken, resultPages, downloadName, watermarked, target }) | ?convert=run が成功したとき | run response と同じフィールドに加えて、要求された target |
onDownload({ downloadName, downloadToken }) | ユーザーがダウンロードリンクをクリックしたとき | ブラウザのネイティブダウンロードと同時に発火します — それをインターセプトしたり置き換えたりしません。 |
onError({ phase, message }) | オープンまたはラン要求が失敗したとき | phase は 'open' または 'run' です;message はサニタイズされたサーバーエラーです(またはアップロードサイズ事前チェックのクライアント側メッセージ)。 |
Doconut.convert() はウィジェットインスタンス自体を返します — プログラムからウィジェットを操作するために保持してください:
const conv = Doconut.convert('#doconut-convert', { basePath: '/doconut' });
conv.reset(); // アイドル/ドロップ画面に戻ります;onReady を再度発火しません
conv.loadFile(file); // File オブジェクトでフローを開始します;現在アイドル状態でない限り何もしません
conv.destroy(); // リスナーを削除し、マウントを空にします;この後インスタンスは使用できなくなります独自フロントエンドを構築する
ウィジェットはこの HTTP 契約のクライアントに過ぎません — 別の UX のために直接それに対して独自のフロントエンドを構築してください。3 つのルートはすべて UseDoconut() がマウントされている ASP.NET ブランチの下にあります(通常は /doconut)。
| ルート | 目的 | 成功レスポンス |
|---|---|---|
POST ?convert=open (multipart, field file) | プレビュー用にソースドキュメントをアップロードして開く | 200 — { token, pages, sourceExt, allowedTargets } |
POST ?token=<token>&convert=run&target=<ext> | 保管されたソースを target に変換する | 200 — { downloadToken, resultToken, resultPages, downloadName, watermarked } |
GET ?convert=download&token=<downloadToken> | 変換されたファイルをストリームする | 200 — file bytes, Content-Disposition: attachment, Cache-Control: no-store |
アップロードされたソースバイトはサーバー側で 30 分の TTL とともに保管されます;この期間が過ぎると、run は 404 と応答し、ファイルは再度開く必要があります。変換結果は同じ保管領域に保存され、変換完了時に downloadToken は新たな 30 分間のウィンドウを取得します — 一方、resultToken は通常のビューアセッショントークンで、ビューアのセッションキャッシュに従い、保管領域とは独立しています。
sourceExt は open レスポンス内では先頭にドットがありません(例: "docx") — これは DocumentConverter.ConvertAsync の sourceExtension パラメータがドットを必要とするのとは逆の規約です。
失敗モード(ルート別):
| ルート | ステータス | 条件 | 本文 |
|---|---|---|---|
| any | 404 | ウィジェットが有効化されていません(AddConverterWidget() が呼び出されていません) — 3 つのルートがディスパッチされる前にチェックされます | ステータスのみ |
| any | 405 | HTTP メソッドが間違っています(open/run は POST が必要です;download は GET が必要です) | ステータスのみ |
open | 413 | アップロードされたファイルが MaxUploadMb を超えています | { "error": "File is too large." } |
open | 400 | マルチパートボディがない、ファイルがない、または変換できないソース拡張子です | { "error": "..." } |
run | 400 | トークンが不正な形式(GUID ではない)、または target が ConversionTarget に解析できません | { "error": "Invalid token." } / { "error": "Unknown target format." } |
run | 400 | target がソースの allowedTargets にありません | { "error": "That target format is not available for this file." } |
run | 404 | 保管されたアップロードが期限切れ(30 分 TTL)またはトークンが開かれたことがありません | { "error": "Upload expired — please re-open the file." } |
open, run | 500 | 内部で処理に失敗しました | { "error": "<sanitized message>" } — 他のすべての Doconut エラーパスと同様にサニタイズされます;内部エンジン名は漏洩しません |
download | 400 | トークンが不正な形式(GUID ではない) | ステータスのみ |
download | 404 | 不明または期限切れのダウンロードトークン | ステータスのみ |
リソース所有権
コンバータは位置がゼロに設定されたシーク可能な MemoryStream を返します。呼び出し側がそのストリームを所有し、コピーまたは内容を返した後に破棄すべきです。DocumentConverter サービス自体はステートレスで、依存性注入から解決されます。サービスを手動で構築したり破棄したりしないでください。
Web ウィジェットの場合、アップロードとダウンロードのスタッシュはそれぞれ独立した 30 分の TTL を持ちます。ビューア resultToken は代わりにビューアセッションの有効期間に従います。ビューア結果を閉じても、まだ有効なダウンロードスタッシュは削除されず、ブラウザウィジェットをリセットしてもいずれの TTL も延長されません。
トラブルシューティング
| 症状 | チェック |
|---|---|
DocumentConverter の解決に失敗しました | ConverterPlugin の登録が AddDoconut() 内で行われました |
| アプリケーションが起動時に失敗します | ロードされたライセンスは Converter を付与します |
| ストリーム変換でフォーマットがサポートされていないと表示されます | sourceExtension には先頭のドットが含まれています |
| ウィジェットの JavaScript は読み込まれますが、リクエストは 404 を返します | AddConverterWidget() が呼び出されませんでした |
| ウィジェットのリクエストが間違った URL を使用しています | basePath は UseDoconut() がマッピングされているブランチと一致します |
| ターゲットが見つかりません | convert=open が返す allowedTargets を使用してください;すべてのソースがすべての enum ターゲットをサポートしているわけではありません |
| ダウンロードの有効期限が切れました | convert=open/convert=run を再試行してください;スタッシュトークンは意図的に一時的です |
ウォーターマーキング
ConverterPlugin が登録されている場合、ホストのライセンスは以下の 3 つの状態のいずれかになります:
| ライセンス状態 | スタートアップゲート | 変換出力 |
|---|---|---|
有効期間内に Converter を付与する有料ビューアライセンス | 合格 | クリーン — watermarked: false |
| アクティブな評価(デモ/NFR)ライセンス | 合格 | 評価ウォーターマークが付与された変換 — watermarked: true |
ライセンスなし、レガシー TRIAL ファイル、または Converter を付与しない非一時的ライセンス | アプリは起動せず、上記のスタートアップゲートが例外をスローします | — |
| 期限切れの一時/デモライセンス | 登録は期限切れ後も有効です | 評価ウォーターマーク付きで変換 — watermarked: true |
両方の呼び出しパスは同じルールからフラグを計算します:DocumentConverter の C# ファサードはライセンスの IsViewerLicensed と IsTemporary の状態から内部的に導出し、ウィジェットの ?convert=run ハンドラは同等のチェック(IsViewerLicensed && !IsTrial && !IsTemporary)を行い、返却する watermarked フィールドを埋めます。統合は購入前に評価ライセンスでエンドツーエンドに構築・テストでき、変更されるのは出力バイトだけです。
このページは役に立ちましたか?