PDFiumPas 文档

SaveAsPdfA 方法

此 API 条目保留标识符、签名、代码块和 PDF 术语的原始形式。
组件: TPdf  ·  单元: PDFium
通过对基础 PDF 追加增量更新来保存当前文档,使其符合 PDF/A-1b。该更新会注入 XMP 元数据流、sRGB ICC OutputIntent 和更新后的文档目录

语法

function SaveAsPdfA(const FileName: string; Conformance: TPdfAConformance = pac1b): Boolean; overload;
function SaveAsPdfA(const FileName: string; const Options: TPdfASaveOptions): Boolean; overload;

说明

SaveAsPdfA 会先执行常规的 SaveAs,然后在已保存字节之上叠加一个增量更新, 将文件提升为 PDF/A 归档(默认是 PDF/A-1b;ISO 19005-1,含 Cor.1:2007) 该后处理会向保存流中注入四项内容:

输出在原始 PDF 结束之前会与基础 SaveAs 结果完全逐字节一致;只有增量更新会被追加到末尾 即使不理解 PDF/A 的旧版阅读器,也仍会像常规 SaveAs 一样渲染文件。两个重载的区别只在于 符合性 / 选项的传入方式 —— TPdfAConformance 形式是常见场景 (pac1b)的简写;TPdfASaveOptions 形式接收一个包含完整配置面的 记录,包括 Title、Author、Subject、Keywords、Creator、Producer、CreationDate、 ModDate、DocumentId 和 InstanceId 的可选覆盖值。留空的字段会从 FPDF_GetMetaText / FPDF_GetFileIdentifier 自动填充,因此一般调用者除了 Conformance 之外无需设置其他字段

Conformance 值决定目标标准和级别。PDF/A-1(ISO 19005-1)提供 pac1bpac1a;PDF/A-2(ISO 19005-2)和 PDF/A-3 (ISO 19005-3)分别增加 b、u、a 级,对应 pac2b / pac2u / pac2a 以及 pac3b / pac3u / pac3a 注入的 pdfaid:part(1、2 或 3)和 pdfaid:conformance (A、B 或 U)会遵循请求值,而 OutputIntent 保持 ISO 19005-2 为每个部分保留的 GTS_PDFA1 子类型。由于后处理器无法合成逻辑结构,当源文件缺少该级别所需的 Tagged PDF 结构时,Level A 请求(pac1a / pac2a / pac3a) 会自动降级为匹配的 Level B,因此保存后的文件不会伪称自己是 Level A

成功时返回 True。如果基础 SaveAs 失败、增量更新无法附加(PDF 太短、 trailer 无效),或者提供了 ICC 配置文件数据但验证失败,则返回 False

备注

示例

// 使用内置 sRGB 配置文件输出简单的 PDF/A-1b
if Pdf1.SaveAsPdfA('C:\Report.pdfa.pdf') then
  ShowMessage('Saved PDF/A-1b');

// 使用自定义 ICC 配置文件
var
  Opts: TPdfASaveOptions;
begin
  Opts := Default(TPdfASaveOptions);
  Opts.Conformance := pac1b;
  Opts.IccProfileData := TFile.ReadAllBytes('C:\Profiles\Coated.icc');
  Pdf1.SaveAsPdfA('C:\Report.cmyk.pdfa.pdf', Opts);
end;

另请参阅

SaveAsPdfAToStream, ValidatePdfA, PdfAConformance, SaveAs