レンダリング パイプライン

ドキュメントからページ画像へ

OpenDocumentAsync とブラウザに届く PNG の間には、2 つの明確な段階があります。ビューア解決(どのエンジンがドキュメントを読み込むか、オープンごとに一度決定)と ページ処理(DocImage.axd への各リクエストで各ページ画像に何が行われるか)。両方を理解すれば、フォーマットがどのように描画されるか、そして DefaultRender が実際に何を切り替えるかが分かります。

ステージ 1 — フォーマットビューアの解決

ファクトリはファイル拡張子をフォーマットカタログを通じてビューアにマッピングし、次の 3 段階の優先順位で決定します。

  1. カスタムビューアが最優先。 DoconutOptions.RegisterViewer(extension, factory, defaultConfig?) で登録したものは、すべての組み込みビューアよりも優先されます。
  2. 組み込みファミリービューア。 カタログは各閲覧可能拡張子をビューアファミリー(Word、Excel、PowerPoint、Pdf、Cad、Dgn、Image、Tiff、Psd、Email、Visio、Project、Xps、Epub、Txt、Html、Mht、Dcn)にマッピングし、各ファミリーに固有のエンジンアダプタがあります。同じ拡張子に対してライセンス済みプラグインがビューアを提供する場合、プラグインのビューアが組み込みビューアを置き換えます。
  3. プラグイン専用フォーマット。 ある拡張子は組み込みビューアがまったく存在せず、DICOM(.dcm、.ima)は DICOM プラグイン経由でのみ利用可能です。必要な機能が無い状態で開くと次の例外がスローされます。
text
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 への各ページリクエストは次の固定シーケンスで処理されます。

text
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

このページは役に立ちましたか?