PDF 隐藏内容查找

裁切一页 PDF 什么都没删掉。它只是在同一份内容上画了一个更小的窗口,而每一个被你挤到窗口外面的字,依然留在文件里 —— 离全选、离一个排版工具、离改一下阅读器的显示设置,只有一步之遥。把一份文档拖到这里,看看收件人到底还能拿回什么。

🔒 你的文档不会离开浏览器。裁切是在内存里撤销、读取、再丢弃的 —— 什么都不上传,也不会有任何东西被写回你的文件。

🔍

把你正要发出去的 PDF 拖到这里

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

为什么一个文本提取器不会告诉你这些

正是这一点,让被裁掉的内容变得危险,而不只是有点粗心。当你在一个阅读器里打开一份裁切过的 PDF——或者拿一个文本提取器去处理它,包括 本站自己那个 ——库会把裁切框当成页面本身来汇报,只返回框内的文字。被裁掉的字不会被标记成「隐藏」,也不会以空字符串的形式返回。它们只是单纯地不存在,而输出看起来是完整的。

所以,发送文档前通常的检查方式——提取文字、读一遍、觉得没问题——根本找不到这一类泄漏。检查必须先把裁切撤销。这正是这一页做的事:每一页的裁切框在内存里被撑回完整的介质框,文档被重新读取一遍,而落在原来裁切框之外的文字被提取出来、以文字的形式摆给你看。

被裁进去的内容都是从哪来的

这几乎从来不是有人故意耍心机。它往往来自一份设计文件,内部的边注还留在粘贴板上;来自一份报告,敏感的那一列是被裁掉而不是删掉的;来自一份扫描合同,为了藏住签名栏而被裁边;来自一份报价单,上个季度的价格恰好落在页面边缘之外。每一种情况里,裁切的那个人在屏幕上看到了结果、看到内容消失了,也理所当然地认为它真的没了。

修法永远是同一个,而且不是一个可以调的设置项:删掉内容,或者导出一份拍平的副本,让裁切框之外的区域真正不复存在——然后再拿到这里重新检查一遍。

这个工具看不到什么

把话说清楚,因为一个「干净」的结果必须真的有意义。这个判定只覆盖文本层。裁切框外的图片与矢量图形能以完全相同的方式被复原,但这项检查看不到它们——要看见就得把每一页按完整介质尺寸渲染出来,那是另一个工具的事。一页被裁切、但没有文字类发现的,会照实报出来(REC-002 规则),而不是被当成「什么都没藏」。

默认关闭的图层会按名字列出来;层里画的内容不在这里提取,那需要按可选内容标记去切分内容流。增量保存的轮数只计数,不还原。而画在文字上的黑框完全是另一种失效——那属于 涂黑检查器的管辖范围,它看的是矩形底下,而这一页看的是页面边缘之外。

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

REC-001 裁切框外面还有文字,就在这里

裁切一页 PDF 什么都没删掉。它只是设置了一个 CropBox,阅读器只画框内的部分——框外的每一个字形都还留在文件里,一旦有人选中文字、把文件拖进排版工具,或者把阅读器切到显示 MediaBox,它就会冒出来。这正是这个工具存在的理由:把框外的字提出来给你看,因为一句「N 个隐藏对象」的计数,说明不了泄漏出去的东西到底要不要紧。

修复: 不要靠裁切来藏东西。删掉内容,或者导出一份拍平的副本,让被裁掉的区域真正不存在,再重新检查一遍。

来源: yaktool 工程规则,不是引自规范的条文:PDF 32000 定义了 CropBox、可选内容和增量更新;把它们各自当作「收件人仍能恢复出来的内容」,是我们的解读,工具也会说明哪些发现是判断,而不是格式本身的事实。

REC-002 这一页被裁切了,图片也可能延伸到框外

CropBox 比 MediaBox 小,意味着页面上每个对象的一部分都落在阅读器显示范围之外。框外没找到文字,但图片与矢量图形是用同一种非破坏性方式被裁切的,而这个工具只判定文本层——要看到像素得先把页面渲染出来。之所以要报出来,是为了不让「没有文字类发现」被误读成「什么都没藏」。

来源: yaktool 工程规则,不是引自规范的条文:PDF 32000 定义了 CropBox、可选内容和增量更新;把它们各自当作「收件人仍能恢复出来的内容」,是我们的解读,工具也会说明哪些发现是判断,而不是格式本身的事实。

REC-003 文件里有默认关闭的图层

可选内容组是 PDF 里图层的等价物,文档打开时关着的一层依然完整地存在——带图层面板的阅读器一键就能把它重新打开。它们通常是设计文件里遗留下来的:一个更早的价格、一条内部批注、一个后来决定不用的水印。这里列出图层的名字;层里画的内容不在这里提取,那需要按可选内容标记去切分内容流。

修复: 拍平这份文档,或者删掉你不打算发出去的那些图层。

来源: yaktool 工程规则,不是引自规范的条文:PDF 32000 定义了 CropBox、可选内容和增量更新;把它们各自当作「收件人仍能恢复出来的内容」,是我们的解读,工具也会说明哪些发现是判断,而不是格式本身的事实。

REC-004 文档属性里带着姓名、软件与文件路径

作者、公司、文档标题,有时候还有原始文件在某人机器上的完整路径,都装在元数据里,却不出现在任何一页上。这里展示的是具体的值而不是计数,因为一句「移除了 3 个元数据字段」说明不了其中一个恰好是客户的名字。制作者、创建者与时间戳会一并列出,但它们自己不会触发这条发现——每份 PDF 都带着这些,一条对每个文件都会亮的警告,不会有人看。

修复: 发送前清空文档属性,并重新检查一遍——有些工具每次保存都会把它们写回去。

来源: yaktool 工程规则,不是引自规范的条文:PDF 32000 定义了 CropBox、可选内容和增量更新;把它们各自当作「收件人仍能恢复出来的内容」,是我们的解读,工具也会说明哪些发现是判断,而不是格式本身的事实。

REC-005 文件保留着自己更早的版本

增量保存是把改动追加上去,之前的一切原样留在原地,所以一份被编辑、重新保存过好几次的文档,装着自己的完整历史。这个工具报出有几轮保存,不会把更早的文字还原出来,但任何一个带 PDF 解析器的人都能顺着历史往回翻。

修复: 保存一份全新的副本(用「另存为」,而不是「保存」),让文件不带历史地被重写一遍。

来源: yaktool 工程规则,不是引自规范的条文:PDF 32000 定义了 CropBox、可选内容和增量更新;把它们各自当作「收件人仍能恢复出来的内容」,是我们的解读,工具也会说明哪些发现是判断,而不是格式本身的事实。

REC-006 有文件正跟着这份文档一起走

附件搭着 PDF 的便车,却不出现在任何一页上。这经常正是它存在的意义——混合发票就是这样携带自己的 XML 的——但有时候只是有人拖进去以后忘掉的一张表格。

来源: yaktool 工程规则,不是引自规范的条文:PDF 32000 定义了 CropBox、可选内容和增量更新;把它们各自当作「收件人仍能恢复出来的内容」,是我们的解读,工具也会说明哪些发现是判断,而不是格式本身的事实。

阈值是公开的,不是藏起来的:一段文字的中心点落在裁切框外,就算它在框外;裁切框的任意一条边比介质框内缩超过 0.5pt,就算这一页被裁切过——留这个容差是因为很多生成器把裁切框写成介质框浮点回读的结果,会有极小的误差。

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