PDF 涂黑检查器

在文字上画一个黑框是排版,不是涂黑 —— 那些字还在文件里,离全选只有一步。一份涂黑过的文档发出去之前,把它拖到这里,看清楚一个文本提取器到底还能拿回什么。

🔒 你的文档不会离开浏览器。对一份需要涂黑、足够敏感的文件来说,本地检查不是个便利选项 —— 它是唯一可信的形态。

🕵️

把涂黑过的 PDF 拖到这里

一次一个 PDF · 什么都不上传

这个错误一直在反复上新闻

法庭文件、政府公开件、企业信息披露 —— 同一个模式反复出现:有人在敏感的部分画了矩形,文件发出去了,而某个读者按下了 Ctrl-A、Ctrl-C。这个工具专门找这个确切的失败:页面内容里的深色填充矩形,底下藏着可提取的文字,并且把复原出来的文字逐字展示 —— 因为一个计数很容易被无视,而自己的原话被摆在眼前就不是了。

涂黑漏洞藏身的地方,比页面本身多

无论页面上发生了什么,文档信息字典都会留着作者的名字。批注与便签携带着自己的文字。书签的名字指向它们所指的那部分内容。附件是完全独立的文件。而一份增量保存的 PDF 依然装着自己更早的版本 —— 当前版本里「删掉」的内容,可能在上一代里原封不动。这里的每一项都是一条独立的检查,各自有自己的规则编号。

这个工具能判定什么、不能判定什么

它判定的是文本层。扫描页是一张图片:没有文字可以复原,而扫描件上的一个方框是否真的盖住了底下的像素,是一个关于图像本身的问题,不是文件结构的问题 —— 这里会如实作为一条独立的发现说明,而不是悄悄放过。加密文件需要先解锁(同样是本地完成)。而如果检查发现了真问题,这个工具不会替你修 —— 用一个真正应用涂黑的软件重新处理,或者干脆删掉受影响的页面,再重新检查一遍。

本工具的全部检查项(共 8 条)

RED-001 深色矩形下面,文字其实还在

一个深色的填充矩形盖住了内容流里依然存在的文字。屏幕上看着像是涂黑了,但全选、复制,或者任何一个文本提取器,拿到的都是原文。这正是那种反复上新闻的错误。

修复: 用一个真正「应用」涂黑(删掉文字)的工具重新处理,再跑一遍这个检查。在文字上画一个框是排版,不是涂黑。

来源: yaktool 基于 PDF 32000 文件结构定的工程规则;阈值(「深色」= 灰度 ≤ 0.25,「盖住」= 覆盖单词框的 ≥ 60%)是我们对「看起来已涂黑」写明了的解读。

RED-002 涂黑已标记,但从未应用

文件里带着 /Redact 注释——这是涂黑工具在「应用」这一步之前先放上去的标记。底下的内容完好无损;这些标记甚至精确地告诉读者该看哪里。

修复: 在生成这些标记的那个工具里打开文件,跑一遍它的「应用涂黑」步骤,再重新检查。

来源: yaktool 基于 PDF 32000 文件结构定的工程规则;阈值(「深色」= 灰度 ≤ 0.25,「盖住」= 覆盖单词框的 ≥ 60%)是我们对「看起来已涂黑」写明了的解读。

RED-003 批注自己携带着文字

批注、便签与高亮标注把文字存在页面内容之外。涂黑页面碰不到它们——批注里的文字会跟着文件一起走。

修复: 发布前删除或拍平批注,再重新检查。

来源: yaktool 基于 PDF 32000 文件结构定的工程规则;阈值(「深色」= 灰度 ≤ 0.25,「盖住」= 覆盖单词框的 ≥ 60%)是我们对「看起来已涂黑」写明了的解读。

RED-004 文档元数据能在涂黑之后活下来

标题、作者、创建者与制作者这些字段存在文档信息字典里,不在任何一页上。一份元数据里带着作者姓名的文件,不管页面涂得多彻底,这个名字都会泄漏出去。

修复: 发布前清空文档属性(以及 XMP 元数据)。

来源: yaktool 基于 PDF 32000 文件结构定的工程规则;阈值(「深色」= 灰度 ≤ 0.25,「盖住」= 覆盖单词框的 ≥ 60%)是我们对「看起来已涂黑」写明了的解读。

RED-005 文件携带着自己的历史版本

出现不止一个 startxref 标记,意味着这份文件是增量保存的:它的对象的更早几代仍然留在里面。最新版本里「删掉」的内容,可能在更早的一代里完好无损。

修复: 用一次完整重写重新保存(大多数工具里的「另存为」,或者走一遍 qpdf / 打印成 PDF),这会丢掉历史记录。

来源: yaktool 基于 PDF 32000 文件结构定的工程规则;阈值(「深色」= 灰度 ≤ 0.25,「盖住」= 覆盖单词框的 ≥ 60%)是我们对「看起来已涂黑」写明了的解读。

RED-006 内嵌文件搭着便车

这份 PDF 携带着附件文件。它们是独立的文档——对页面做的任何处理都碰不到它们的内容。

修复: 除非附件是有意留在那里的,否则发布前先移除它们。

来源: yaktool 基于 PDF 32000 文件结构定的工程规则;阈值(「深色」= 灰度 ≤ 0.25,「盖住」= 覆盖单词框的 ≥ 60%)是我们对「看起来已涂黑」写明了的解读。

RED-007 书签标题在页面之外

大纲(书签)标题是文档级别的字符串。如果一个书签的名字正是你涂黑掉的那个东西,这个名字依然还在。

来源: yaktool 基于 PDF 32000 文件结构定的工程规则;阈值(「深色」= 灰度 ≤ 0.25,「盖住」= 覆盖单词框的 ≥ 60%)是我们对「看起来已涂黑」写明了的解读。

RED-008 扫描页:没什么可提取,也没什么可证明

没有文本层的页面是图片。这里没有文字可以复原——但这个工具只判定文本层,不判定像素:如果一张扫描件上的方框半透明或者放错了位置,方框底下的内容可能依然能被肉眼或 OCR 读出来。

来源: yaktool 基于 PDF 32000 文件结构定的工程规则;阈值(「深色」= 灰度 ≤ 0.25,「盖住」= 覆盖单词框的 ≥ 60%)是我们对「看起来已涂黑」写明了的解读。

阈值是公开的,不是藏起来的:灰度 ≤ 0.25 的矩形算「深色」,矩形覆盖住一个词的边界框 ≥ 60% 算「盖住」。几何形态解析不出来的填充路径会被计数并报出来,绝不悄悄跳过。

关于这些规则。 每一条都有编号、严重级别和通俗解释。每个来源链接都已登记在案,并对线上页面实际复验过,而不是凭印象写上去的. 规则如何编写、测试与保持更新 →