テキストとベクターを保持する読み込み済み PDF → PDF/A-4 変換
HPDFArchivalConversion は、可視フォント・カラースペース・レンダリングリソースがページコンテンツを置き換えずに PDF/A-4 を満たせる読み込み済みドキュメント向けの保存プロファイルを提供します
コンバーターは元のテキストオペレーター、ベクターパス、画像、ページジオメトリー、既存 OCR テキストレイヤーを保持し、可視の通常注釈 / ウィジェット外観をベクター Form XObject へフラット化し、対応可能なメタデータ / 構造問題を修復して、公開前にシリアライズ結果を検証します
このプロファイルはページをラスタライズしません。OCR が一時的な認識ビットマップをレンダリングして検索可能な不可視テキストを追記する場合を含め、RasterizedPages は 0 のままです
ランタイム受け入れは Delphi Win32 / Win64 をカバーします。Windows FPC は新規ソースから実装をコンパイルし、生成された公開ヘッダーは C++Builder Win32 / Win64x でコンパイルされます
エントリーポイント
function HPDFConvertLoadedToPDFA4Preserving(Source: THotPDF;
Destination: TStream; const SRGBProfile: TBytes;
const Options: THPDFArchivalPreservationOptions;
out Report: THPDFArchivalPreservationReport): Boolean;
function HPDFConvertLoadedToPDFA4PreservingFile(Source: THotPDF;
const TargetFileName: string; const SRGBProfile: TBytes;
const Options: THPDFArchivalPreservationOptions;
out Report: THPDFArchivalPreservationReport): Boolean;
ソースを先にロードし、呼び出し側所有の入力ストリームを生存させたまま、操作のあいだコンバーターにドキュメントを排他的に渡してください
Options := THPDFArchivalPreservationOptions.Default;
if not HPDFConvertLoadedToPDFA4PreservingFile(Source, TargetFileName,
SRGBProfile, Options, Report) then
raise Exception.Create(Report.Conversion.Diagnostic);
保存実証
コンバーターはグラフトランザクションのもとで現在の変更済みソースグラフをスナップショットし、シリアライズ後にソースをロールバックしてから、独立したロード済みクローン上ですべての変換作業を行います
元のデコード済みページコンテンツストリームは、出力再読み込み後もバイト等価で、元のページから元の順序で到達可能でなければなりません
ページリソースツリーと保持された通常外観リソースツリーは、オブジェクト / 再帰上限つきで走査されます。埋め込みフォントプログラム、ToUnicode マップ、画像、ICC プロファイル、ネストした Form XObject は元のエンコード済みペイロードを保持し、ストリーミング SHA-256 で検証され、出力ページからの継続到達可能性がチェックされます
独立したコンテンツストリームは元のページオペレーターをグラフィックス状態ガードで挟み、追記された外観オペレーターを保持します。元のコンテンツストリームを書き換えることになるネイティブ単一ストリーム追記パスは避けます
TextAndVectorContentPreserved は、ネイティブ出力検証と保存チェックが通った後にのみ true になります。変換やファイル公開が失敗するとクリアされます
外観の扱い
- 可視の通常
AP/N外観は、ネイティブ注釈フラット化により Form の BBox と Matrix から注釈 Rect へマッピングされ、自身のフォントとリソースを保持します - Invisible / Hidden / NoView フラグは、既存の通常外観があってもペイントを阻止します。Popup 注釈はペイントせずに除去されます
- 通常外観のないボーダーなしリンクは、明示的な幅 0 のボーダーが可視ボーダーなしと確定する場合にのみペイントせず除去されます
SynthesizeMissingAppearancesはデフォルト true で、ネイティブのマークアップ / フィールド外観生成を呼び出します。未対応サブタイプ、不正な矩形、生成失敗は変換を拒否します- 欠落したテキスト外観は、互換ネイティブフォントエンコーディングで ASCII 値に対応します。16 進・Unicode・マスクされたテキスト値には明示的な通常外観が必要です
- 合成されたテキスト外観は、空白正規化後の再読み込み済み検索可能テキストでソース値と照合されます。互換性のないフォントエンコーディングは公開を拒否します
既存の通常外観を渡す場合は、Unicode を含めその外観ですでに正しく表現されている任意の埋め込みフォントテキストに対応します。コンバーターはシステムフォントに置き換えずその外観を保持します
フラット化は注釈インタラクション、編集可能フィールド、計算、アクション、署名フィールドを除去しますが、可視外観は保持します。影響を受けた注釈と合成された外観ごとに、可能な場合はソースページ・注釈インデックス・オブジェクト番号つきの損失エントリーが生成されます
カラー、フォント、明示的な損失
必須の ICC 引数は、既存アーカイブバリデーターが受け付ける sRGB matrix/TRC プロファイルです。既存の出力プロファイルはすべて、渡されたプロファイルとデコード済みバイトが正確に一致しなければならず、さもなければ既存の出力条件の再解釈を避けるため変換が拒否されます
コンバーターは必要なときにのみ sRGB PDF/A 出力インテントを追加し、実際のシリアライザーを PDF 2.0 ヘッダーへ同期し、上限付きのベース PDF/A-4 メタデータ / 構造修復を呼び出します
欠落した可視フォントプログラムの埋め込み、元テキストの再エンコード、DeviceCMYK オペレーターの再着色、既存出力条件の置き換え、ページ透明性のビットマップ化は行いません。未解決のネイティブプレフライト指摘は公開を拒否します
暗号化ソースは変換前に復号が必要です。署名フィールドには明示的な AllowSignatureInvalidation が、既存の埋め込みファイルには明示的な RemoveEmbeddedFiles が要求されます。このプロファイルはベース PDF/A-4 を対象とするためです
Losses は署名無効化、埋め込みファイル除去、レガシー Info 辞書除去、禁止されたカタログ / プレゼンテーションメタデータ除去も報告します
既存 XMP は対応時に保持されます。メタデータを生成する場合は、対応するタイトル・著者・サブジェクト・キーワード情報が引き継がれますが、任意のレガシー Info フィールドの存続は保証されません
OCR と予算
AddOCRToImagePages はデフォルト false です。有効にすると、抽出可能なテキストを持たないページを認識し、元のコンテンツや既存 OCR レイヤーを置き換えずに不可視テキストを追記します
OCREngine にはアプリケーションエンジンを設定するか、nil のままにして内蔵の上限付き ASCII OCR エンジンを使います。その言語 / タイポグラフィカバレッジは 内蔵認識プロファイルのままです
OCROptions は認識解像度と単語予算を制御します。テキストありページのスキップ、既存 OCR レイヤーの保持、新規オプションコンテンツグループの省略はコンバーターが強制します
Limits はページ数、オブジェクト数、ステージング出力バイト、個別ストリーム作業、累積ストリーム作業、キャンセル、同期チェックポイントに THPDFArchivalConversionOptions.Default を使います。ラスタピクセル上限は OCR が認識ビットマップをレンダリングするときにのみ適用されます
追加のデフォルトは損失エントリー 1,024 件、抽出 / 期待テキストコード単位 1,048,576、ネイティブ検証パスごとのコンテンツトークン 4,000,000 です
リソースペイロードのハッシュ化はエンコード済みバイトを同じストリーム作業予算に数えます。ソース / 出力検証はどちらも累積作業を消費するため、リソース検証が固定 64 KiB のハッシュバッファーを使うとしても、大きなスキャンコレクションでは MaxTotalDecodedBytes の明示的な引き上げが必要になりえます
予算はソースロード後に適用され、コンバーター所有のスナップショットとステージング出力を別々に制限します。信頼できない入力を受け付ける場合はローダー上限を設定してください
公開と検証
ストリーム API は位置 0 の空のシーク可能な宛先を要求し、ソースエイリアスを拒否します。ステージングバイトは再読み込み、ネイティブ検証、保存チェック、キャンセルチェックの成功後にのみコピーされます
宛先書き込み失敗はベストエフォートのリセットを引き起こします。任意のカスタムストリームはそのリセットを拒否しうるため、アトミックなファイル公開にはファイルエントリーポイントを使ってください
ファイル API はソースエイリアスを検出し、ターゲットの隣に排他的な一時ファイルを作成し、フラッシュし、すべてのチェック通過後にのみ MoveFileEx でターゲットを置き換えます。それより前の失敗は既存ターゲットを保持し一時ファイルを削除します
InitialValidationIssues、Repair、Conversion.ValidationIssues、OCR 詳細、ストリーム数、抽出テキスト数、明示的な損失は検査用に残ります
ネイティブ検証は対応する HotPDF PDF/A-4 ルールをカバーするものであり、任意の PDF への包括的認証ではありません。リグレッション受け入れはさらに、独立した pypdf / MuPDF チェックと、生成された外観 / ネイティブ OCR 成果物に対する veraPDF PDF/A-4 検証を使います
実コーパスのリグレッションには、埋め込みフォントの Word / ライブラリーガイドと 380 ページの中国語スキャンコレクションが含まれ、フォント未埋め込みかつ DeviceCMYK コンテンツのトレードレポートは明示的な拒否ケースです
リグレッションコマンド
powershell -File Tests/Delphi/Run-ArchivalPreservationTests.ps1 -Platform Win32
powershell -File Tests/Delphi/Run-ArchivalPreservationTests.ps1 -Platform Win64
python Tests/Delphi/Fixtures/ArchivalPreservation/verify_preserving_output.py
verapdf --format xml --flavour 4 Tests/Delphi/generated/ArchivalPreservation/appearance.pdf Tests/Delphi/generated/ArchivalPreservation/ocr.pdf Tests/Delphi/generated/ArchivalPreservation/native-appearance.pdf
Delphi ランナーはビュアー起動を抑止し、保存と既存ラスタの両リグレッションフィクスチャーを含みます。独立した veraPDF 受け入れは実際の PDF/A-4 検証プロファイルを使います
関連トピック
ラスターアーカイブ変換は、ネイティブレンダリング対応時に元テキスト / ベクターを明示的に失う別のプロファイルを提供します