function SaveAsPdfR(const FileName: string): Boolean; overload;
function SaveAsPdfR(const FileName: string; const Options: TPdfRSaveOptions): Boolean; overload;
SaveAsPdfR 先执行常规的 SaveAs,然后在保存的 字节之上叠加一个增量更新,附加 PDF/R-1 文件格式标记。PDF/R-1(ISO 23504-1:2020)是 TWAIN 工作组 用于扫描文档工作流的严格 光栅图像传输子集;它每个页面携带一个固定大小 的光栅缓冲区,仅支持黑白 / 灰度 / RGB 图像 和 FlateDecode / CCITTFaxDecode / DCTDecode 压缩
后处理将五类字节注入保存的 流中:
%PDF-raster-1.0 版本标识注释,写在尾部字典和 startxref 关键字之间(ISO 23504-1 §5)。这是 PDF/R 独有的 — 其他 PDF/x 标准通过 XMP 和 Info 字典条目来标识自己输出在原始 PDF 结束之前与基础 SaveAs 结果字节完全一致;
只有增量更新被
追加(源目录 / Info 通过同对象编号重写替换为剥离
版本)。两个重载
仅在传入配置的方式上不同:仅文件名
形式使用 TPdfRSaveOptions.Default,
从 FPDF_GetMetaText / FPDF_GetFileIdentifier 自动填充四个 Info 字段和 DocumentId
成功时返回 True
[0 0 w h],仅允许 FlateDecode / CCITTFaxDecode(黑白)/ DCTDecode(8 位灰度或 RGB)过滤器,无对象流,每个间接引用必须具有零代编号,每个页面本质上是一张光栅图像。已经匹配此模式的 PDFium 生成文档(例如通过 PDFium 重新打包的扫描仪输出)工作良好;任意内容丰富 PDF 通常不行TPdfRSaveOptions.StripCatalogOptionalEntries 和 StripInfoOptionalEntries 默认为 True;如果希望注入器保留所有源条目,则设为 False(输出将不满足 §6.3 / §6.4.3,但仍附加版本标记和 XMP)%PDF-2.0 头和 AES 加密。PDFium 生成的 PDF 使用 1.x 头,因此没有进一步重新保存时,加密输出不是 PDF/R-1 候选
// 简单 PDF/R-1 输出;仅当源 PDF 已是
// 光栅扫描件(每页一张图像,仅允许的过滤器)时才有意义
if Pdf1.SaveAsPdfR('C:\Scan.pdfr.pdf') then
ShowMessage('Saved with PDF/R-1 markers');
// 验证以查看结构规则是否也满足
Pdf1.FileName := 'C:\Scan.pdfr.pdf';
Pdf1.Active := True;
if Pdf1.ValidatePdfR.IsCompliant then
ShowMessage('PDF/R-1 conformant');