返回首页

PDF Info 与 XMP:文档元数据分别存在哪里

了解 PDF 如何在 Info 字典与目录 XMP 中存储元数据、为什么两处都要处理,以及文档属性清除不等于 PDF 安全净化。

最近更新: 2026-08-08

在本产品覆盖的范围内,PDF 文档元数据主要存在于两个位置:文件 trailer 引用的 Info 字典,以及文档 catalog 引用的 XMP 元数据流。PDF 阅读器可能优先读取其中一处、合并两处,也可能显示互相冲突的值。只清除一个位置,仍可能让姓名、软件版本或时间戳在另一个位置可见。

Info 字典

PDF trailer 可以包含一个 /Info 引用,指向由简单 PDF 字符串与日期组成的字典。常见条目包括:

  • Title、Author、Subject、Keywords: 描述文档的常规属性。
  • Creator: 创作源内容的应用,例如文字处理或排版软件。
  • Producer: 把源内容转换或渲染成 PDF 的组件,例如打印驱动或 PDF 库。
  • CreationDate 与 ModDate: 创建和修改时间。
  • 特定 Producer 写入的其他条目。

PDF 元数据查看器会读取该字典中受支持的条目,并与 catalog XMP 分开展示。

页数和 PDF 版本也可能出现在结果旁边。它们描述文档的结构和长度,不自动属于个人元数据。

Catalog XMP 元数据流

文档 catalog 还可以包含一个 /Metadata 引用,指向 XMP 流。XMP 以 XML 为基础,可以表达常见的标题、作者、rights、日期和软件属性,也可以通过其他命名空间记录 Info 字典没有对应项的工作流历史。

XMP 流是独立的 PDF 对象,而且可能经过压缩。只清除 Info 字典而保留 catalog 引用,可能让相同值继续出现在 XMP 中。反过来也一样。

重复与冲突值

PDF 软件通常会尝试同步 Info 和 XMP,但格式本身不能保证每次保存都让两处保持一致。一个文档先在某款应用中创建,再用另一款应用导出,最后由第三款应用编辑后,可能出现:

  • Info 中是一个 Author,XMP 中却保留另一组 creator 信息。
  • 一处保存旧时间戳,另一处保存新时间戳。
  • Info 中使用中性标题,XMP 中却留下项目名称。

不同阅读器处理这些冲突的方式并不相同。因此,可靠的验证报告必须同时检查两处,而不能把“文档属性”当成一张单一字段表。

Creator 与 Producer 的区别

这两个字段回答不同问题:

  • Creator 通常表示创作源内容的应用。
  • Producer 通常表示生成 PDF 字节的软件。

一份用文字处理工具撰写、再通过 PDF 库导出的文档,可能同时暴露两款软件。即使 Author 为空,这两个值仍可能透露软件栈或工作流。

PDF 元数据编辑器把 Creator 和 Producer 列为六个受支持字段中的两项。字段留空时,新 Info 字典会省略它,而不是暗中保留旧值。

日期可能同时存在于两处

Info 通常使用 CreationDateModDate,XMP 可能把它们映射为 xmp:CreateDatexmp:ModifyDate 或相关字段。时间戳可能暴露工作时间或时区信息。

PDF 移除器会移除 Info 与 catalog Metadata 引用。PDF 编辑器会移除旧日期及六个非空表单字段之外的其他旧 Info 条目,然后移除 catalog XMP,且不会新建 XMP 流。

本站的 PDF 元数据移除流程

PDF 元数据移除器每次处理一个不超过 25 MB 的 PDF。qpdf WebAssembly 在可复用的浏览器 Web Worker 中本地运行,流程如下:

  1. 检查 trailer Info 引用与 catalog Metadata 引用。
  2. 报告受支持的 Info 和 XMP findings、页数、PDF 版本与保守的数字签名 marker。
  3. 从工作对象图中移除 Info 与 catalog Metadata 引用。
  4. 由 qpdf 写出一个新的 PDF 副本。
  5. 重新扫描新副本的 Info 与 catalog XMP,并验证页数没有变化。

