property AttachmentCount: Integer; // read only
AttachmentCount 枚举通过目录
/Names /EmbeddedFiles 名称树可达的嵌入文件流(PDF 1.7 规范第 7.11 节)。这些是
任意文件(XML、电子表格、源 CAD、已签名 XML、ZIP 归档、…),
打包在 PDF 内部,并由查看器以 “Attachments”
侧栏形式暴露。PDF/A-3 特别要求每个相关源工件都以
这种方式嵌入,以便长期可重现
当 Active 为 False 时,以及当
文档没有携带嵌入文件时,值为 0。文件附件 注释
(子类型 /FileAttachment)不 在此处计数 —
那些是页面级注释,会通过 AnnotationCount
呈现。PDFium Delphi Component 通过
Attachment[Index] 将嵌入流暴露为 TBytes;人类可读的文件名和 MIME 风格类型可
通过 AttachmentName[Index] 和
AttachmentType[Index] 获取
典型循环是 for I := 0 to Pdf.AttachmentCount - 1 do。每次
Attachment[I] 访问都会将嵌入文件流解压到内存中,
因此如果需要将其写入磁盘并传给
解析器,请缓存 TBytes。添加或移除附件会使索引失效 — 变更后需重新读取
AttachmentCount
只有 /EmbeddedFiles 名称树会被枚举。PDF 2.0 关联文件(ISO 32000-2 §7.11.4)若仅由 /AF 数组引用 — 位于 catalog、页面、注释或任何其他对象上 — 且未同时注册到名称树,则不计入计数,Attachment、AttachmentName 或 AttachmentRelationship 也没有对应索引。这包括 SaveAsWithAssociateFiles 写出的文件,它只添加 /AF 条目。多数 PDF/A-3 生成器(包括 Factur-X 和 ZUGFeRD 工具)会把每个关联文件同时注册到两处,因此这些文件照常列出
FeatureSupported(feAttachment) 来检测
已安装的 PDFium 构建是否支持修改附件名称
var I: Integer;
var Data: TBytes;
for I := 0 to Pdf1.AttachmentCount - 1 do
begin
Data := Pdf1.Attachment[I];
TFile.WriteAllBytes(Pdf1.AttachmentName[I], Data);
end;