
用毒霸PDF 这类工具打开一个 PDF,有两件事经常让人费解:
这些不是工具做得不好,而是PDF 这个格式从设计上就不是为了编辑而生的。
理解它的设计目标,这些现象就都有了确定的解释。
它诞生时要解决的问题很具体:同一份文档,在任何机器、任何软件上打开,版面必须完全一致。
要做到这一点,思路只能是:把"这一页长什么样"精确描述出来,而不是描述"这篇文章由哪些段落组成"。
所以 PDF 里存的是:
注意这里缺了什么:没有"段落",没有"列表",没有"表格",没有"标题层级"。
PDF 里没有"文章结构",只有"版面描述"。
这句话是理解全部问题的关键。
在文字处理软件里,文字是流:你删掉一段,后面的内容自动往前补。
在 PDF 里,每一段文字的位置是写死的坐标。 它记录的是"第 3 行从横坐标 X 开始画",而不是"这是第 3 行"。
于是就有了那个经典结果:
你改了一个字,后面的内容不会自动挪动——它还在原来的位置上,于是和新文字重叠或留出空档。
不是工具不会排版,而是这个格式里本来没有"流动"这个概念。
现象一:复制出来的文字顺序是乱的。
因为复制时读取的是绘制顺序(文件里指令的先后),而不是阅读顺序(你眼睛看到的)。
双栏排版、带批注、有页眉页脚的文档尤其明显——你可能先拿到右下角的内容。
现象二:复制出来多了很多换行。
一段连续的句子在 PDF 里可能是逐个片段分别定位的。提取时如果按"位置变化"来断行,就会把一句话拆成好几行。
现象三:编辑时字体变了、字距也不对。
见下一节的字体子集问题。
现象四:表格复制出来是一团乱码。
PDF 里没有表格,只有"若干条线"加"若干段分别定位的文字"。 它们之间没有"单元格"这层关系。所以表格要提取,得靠工具反推结构,而反推的准确率取决于版面复杂程度。
这个机制很关键。
一份 PDF 为了控制体积,通常不会嵌入完整字体,而是只嵌入文档里实际用到的那几个字形——这叫子集化。
后果很直接:
你想输入一个字,而文档里从来没出现过那个字 → 子集里没有它的字形 → 无法按原字体显示。这时工具只能替换成别的字体,或者用别的方式绕开。
另一个后果:同一段文字里,不同字符可能来自不同的子集甚至不同字体,所以"统一改字体"经常改不彻底。
这也是为什么"PDF 编辑"常常表现为"覆盖式编辑":在原文上贴一块新的文字,而不是真正修改原来的那段。
第一类:原生文字型。 文字是真正的文字对象,可以提取、可以搜索。
第二类:扫描图片型。 整页就是一张图片。文字对程序来说只是像素,要提取必须先做文字识别。
判断方法很简单:试着选中一段文字。
这个区分决定了后续的一切:第二类做不了"编辑文字",只能识别后重建。
既然 PDF 里没有结构,转换工具做的事情本质是反推结构:
这是"猜测",不是"读取"——所以在版面复杂时,结果会不理想。这不是工具差,而是输入里本来就没有这些信息。
一个实用的建议:如果这份文档是要长期编辑的,尽量回到原始的可编辑源文件;毒霸PDF 这类工具适合用来查看与做局部处理,PDF 本身适合作为最终的"定稿版本",不适合作为编辑的起点。
关于毒霸PDF 里"编辑起来别扭"这件事,记住四条:
这里有一条可以带走的经验:一个格式的能力边界,由它当初要解决的问题决定。PDF 把"到处一样"做到了极致,代价就是放弃了"可编辑"——这不是缺陷,是取舍。理解取舍,就不会把"做不到"误判成"工具不行"。
https://www.ijinshan.com/functions/dubapdf.html?channel=4084
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。