レンダリング パイプライン
ドキュメントからページ画像へ
OpenDocumentAsync とブラウザに届く PNG の間には、2 つの明確な段階があります。ビューア解決(どのエンジンがドキュメントを読み込むか、オープンごとに一度決定)と ページ処理(DocImage.axd への各リクエストで各ページ画像に何が行われるか)。両方を理解すれば、フォーマットがどのように描画されるか、そして DefaultRender が実際に何を切り替えるかが分かります。
ステージ 1 — フォーマットビューアの解決
ファクトリはファイル拡張子をフォーマットカタログを通じてビューアにマッピングし、次の 3 段階の優先順位で決定します。
- カスタムビューアが最優先。
DoconutOptions.RegisterViewer(extension, factory, defaultConfig?)で登録したものは、すべての組み込みビューアよりも優先されます。 - 組み込みファミリービューア。 カタログは各閲覧可能拡張子をビューアファミリー(Word、Excel、PowerPoint、Pdf、Cad、Dgn、Image、Tiff、Psd、Email、Visio、Project、Xps、Epub、Txt、Html、Mht、Dcn)にマッピングし、各ファミリーに固有のエンジンアダプタがあります。同じ拡張子に対してライセンス済みプラグインがビューアを提供する場合、プラグインのビューアが組み込みビューアを置き換えます。
- プラグイン専用フォーマット。 ある拡張子は組み込みビューアがまったく存在せず、DICOM(
.dcm、.ima)は DICOM プラグイン経由でのみ利用可能です。必要な機能が無い状態で開くと次の例外がスローされます。
LicenseException: This document type requires the 'Dicom' plugin license.どのビューアも対応していない拡張子は FormatNotSupportedException を発生させます。
解決後、設定は確定します。明示的に渡した設定オブジェクトがあればそれが使用され、なければカタログから取得したフォーマットのデフォルト設定が使用されます。DocOptions.Password は保護されたドキュメント用に設定へコピーされます。
ステージ 1b — リダイレクトモード(DefaultRender = false)
多くのフォーマット固有設定は DefaultRender フラグを公開しています。これは 2 つの根本的に異なるパスを選択します。
DefaultRender = true— ドキュメントはネイティブに直接ページ画像へ描画されます。DefaultRender = false— ドキュメントはまず メモリ上で PDF に変換 され、元のエンジンは解放され、PDF ビューアが引き継ぎます。生成された PDF には実際のテキストが含まれるため、全文検索は正確なハイライトが可能です。リダイレクトされた PDF ではAllowSearchとAllowCopyが自動的に有効になります(変換はユーザーに見えません)。
デフォルトで XPS と MHT はリダイレクトパスを使用します。HTML や Microsoft Project などのフォーマットに対して PDF 投影を行うと、ネイティブ検索が可能になります。ただし、生成された PDF にテキストレイヤーが無い画像だけが含まれる場合、そのピクセルは検索できません。
検索可能でテキスト情報を保持した投影が必要なときは、リダイレクトモードを使用してください。その代償として、ドキュメントが開かれた瞬間に変換が行われます。
ステージ 2 — ページ画像パイプライン
DocImage.axd への各ページリクエストは次の固定シーケンスで処理されます。
raw page PNG → watermark → rotate/flip → scale → annotation burn → PNG to the response- ウォーターマーク — ライセンス状態(ライセンス未取得、期限切れの一時ライセンスまたはサブスクリプション、無効ドメイン、ライセンス対象外ビルド)と
DocOptions.Watermarkに設定された独自テキストに基づいて適用されます。カスタムウォーターマークが無いライセンス済みサイトはこのステップをスキップします。 - 回転/反転 — ユーザーがウィジェットで設定したページ単位の状態(90°/180°/270° の回転、水平・垂直反転)がセッションに保存され、以降の同ページ描画に適用されます。
- スケール — サムネイルやズームレベルは、描画されたページを要求サイズに合わせて拡大縮小することで生成されます。
- アノテーション焼き付け — 保存されたアノテーションがビットマップ上に描画されるため、エクスポートやページ画像にも表示されます。
- エンコーディング — 最終結果は PNG としてエンコードされ、直接レスポンスに書き込まれます。
ハンドラ内部でエラーが発生した場合は、PNG エラー画像(白背景に赤文字)としてステータス 200 で返されます。これによりウィジェットはページ領域内でエラーを表示できます。
ページキャッシュ
BaseConfig.CachePages(デフォルト true)は、ドキュメントセッションの存続期間中に描画済みページ画像をメモリに保持します。そのため、同じページを再訪問しても再描画は行われません。BaseConfig.ImageResolution(25–300 DPI、0 はフォーマットのデフォルト)は品質とメモリ使用量を制御する主要なダイヤルで、各フォーマットのデフォルトは フォーマット設定 に一覧化されています。
単一ノード環境では、セッションとキャッシュページはワーカープロセスのメモリに格納されます。アプリケーションプールのリサイクル(スケジュール実行、Web.config の編集、アイドルタイムアウトなど)によりすべてのオープンドキュメントセッションが破棄され、ウィジェットは Document session not found. Please re-open document. を表示します。分散モード(セッションとセキュリティ 参照)では、共有ストアからセッションが再構築されます。
調整すべきポイント
| 目的 | 調整項目 |
|---|---|
| ページをより鮮明に | フォーマット設定の ImageResolution |
| HTML、EPUB、email、MHT、MPP のテキスト検索精度を向上させる | フォーマット設定の DefaultRender = false |
| 大容量ドキュメントでのメモリ使用量を削減する | CachePages = false にし、セッションを明示的に閉じる |
| 各ページに独自のスタンプを付与する | DocOptions.Watermark |
このページは役に立ちましたか?