先说结论
PDF 不是页面的照片。它是个箱子,页面只是货物里拿出来展示的那部分。页面四周,这个格式还留着好些位置:一块文档信息,一份同样内容的 XML 副本,批注,表单数据,附带的文件。还有,经由一种很常见的保存改动的方式,文档完完整整的旧版本,一层层压在当前这版下面。
这些都不是毛病。每一样都是为一件说得通的事设计的,在一个单位内部,多数无害,甚至有用。麻烦出在过境:PDF 离家的那一刻,发给对方当事人、发上邮件列表、进了公开卷宗,它记得的一切都跟着走,而它记得的东西,哪一页都不显示。人们核对的是文档说了什么,寄出去的是文件装了什么。这是两回事。
名牌:/Info 和 XMP 包
每份 PDF 都可以带一部文档信息字典:作者、标题、创建和修改日期、创建与生成它的程序名。多数文件还带着同一批事实的第二份、更厚实的副本,以内嵌 XML 的形式,名叫 XMP。两者都不随页面显示,两者都只隔着一个属性面板。
这些值是自动填上的,漏就漏在这儿。作者通常是装操作系统时用的账户名,一个真实的全名,出现在写的人自以为匿名的文档上:求职信、评审意见、投诉、报价。标题通常是 PDF 导出前那份文档的文件名,于是 草稿v7-法务顾虑.docx 就活在那份本该取代它的体面 PDF 里。生成器那一行标出软件的年头,日期拆穿官方说法。机构发布的 PDF 在这一块里都招了些什么,已经有人写出了整篇的研究。
没人要的还原:增量保存
箱子里最锋利的一件,恰是这个格式最得意的一件。PDF 允许增量更新:编辑器不必重写文件,可以把改动续在末尾,前面的一切原封不动。阅读器从文件尾部读起,显示最新的版本。旧版本还在,一个字节不差,就在同一个文件里。
追加式保存快,也抗崩溃。它同时意味着,这样编辑过的文档装着自己的履历。“删掉”的文字没有走,只是被盖过去了。找回它,把文件按最后一次追加之前的样子读一遍就行。在一个增量保存的编辑器里往名字上拉一个黑方块,得到的文件里那个名字有两份:一份在方块底下,一份在履历里。涂黑那一页讲过的败法,在这儿翻倍。
药方是彻底重写:打开文件,只留当前版本真正用到的东西,写一份没有过去的新文件。这里的 PDF 压缩工具从构造上就是这么做的。重写没法不丢下履历,而且这个工具会把丢下的过期材料记进它的体积明细。想知道你的文件到底有没有履历,看那份明细也是最省事的办法。
货舱:批注、表单、附件、图层
记性的其余部分平常得多,照样漏:
- 批注和注释:审阅时的你来我往,跟着被审阅的文档一路同行,谁想起来看一眼,谁就看得见。
- 表单字段把填过的值当数据存着,哪怕压平的页面早就不显示它们了。
- 附件:PDF 能整份嵌入任何类型的文件,阅读器把它们放在一个多数人从没打开过的侧栏里。图表背后的那张电子表格,有时就附在图表上一起出门。
- 可选内容图层可以装着被关掉而不是被删掉的页面内容:完完整整地存在,永永远远不显示。
每一样都是页面不给看的数据,装在一份人人只看页面的文件里。
把 PDF 不带记性地发出去
贯穿这一切的规律:什么能留下来,取决于文件是怎么写的。所以解法是让它过一遍写起来健忘的东西,在你自己的机器上。文档的履历,恰恰是最不该传到陌生人服务器上的那样东西,这层道理上传那一页讲了个透。这个站有三个写 PDF 的工具,三个都是冲着把记性关在门外造的:
- PDF 合并与拆分工具写出的文件压根没有信息字典:没有作者,没有日期,没有报软件名的那一行。它从你的原件里搬走的,是页面用得上的东西,不是它们的行李。有指南。
- PDF 压缩工具把文件从头到尾重写一遍:过期的履历丢下,XMP 包和应用程序的私货不留,删了什么列得清清楚楚。也有指南。
- PDF 涂抹工具,留给记性本身就是问题的场合:每跑一次,除了涂抹本身,还把信息块、XMP 包、书签、批注、表单值和附件一并洗掉。它的指南把这些都走了一遍。
验收的法子和泄漏的路子正好对称:审文件,别审页面。打开属性面板,读读还剩什么;在原始文件里搜一个删掉的词;看看压缩工具的明细,瞧瞧你的文档一直背着些什么。一份没有记性的 PDF,落到谁手里都无可招认。