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