ロード済み PDF から PDF/A-4 ラスターへの変換
HPDFArchivalConversion は、ロード済み THotPDF ドキュメントの可視ページコンテンツから、厳密なネイティブレンダリングと指定された sRGB ICC プロファイルを使って新しい PDF/A-4 ドキュメントを生成します
各出力ページは要求された DPI の可逆圧縮 RGB ラスター画像を 1 枚含み、元の可視寸法、crop、回転、UserUnit は出力ページのジオメトリに反映されます
元の埋め込みフォント、テキストオペレーター、ベクターパス、画像、OCR レイヤー、可視の注釈やウィジェット外観を残す必要がある場合は、別個の テキストとベクター保持プロファイルを使ってください。ラスタープロファイルはこれらの構造を保持しません
エントリポイント
function HPDFConvertLoadedToPDFA4Raster(Source: THotPDF;
Destination: TStream; const SRGBProfile: TBytes;
const Options: THPDFArchivalConversionOptions;
out Report: THPDFArchivalConversionReport): Boolean;
function HPDFConvertLoadedToPDFA4RasterFile(Source: THotPDF;
const TargetFileName: string; const SRGBProfile: TBytes;
const Options: THPDFArchivalConversionOptions;
out Report: THPDFArchivalConversionReport): Boolean;
ソースは先にロードし、呼び出し側が所有する入力ストリームはソースドキュメントを破棄するまで生存させ続けてください
通常のアーカイブ公開にはファイルエントリポイントを使います。このエントリポイントは、ターゲットディレクトリに排他的な一時ファイルを作成する前に既存ターゲットをソースエイリアスについて調べ、変換全体を検証し、ファイルをフラッシュし、MOVEFILE_REPLACE_EXISTING と MOVEFILE_WRITE_THROUGH を付けた MoveFileEx でターゲットを置き換えます
変換、レンダリング、検証、キャンセル、公開のいずれかが失敗しても、既存のターゲットファイルは保持され、一時出力は削除されます
ストリームエントリポイントは位置ゼロの空でシーク可能な出力先を要求し、IsLoadedSourceStreamAlias を通じて入力の既知のエイリアスを拒否します。完全なステージング出力がネイティブ検証を通過した後でのみバイトを公開します
出力先への書き込みに失敗すると、ベストエフォートで空ストリームへのリセットが試みられますが、任意のデバイスやカスタムストリームはそのリセットを拒否して部分的な書き込みを残すことがあります。ファイル公開のアトミック性が必須ならファイルエントリポイントを使ってください
オプションとリソース上限
| オプション | デフォルト | 意味 |
|---|---|---|
DPI | 150 | 要求される物理解像度。受け入れる範囲は 36 から 1200 |
MaxPages | 1000 | ロード済みソースページ数の上限 |
MaxPixelsPerPage | 40,000,000 | 1 ページあたりの最大ピクセル数と、個々のソース画像の最大ピクセル数 |
MaxTotalPixels | 500,000,000 | 出力ラスターの累積ピクセル数上限 |
MaxRasterBytes | 256 MiB | ページまたはソース画像のラスター割り当て上限。1 ピクセル 4 バイトで保守的にチェックされます |
MaxOutputBytes | 256 MiB | ステージング PDF サイズの上限。ストリーム割り当てと書き込みの前に強制されます |
MaxDecodedStreamBytes | 64 MiB | 各フィルターチェーン、各ページの結合コンテンツプレフライト、個々のネイティブストリーム読み取りコールバック、個々のエンコード済みソース画像ストリーム、ネイティブ出力バリデーターを制限します |
MaxTotalDecodedBytes | 256 MiB | 変換全体でのネイティブフィルターデコーダーの追加作業、ページ間の結合コンテンツプレフライト、ページ間の累積ネイティブストリーム読み取りコールバックを制限します |
MaxInputObjects | 200,000 | すでにロード済みの間接オブジェクト数の上限 |
CancellationToken | nil | 作業前、ネイティブレンダリングとデコード中、公開前にチェックされる借用トークンです |
Checkpoint | nil | 変換とネイティブリソースチェックポイントで sender nil 付きで呼ばれる借用の同期コールバックです。ソースドキュメントに再入してはいけません |
デコード上限はデコーダーの作業を数えるもので、プレフライト、ディスプレイリスト構築、レンダリングで同じフィルターストリームが再課金されることがあります。予算を引き上げるのは呼び出し側の明示的な判断です
ピクセルプレフライトは、要求された物理解像度と UserUnit スケーリング後のネイティブレンダラーの整数 DPI の両方を対象にします。極端に小さい単位は追加のラスターピクセルを要求することがあり、小数のページ寸法は画像を物理ページへマッピングし直す際にサブピクセルのリサンプリングを引き起こすことがあります
変換の上限はソースロードの後に適用されます。信頼できない入力を受け入れるときは、ローダー自身のリソース制限を設定してください
ソースオブジェクトグラフは保持されますが、読み取りキャッシュとデコード統計は生成されることがあります。レンダリング設定、キャンセルトークン、バックエンド、デコード予算の設定は成功時も失敗時も復元されます
コンバーターがこれらの設定を一時的に適用する間は、ソースドキュメントへの排他的アクセスを与えてください
レンダリングと色
すべてのページは、ネイティブフォールバック診断、破棄された診断、リソース不足の失敗なしにレンダリングできなければなりません。対応していないコンテンツは、不完全なページを公開する代わりに変換を拒否します
ICC 引数は、認識できる matrix/TRC 表現、標準の D50 順応原色、IEC sRGB 伝達関数で sRGB を記述しなければなりません。無関係な RGB プロファイル、CMYK プロファイル、不正なプロファイル、LUT ベースのプロファイルは拒否されます
出力は sRGB の OutputIntent と PDF/A-4 XMP メタデータを宣言します。ソースにすでに設定されているカスタムプルーフや出力用 ICC ワークフローは、その画像デコーダー設定を sRGB として安全に解釈し直せないため拒否されます
FPC ビルドは LittleCMS を備えたネイティブコーデックブリッジを要求し、そのカラーマネージメントバックエンドが欠けていると変換を拒否します
JPEG と JPX の画像ストリームは、エンコード済みインライン画像を含め、ネイティブのピクセルデコードの前に実際のコードストリーム寸法が調べられ、PDF 画像辞書と一致しなければなりません
JPEG は境界付きの 8 ビット baseline、extended sequential、progressive の各ヘッダーを受け入れます。JPX は境界付きの J2K SIZ ヘッダーと、コンポーネント数 4 以下、コンポーネント精度 16 ビット以下の通常長の JP2 ボックスを受け入れます
エンコード済みコーデックにはソースピクセルあたり 64 バイトの追加の保守的な作業予算があり、JPX タイルメタデータは MaxInputObjects と MaxRasterBytes 内のタイルあたり 1024 バイトの両方で制限されます。したがってデフォルトの 256 MiB ラスター予算ではエンコード済みソースピクセルは最大 4,194,304 であり、より大きな画像では呼び出し側が明示的に引き上げられます
JBIG2 変換は、内部のリージョンとシンボルの割り当てを利用可能なヘッダー API からは上限設定できないため拒否されます。非終端画像コーデック、拡張長 JP2 ボックス、未対応のラッパー、DecodeParms を運ぶラップされたコーデックストリームも拒否されます
CCITT fax パラメータは宣言された正の画像寸法を保持しなければなりません。辞書と異なる DecodeParms.Columns と Rows の上書きは、未知の Rows=0 を含め、ネイティブデコードの前に拒否されます
これらのチェックは、このコンバーターが受け入れる既知のヘッダーと割り当てプロファイルに上限を設けるもので、すべてのネイティブデコーダーに対する完全なプロセスメモリサンドボックスを保証するものではありません
情報と品質の損失
- ベクターコンテンツ、フォント、透明、ソースのカラースペースは RGB ページピクセルになります。DPI を上げると見た目の細部は向上しますが、メモリ使用量とファイルサイズが増えます
- 出力テキストは検索も選択もできず、テキストレイヤーや OCR 出力は合成されません
- 注釈、注釈外観、フォームフィールド、ウィジェット外観、可視署名外観は、ページラスターに焼き込まれる代わりに省かれます
- 電子署名、埋め込みファイル、スクリプト、アクション、ブックマーク、対話コントロールとしてのレイヤー、構造タグ、元のドキュメント識別情報は保持されません
- 結果はベクター編集可能性、元の署名の有効性、PDF/UA アクセシビリティ、ソースドキュメントのセマンティクスを保存しません
THPDFArchivalConversionReport は成功とキャンセルの状態、ソースとレンダリング済みのページ数、ラスターのピクセル数、出力バイト数、削除された注釈/フォーム/添付の数、失敗診断、ネイティブ検証の発見事項を提供します
FailureKind は afkNone、afkConversion、afkBudget、afkCancelled を区別します。型付きコンバーター予算の失敗ではさらに BudgetMetric、BudgetObserved、BudgetLimit が供給されます
チェックポイントの例外は変換を停止し、ネイティブの失敗結果を通じて報告されます。元のコールバック例外カテゴリを必要とするラッパーは、コンバーターが捕捉する前にそれを保持しなければなりません
archive.pdfa4.raster の JSON と C ABI オペレーションは情報損失への明示的な同意を要求し、ソースハンドルを保存し、検証済み PDF と損失レポートを渡し、保守的なジョブ予算上限を適用します
適合性の検証
コンバーターはステージング出力を再ロードし、公開前に基本の PDF/A-4 プロファイルによる ValidatePDFA4 を要求します。ネイティブバリデーターは文書化された有限のルールセットをカバーするもので、ISO 19005-4 の全要件の証明ではありません
独立した受け入れ検査では、veraPDF を --flavour 4 付きで使えます。非埋め込みテキスト、透明、RGB 画像、リンク、署名ウィジェット、添付を含む回帰フィクスチャは、失敗したルールやチェックなしで veraPDF 1.30.2 を通過しています
絞り込まれた非 GUI 回帰スイートは Tests/Delphi/Run-HotPDFArchivalTests.bat で実行します