字体子集化为什么破坏编辑,却不破坏阅读
字体子集化只保留 PDF 已经用到的字形:文件变小,阅读与打印照常,插入新字符却会失败。PDF123 压缩本身不做子集化,也不会把字形补回来。

一份 PDF 可以看起来完美,却拒绝你敲进去的下一个字符。这通常不是查看器坏了,而是字体子集化:文件只嵌入写成时用到的字形,编辑要用的字形从没被打进包里。
子集是什么
TrueType 与 OpenType 字体可包含数万个字形,十页的备忘录可能只用几百个。子集化重写嵌入字体,丢掉没用到的字形。文件因此变小,已有文字在屏幕与打印上的渲染完全不变,因为已出现的字符都还在。
所以阅读和打印都正常。失败模式出现在之后:有人在编辑器里打开它,敲一个带重音的字母或罕见标点,缺失的字形就被替换、显示为空白或被拒绝。复制粘贴已有文字通常仍可用,撞上字形表空洞的是新字符的插入。
子集化不等于删掉字体
字体对象仍嵌在文件里,离开的是字形表里没用到的那部分。这不同于下面几种做法:
- 依赖阅读器机器上安装的系统字体(跨操作系统有替换风险)
- 把文字转成轮廓或图像(会让选择和搜索失效)
- 加密文件(保护);加密并不做字形子集化
许多办公导出器与打印成 PDF 的驱动嵌入字体时默认就会子集化。损害发生在导出那一刻,而不是后来查看器打开时。用另一个 PDF 工具重新保存可能再子集化,也可能不会,但它不会恢复从未写进去的字形。
PDF123 压缩实际做什么
压缩(POST /api/v1/misc/compress-pdf)让 qpdf 压缩流(--compress-streams=y)、重压缩 flate 数据并生成对象流。它不做字体子集化,也不声称会降采样图像。如果文件的流本就紧,下载可能几乎不变。如果文件已包含子集字体,压缩会原样保留,不会把它们扩回完整字面。
PDF 流水线里几个体积杠杆如何相互作用(图像、流、结构),见压缩 PDF 时实际发生什么。把那篇当背景读物,不要读成“本站压缩按钮会子集化字体”。
OCR 与 Markdown 转换同样不会恢复 PDF 中缺失的字形:OCR 返回 Markdown 文本,PDF 转 Markdown 只抽取文本层已有内容。
实践中的编辑与阅读
| 操作 | 子集化之后的典型结果 |
|---|---|
| 打开、滚动、打印、选中已有文字 | 正常;被引用的字形都在 |
| 插入一个原件从未用过的字符 | 可能失败,或被替换 |
| 指望 PDF 内部是一份完整可编辑的字体 | 脆弱;子集已经丢掉了未用字形 |
| 在 PDF123 上跑压缩 | 流可能变小;字形清单不变 |
如果你需要用完整字符集继续编辑,说明子集化是错误的导出设置。应该改用可编辑的源文件(Word,或用 Markdown 转 PDF 重新渲染 Markdown),或者一份仍嵌入完整字面的 PDF。PDF123 上的压缩不会把这些字形放回去。
排查“我在这份 PDF 里打不出 é”时,先确认原始导出是否做了子集化,再怪查看器或修复。修复重建结构,不会扩回字形表。经 Markdown 往返能得到一份新 PDF,嵌的是 WeasyPrint 为该次渲染所用的字体:这对重新生成文档有用,但不是外科手术式地恢复旧子集字面。