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');