PDF 里面有什么:对象、流与交叉引用表
PDF 是一份由编号对象、压缩流与字节偏移 xref 组成的小数据库。Get Info 只做只读检查,文件地图坏掉时由 Repair 重建结构。

PDF 不是把页面平铺出来的转储文件,而是一份由对象构成的小型数据库:多数内容存成压缩流,再由交叉引用表(xref)标出位置,阅读器才能直接跳到 17 号对象,不必从头扫到尾。这张地图一坏,查看器就说文件损坏,哪怕页面字节还好端端躺在磁盘上。
对象
页面、字体、图像、元数据、文档目录,凡是值得关心的东西都是带编号的对象。页面指向内容流与资源,资源指向字体与 XObject,目录指向页树。合并、旋转、盖章这类工具做的事,大多是重写这张关系图,而不是重绘像素。
流
流是一种载荷为字节序列的对象,通常经 Flate 压缩,装的是页面内容运算符、嵌入字体文件或图像数据。所以用文本编辑器打开 PDF,会看到 ASCII 记号与二进制块混杂。把流展开、但不动页面外观,是排查问题的常用手段;本站的 压缩 则用 qpdf 重新压紧这些流,它不降采样图像,也不子集化字体。
交叉引用表
典型文件靠近末尾处有一段 xref 节,较新的文件里则是 xref 流,逐条列出每个对象号的字节偏移,阅读器直接 seek 过去。下载被截断、合并出错、保存写到一半,都会让尾部 trailer 指向已经对不上的偏移:第一页的像素或许仍在,找到“第一页”的那张地图却没了。
所以结构修复跟 OCR、解锁是两种活:修复从有效残余重建内部结构,既不补画缺失的页面图,也不猜密码。
重写前先检查
获取 PDF 信息 返回一份 JSON 报告,含页数、元数据、字体与结构细节,不是改过的 PDF。在压缩、转换或修复之前想先弄清手上是什么文件,就该用它。
查看器完全拒绝打开时,改用 修复 PDF,它会重建结构,包含交叉引用恢复。文件能打开、只是扫描文字选不中,那是 OCR 的问题,不是 xref 的问题。
短决策顺序
- 文件打不开:先 修复。
- 文件能开,你要的是事实(页数、字体、加密线索):用 获取信息。
- 结构没问题,你要更小的文件或从扫描件里拿到可读文字:体积用 压缩,文字用 OCR 取 Markdown,不必再跑一次修复。
Get Info 与 Repair 都不需要账号。想通过 HTTP 调同一批 op,见 开发者。Repair 与品牌桌面“recovery”产品有何不同,见 PDF 在线修复与 Recovery Toolbox 搜索。