原文件不会被覆盖。加密或受密码保护的 PDF、畸形文件,以及需要结构恢复的 PDF 都会 fail closed。

这是一轮完整 qpdf 重写,不是增量元数据更新。ExifTool 的 PDF 说明指出,ExifTool 对 PDF 的写入采用增量更新,因此旧信息可能继续留在文件中并可被恢复。qpdf 重写会根据当前对象图构建新文件,但仍不能被描述成通用取证擦除。两个文档属性位置以外的内容不属于这项承诺。

本站的 PDF 元数据编辑流程

PDF 元数据编辑器会把旧 Info 记录替换为用户填写的非空值,只支持以下六项:

  • Title
  • Author
  • Subject
  • Keywords
  • Creator
  • Producer

它会移除旧日期、其他旧 Info 条目以及 catalog XMP,且不会新建 XMP。qpdf 写出新副本后,工具会精确回读六个受支持字段,检查 catalog XMP 不再被检出,并确认页数。

这是替换,不是原地补丁。字段留空意味着省略,而不是保留陈旧值。

独立验证

可以把输出文件重新放入PDF 元数据查看器,独立检查:

  • Info 中不再有旧值,或只包含编辑器有意写入的六个字段。
  • Catalog XMP 不再被检出。
  • 页数与原文件一致。
  • 已理解数字签名所受影响。

ExifTool 也可以作为独立的读取工具

exiftool -G1 -a -s cleaned-document.pdf

把结果与原文件对照,但要记住,不同读取工具会展示 PDF 结构的不同子集。

在原始 PDF 字节中搜索已知旧作者或项目名称,也可以作为一个测试信号,但它不是通用验证方法。PDF stream 可能经过压缩或编码,所以搜索不到明文不代表编码内容中一定不存在该字符串;搜索命中也可能只是可见页面文字或无关嵌入对象。原始字节搜索必须与结构复扫配合,不能单独作为完整清除证明。项目采用的可重复方法汇总在测试证据中。

数字签名

PDF 数字签名会覆盖特定文件字节和修订状态。重写文档会使现有签名失效。

浏览器工具只检测保守的签名结构。如果发现可能的签名,移除器和编辑器会在重写前要求明确同意。它们不会验证签名者、证书、信任链、撤销状态或签名有效性。这里的 marker 是风险提示,不是密码学结论。

如果签名具有实际意义,请保留原始签名文件,不要把重写副本当作带签名的证据。

文档属性清除不等于 PDF 安全净化

当前流程处理 Info 字典和 catalog 级 XMP,不声称检查或移除:

  • JavaScript、actions 或外部链接。
  • 附件和嵌入文件。
  • 表单字段和批注。
  • 隐藏文字、图层或涂黑与遮盖后可能残留的内容。
  • 嵌入图片、字体或其他内容内部的元数据。

如果威胁模型包含主动内容、隐藏文字、附件或取证恢复,应使用专门的 PDF sanitization 或 hardening 流程。当前功能刻意只覆盖更窄的文档属性范围。

分享前检查清单

  1. 检查原文件。 使用PDF 元数据查看器记录 Info、XMP 与签名发现。
  2. 选择清除或替换。 希望移除文档属性时使用移除器;只希望保留一组窄范围六字段 Info 时使用编辑器。
  3. 保留原文件。 新副本不会替换原文件。
  4. 阅读输出复扫。 根据流程核对 Info、catalog XMP、编辑器精确回读与页数。
  5. 敏感文档使用独立读取工具交叉检查。
  6. 尊重签名边界。 重写会使现有签名失效。
  7. 考虑 PDF 的其他内容。 附件、脚本、表单、批注、隐藏内容和嵌入文件元数据属于其他问题。
  8. 需要交付记录时使用安全分享报告。 报告不会包含文件名或元数据值。

同时处理 Info 和 XMP 可以避免常见的“只清了一半”,但不会把文档属性清除变成完整 PDF 安全净化。更多遵守能力边界的参考资料可在指南中心查看。