function SaveAsPdfE(const FileName: string): Boolean; overload;
function SaveAsPdfE(const FileName: string; const Options: TPdfESaveOptions): Boolean; overload;
SaveAsPdfE 会先执行常规 SaveAs,然后在已保存字节之上叠加一个增量更新,把文件提升为 PDF/E-1 归档(ISO 24517-1:2008,源自 PDF 1.6 的工程文档格式)。该后处理会向保存流中注入 四类标记:
pdfe:ISO_PDFEVersion = "PDF/E-1")以及 pdfe 命名空间对应的 pdfaExtension:schemas 描述,并桥接从 ISO 19005-1 §6.7 通过 §13.1 继承来的 Dublin Core / xmp / pdf 属性(dc:title / dc:creator / dc:description / xmp:CreateDate / xmp:ModifyDate / xmp:MetadataDate / xmp:CreatorTool / pdf:Producer / pdf:Keywords)/ISO_PDFEVersion (PDF/E-1) 条目。Info 对象保留其原始对象号;PDFium 生成的 Info 条目会原样保留。若源 trailer 没有 /Info,则会合成一个新的 Info 字典,并在 trailer 中写入新的 /Info 引用/Metadata 引用指向新的 XMP 流/ID 数组(§6.2):如果源 PDF 已经携带 ID,则复用 FPDF_GetFileIdentifier 的结果,否则从源字节确定性派生输出在原始 PDF 结束之前会与基础 SaveAs 结果逐字节一致;只有增量更新会被追加到末尾。即使不理解 PDF/E 的旧版阅读器,也仍会像常规 SaveAs 一样渲染文件。两个重载的区别只在于配置的传入方式:仅文件名的形式使用 TPdfESaveOptions.Default,并从 FPDF_GetMetaText 和 FPDF_GetFileIdentifier 自动填充;而 TPdfESaveOptions 形式允许调用者覆盖 Title、Author、Subject、Keywords、Creator、Producer、CreationDate、ModDate、DocumentId、InstanceId 以及 Version 字符串(默认是 "PDF/E-1")
成功时返回 True。如果基础 SaveAs 失败,或者增量更新无法附加(通常是已保存字节中的 trailer 无效),则返回 False
http://www.aiim.org/pdfe/ns/id/ (AIIM 行业惯例,与 pdfa / pdfua URI 保持一致)。ISO 24517-1:2008 §13.3 的正文把这个 URI 少写了一个 "i",看起来像是排印错误。若验证器要求严格按规范拼写,可通过 TPdfESaveOptions.Version 覆盖
// 简单的 PDF/E-1 输出,选项由文档自动填充
if Pdf1.SaveAsPdfE('C:\Drawing.pdfe.pdf') then
ShowMessage('Saved PDF/E-1');
// 使用显式选项(覆盖 Title,自定义 Producer)
var
Opts: TPdfESaveOptions;
begin
Opts := TPdfESaveOptions.Default;
Opts.Title := 'Bridge Assembly Drawing - Sheet 12';
Opts.Producer := 'PDFiumPas';
Pdf1.SaveAsPdfE('C:\Bridge.pdfe.pdf', Opts);
end;