夜雨聆风学习资料网

ARTICLE · 1180378

每一份 PDF,都要清数据

每一份 PDF,都要清数据

❝

pdf文件的元数据你得删掉,pdf一样会泄密。

❞

先做个小实验

随便找一份你以前导出的 PDF,右键 → 属性 → 详细信息,或者用阅读器打开按 Ctrl+D 看"文档属性"。

你很可能会看到:作者是你的 Windows 用户名,标题是文档早就改掉的旧名字,创建工具、创建时间精确到秒,全在里面。这些信息不在正文里,翻遍每一页也看不到,但谁拿到文件谁都能读。更麻烦的是,很多人以为"重新导出一份"就能去掉——大多数导出方式只会把旧信息原样继承过来。

它有个正式名字:元数据(Metadata)。

它藏在哪

PDF 里一切都是"对象",元数据也不例外,主要住在两个地方。

一是文档信息字典(/Info):作者、标题、主题、创建 / 修改时间、生成软件,全在这。这是最经典的泄露点。

二是 XMP 元数据流(/Metadata):Adobe 推的新一代元数据,本质是一段 XML。很多软件两边都写,XMP 里往往更详细。所以只清 /Info 不够。

网上的"一键去元数据",还是麻烦

上传到网站去元数据——文件先到了别人服务器上,本末倒置。装库敲命令行有效,但每次都要重敲,对同事门槛太高。打印成图片型 PDF,字没法搜了,文件还变大。Adobe 的检查文档好用,要订阅,步骤多。

我想要的是:选中文件,按一下,完事。全程本机,不上传。

方案:脚本

python或者ahk都能做,我是用quicker软件,让ai写了一段C#的脚本,不依赖其他软件和插件,调用powershell,避开quicker的16MB文件限制。

用法就三步:在资源管理器选中一个或多个 PDF(没选中会弹选择框),触发动作,同目录生成 xxx_clean.pdf,原文件不动,处理完弹个清单,长这样:

√ 合同.pdf(已清作者 / 标题 / 时间)— 手册.pdf(没发现元数据)× 扫描件.pdf(已加密,跳过)

只能涂白,不能删除。

PDF 的交叉引用表记的是字节偏移——第 5 号对象从第几个字节开始。把元数据那段删掉,文件短了几十个字节,后面所有偏移全错,文件直接打不开。替换成等长空格,长度一个字节不变,结构完好。

打个比方:把卷子上的名字擦掉,但每道题的位置和页码都不能动。擦的是内容,不是版面。

几个顺手处理掉的细节:XMP 没压缩就清空内容,压缩过的只删引用不清内容——强行涂白可能让严格的阅读器报"文档已损坏",保文件能打开优先,清单里会明确标注。加密的 PDF 直接跳过,改一个字节都可能校验失败。16MB 以上的大文件不读进内存,换流式扫描加打补丁。xxx_clean.pdf 被占用就自动顺延 xxx_clean1.pdf,不覆盖你的文件。

哪些保留

只清骨架里的元数据:,附件、注释、书签、表单域里的文字不在范围内。压缩 XMP 的原文还躺在文件里,只是没了入口。文件大小不会变,这是等长涂白换来的。极度敏感的文件,最稳的还是导出成图片型 PDF(一样要去元数据)。

隐藏信息麻烦的地方在于它看不见——看不见,就没人想到。这个动作就是把"看不见"变成"按一下,然后亲眼看到结果清单"。文件该怎么发还怎么发,只是发出去的那一刻,干干净净。

如果你也觉得有用,转发给那个总把 PDF 直接甩进群里的同事。

相关学习资料