BI/ID/EI インライン画像を再利用可能な画像 XObject に抽出し、各インラインブロックを /ImN Do 演算子に置き換えてドキュメントを書き換えますfunction SaveAsInlineImagesExternalised(Stream: TStream; const Options: TPdfInlineImageExternaliseOptions; out Report: TPdfInlineImageExternaliseReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsInlineImagesExternalised(const FileName: string; const Options: TPdfInlineImageExternaliseOptions; out Report: TPdfInlineImageExternaliseReport; AllowSignedDocument: Boolean = False): Boolean;
各ページコンテンツストリームをデコードし、インライン画像を走査します。すべての BI/ID/EI ブロックは新しい画像 XObject 間接オブジェクトに抽出されます
インライン画像辞書の略記(/W、/H、/BPC、/CS、/F、色空間とフィルタ値の略記)は完全な画像 XObject 名に展開されるため、抽出されたオブジェクトは標準準拠です
コンテンツストリーム内のインラインブロックは /ImN Do に置き換えられ、ページの /Resources /XObject 辞書は新しい参照で更新され、書き換えられたコンテンツストリームは Flate 圧縮されます
既存オブジェクトの番号と世代は安定したままです。新しい画像 XObject とコンテンツストリームが追加されます
TPdfInlineImageExternaliseOptions.SkipUnsafePages は、インライン画像境界を判別できないページを保存を中断せずに変更しないままにしますTPdfInlineImageExternaliseReport は外部化、スキップ、失敗の数と、作成された XObject 数を報告します/Resources や解決不能なコンテンツを持つページはスキップされますAllowSignedDocument が明示的に有効でない限り拒否されます。完全書き換えは既存の署名バイト範囲を無効化するためです
Options.SkipUnsafePages:= True;
Pdf.SaveAsInlineImagesExternalised('externalised.pdf', Options, Report);
WriteLn('externalised ', Report.ExternalisedCount, ' inline images');