---
title: "为什么从 PDF 里复制出来的字，总是断成一截一截的"
description: "平时经常跟 PDF 打交道的人，大概都吃过这种苦头。 从里面挑两段话拷出来，不管是发进微信还是贴进 Word，粘出来的全是一截一截的断行。"
date: 2026-09-23T04:00:00Z
canonical: https://xiaobox.github.io/p/2026-09-23-wei-shen-me-cong-pdf-li-fu-zhi-chu-lai-de-zi-zong-shi-duan-c/
author: 小盒子
categories: ["杂谈"]
license: CC BY-NC-SA 4.0
license_url: https://creativecommons.org/licenses/by-nc-sa/4.0/
---

# 为什么从 PDF 里复制出来的字，总是断成一截一截的


平时经常跟 PDF 打交道的人，大概都吃过这种苦头。

从里面挑两段话拷出来，不管是发进微信还是贴进 Word，粘出来的全是一截一截的断行。

![PDF 复制粘贴断行真实复现](https://xiaobox-public-images.oss-cn-beijing.aliyuncs.com/images/pdf-%E5%A4%8D%E5%88%B6%E7%B2%98%E8%B4%B4%E6%96%AD%E8%A1%8C%E7%9C%9F%E5%AE%9E%E5%A4%8D%E7%8E%B0.png)

一句话被横着切成三四段，有些词直接断开，中间还冷不丁插进来一行「第 3 页 共 12 页」外加一截页眉。最后只能坐在那儿，光标挪到行尾，一下一下按退格键把回车删掉。

Word 复制出来好好的，网页选一段也是连贯的。偏偏到了 PDF 这里，看着排得整整齐齐，一粘出来全乱套了。

很多人第一反应是阅读器做得糙，其实翻到底层看，根本不是软件没做好适配。

PDF 这个格式在三十年前被设计出来的时候，文件里压根就没有「段落」这个概念。

甚至连「空格」，可能都是假的。

你如果用纯文本工具扒开一个没压缩的 PDF，找到画文字的那几行指令，大概长这样。

```
BT
/F1 12 Tf
72 712 Td
(Hello) Tj
ET
```

这段指令翻译成人话是：选 F1 这个字体，设成 12 号，把画笔挪到坐标（72, 712）的位置，把 Hello 几个字的轮廓印上去。

就是这样。

一整页 PDF，其实就是成百上千条画图指令。在坐标 A 画几个字符，跳到坐标 B 再印几个字符。至于哪些字连起来是一句话，哪儿是段落结尾，哪行是页眉页脚，文件里完全没有记录。

![画笔按坐标盖字](https://xiaobox-public-images.oss-cn-beijing.aliyuncs.com/images/pdf-%E7%94%BB%E7%AC%94%E6%8C%89%E5%9D%90%E6%A0%87%E7%9B%96%E5%AD%97.png)

空格就更有意思了。

很多 PDF 里连空格字符（0x20）都没有。屏幕上两个单词之间的空隙，往往是排版引擎在两条指令中间，把横坐标 X 往右硬挪了几个像素。肉眼看着像空格，对文件来说只是两个字离得稍微远了点。

这就带来一个很尴尬的问题。

按下 Ctrl+C 的时候，阅读器拿到的根本没有语义上下文，眼里只有一块画满散落字符的二维坐标布。

它只能自己当侦探去猜。量一量字符间距算不算一个词，看看上下行间距算不算同一个段落，再猜猜最底下的小数字是不是页码。

最头疼的是换行。一行字排到右边缘折下来，阅读器根本分不清是作者故意按的回车，还是排版软件自动折过来的软换行。为了稳妥起见，大部分阅读器碰到这种视觉折行，干脆直接往剪贴板里塞个换行符 `\n`。

猜对了，贴出来的字勉强能看。猜不准，就是满屏莫名其妙的断行。

![阅读器当侦探猜](https://xiaobox-public-images.oss-cn-beijing.aliyuncs.com/images/pdf-%E9%98%85%E8%AF%BB%E5%99%A8%E5%BD%93%E4%BE%A6%E6%8E%A2%E7%8C%9C.png)

顺着这个讲，还有一个更抓狂的毛病。

有时候从中文 PDF 里拷文字，情况更离谱，粘出来的直接是一长串问号、方块，或者完全对不上的生僻字。

以前报销打印发票，或者下一些老论文的时候经常碰上。原因同样出在它的绘图机制上。

中文字体文件动辄几十兆，为了省体积，PDF 通常会做字体子集化。一份合同只用了四百个汉字，就只把这四百个字的字形轮廓塞进文件，按 1 到 400 重新排一套临时编号。

屏幕显示的时候，按编号去画轮廓，看着一切正常。但复制时，剪贴板需要知道 1 号轮廓到底对应哪个 Unicode 汉字。

要是生成工具图省事，漏写了映射对照表（ToUnicode CMap），阅读器就彻底抓瞎了。它画得出来字形，却根本不知道那叫什么字，只能扔给你一堆乱码。

![缺了对照表的字形仓库](https://xiaobox-public-images.oss-cn-beijing.aliyuncs.com/images/pdf-%E7%BC%BA%E4%BA%86%E5%AF%B9%E7%85%A7%E8%A1%A8%E7%9A%84%E5%AD%97%E5%BD%A2%E4%BB%93%E5%BA%93.png)

看到这儿很多人可能会纳闷，当年设计这玩意的人，脑子怎么想的，为什么要把一个文档格式搞成一堆画笔坐标。

这就得回到 1991 年。

Adobe 联合创始人 John Warnock 当时启动了一个代号叫 Camelot 的项目，也就是后来 PDF 的前身。他想解决的问题在今天看来理所应当，但在当时却是个大麻烦。

九十年代初在不同电脑和打印机之间传文件，简直是一场灾难。一份排好的版面拷给别人，只要对方缺了个字体，版面直接散架，表格错位，打出来一看全乱了套。

Warnock 当时立下的目标是：一份文件，不管丢到哪台电脑、哪个系统、哪种打印机上，显示出来的样子必须分毫不差。

![1991 年同一页在每台机器上长一样](https://xiaobox-public-images.oss-cn-beijing.aliyuncs.com/images/pdf-1991%E5%B9%B4%E5%90%8C%E4%B8%80%E9%A1%B5%E5%9C%A8%E6%AF%8F%E5%8F%B0%E6%9C%BA%E5%99%A8%E4%B8%8A%E9%95%BF%E4%B8%80%E6%A0%B7.png)

既然要绝对一致，最稳妥的办法就是直接把打印机的页面描述语言搬到屏幕上，不管语义，只记坐标。

PDF 从诞生的第一天起，就不是拿来给人编辑的文档，它其实就是一张塞进电脑里的数码复印纸。纸张是不需要理解文字含义的。你手里拿一张打印出来的劳动合同，纸不知道哪一行是你的名字，纸只管每个地方有没有落上油墨。

Adobe 后来也补过课。2001 年推出 PDF 1.4 时，专门加了带结构标签的 Tagged PDF 标准，允许标注段落和标题。

但现实是，直到今天大部分 PDF 依然不带标签。

因为大量软件导出 PDF，走的是系统虚拟打印。应用把内容交给打印驱动，驱动只管向虚拟打印机发送「在坐标多少画线、画字」，段落结构在变成打印指令的瞬间就已经丢光了。

![虚拟打印把结构碾平](https://xiaobox-public-images.oss-cn-beijing.aliyuncs.com/images/pdf-%E8%99%9A%E6%8B%9F%E6%89%93%E5%8D%B0%E6%8A%8A%E7%BB%93%E6%9E%84%E7%A2%BE%E5%B9%B3.png)

今天大家都在用各类版面分析模型和提取工具清洗 PDF，折腾半天，其实是在帮三十年前那个为了「排版绝对不乱」而做出的工程取舍收拾残局。

搞明白这层关系，下回再遇到复制出来碎成渣的文字，也就不用跟阅读器较劲了。

人家当初费尽周折造出来的本就是一张印死在屏幕上的纸，只是我们总觉得只要能在屏幕上选中的字，就理所应当能顺顺当当地拷出来。

