您还应该了解 PDF 文档可以使用的(标准)功能:它称为增量更新。
如果文档已被增量更新,则可以通过保留原始数据(包括最后%%EOF
一行)并在其后面附加任何更改或添加的对象来创建它的新修改版本,并在新文件末尾添加附加xref
和trailer
部分加上附加决赛%%EOF
。
PDF 可能有多个增量更新。
这样,第一个%%EOF
可以出现在“文件的最后 1024 个字节”之前。
这种“增量更新”功能的优势(或劣势——取决于您的具体观点)是:您可以通过简单地删除倒数第二行之后的所有行来恢复 PDF 文件的先前版本%%EOF
(您可以继续该过程,直到您到达第一个文件版本)。
还有一个命令行工具叫做pdfresurrect
- 它可以报告已应用于 PDF 的增量更新的数量,
- 可以提取以前的版本,并且
- 它可以“展平”历史并创建一个仅包含最新版本的新 PDF。
这种“增量更新”功能是否在现实世界的 PDF 中被大量使用?
第一:只要对 PDF 应用了数字/电子签名,就会使用它。
第二:这是 Adobe Acrobat 保存 PDF 文件的标准方式,只要您单击Save
按钮即可。(如果您想避免增量更新文档,请改用!)当您删除完整页面后,简单的单击将不再增量更新文件并使用最新版本的 Acrobat 更新文件,但会生成全新 PDFSave as...
的少数例外情况之一(似乎太多的 Adobe 客户抱怨以前的版本,因为任何增量更新都会增加文件大小——太多人对删除页面给他们带来更大的 PDF 感到恼火,并且也没有真正删除这些页面)。Save
因此,请注意不经意间和意外发生的信息泄露,因为您不了解上述第二点中概述的 Acrobat 行为。
更新
我最近为 TROOPERS15 会议上的 PDF 研讨会(视频)创建了一个手工编码的 PDF 文件,可用于研究此功能的详细信息: