纸的数字替身:PDF 的诞生
1.1 一切要从打印说起
1.1.1 1970s:Xerox PARC 和"所见即所得"的梦想
1970 年代,施乐公司在加州帕洛阿尔托的 PARC(Palo Alto Research Center)实验室里聚集了一批天才。这里后来产出了以太网、图形用户界面、激光打印机……几乎现代计算的所有基础都在这栋楼里被发明出来。
其中有一个看似朴素的问题困扰着所有人:屏幕上看到的东西和打印出来的东西对不上。
今天你在 Word 里写一份文档,点"打印",出来的纸张和屏幕上基本一致。但在 1970 年代,这是不可能的。屏幕是像素网格(72 DPI),打印机用的是完全不同的指令集,中间没有统一的描述语言。你在屏幕上排好版,打印出来可能字体变了、位置移了、图表裂了。
这个问题有一个正式名称:WYSIWYG(What You See Is What You Get)——所见即所得。在当时,这还是一个未实现的理想。
1.1.2 John Warnock 和 Charles Geschke
故事的两位主角出场了。
John Warnock 和 Charles Geschke 都是 Xerox PARC 的研究员。Warnock 的博士论文研究的是图形的隐藏面消除算法(计算机图形学的基础问题),Geschke 领导着 PARC 的编程语言实验室。两人在 PARC 合作开发了一个叫 Interpress 的页面描述语言——它可以用统一的方式描述"一页纸上应该画什么"。
问题是:Xerox 的管理层完全不理解这东西的商业价值。Interpress 被束之高阁。
1982 年 12 月,两人一起离开 Xerox,创办了 Adobe Systems。创始资金来自风投,公司名字来自 Warnock 家后面的一条小溪——Adobe Creek。
他们带走的不是代码(那是 Xerox 的),而是一个核心思想:用一种设备无关的语言来描述页面内容。不管你的屏幕是什么分辨率、打印机是什么型号,同一份描述文件应该产生完全相同的视觉结果。
1.1.3 PostScript:打印的"编程语言"
1984 年,Adobe 发布了 PostScript。
PostScript 不是一个文件格式,它是一门图灵完备的编程语言。是的,你没看错——你可以用 PostScript 写循环、做条件判断、定义函数。它只是恰好专精于"描述页面上的图形和文字"。
一段 PostScript 代码长这样:
%!PS-Adobe-3.0
/Helvetica findfont 24 scalefont setfont
100 700 moveto
(Hello, World!) show
0 0 0 setrgbcolor
newpath
100 600 moveto
400 600 lineto
400 650 lineto
100 650 lineto
closepath
fill
showpage
翻译成人话:找到 Helvetica 字体,放大到 24 磅,移动到坐标 (100, 700),画出 "Hello, World!" 这几个字。然后用黑色画一个矩形。完成,输出这一页。
为什么要设计成编程语言?
因为打印输出的复杂度远超你的想象。一页学术论文上可能有:正文(多种字体和字号)、数学公式(几百个特殊符号的精确定位)、图表(贝塞尔曲线、填充色、透明度)、页眉页脚、脚注……用固定格式描述这些东西会导致文件巨大且不灵活。用编程语言来描述,可以用循环画表格线、用函数定义常用元素、用变量控制全局参数。
PostScript 的真正商业突破来自 Apple。1985 年,Apple 的 LaserWriter 打印机内置了 PostScript 解释器——当时这台打印机售价 6,995 美元,其中一大块成本就是那个 PostScript 处理器。Steve Jobs 把它和 Macintosh 电脑配合,第一次让普通用户实现了桌面出版(Desktop Publishing)。
从此,设计师在 Mac 上用 Aldus PageMaker 排版,按下打印键,LaserWriter 的 PostScript 引擎把页面精确地输出在纸上——所见即所得,第一次真正实现了。
1.1.4 PostScript 的局限
但 PostScript 有一个严重问题:它太强大了。
因为它是图灵完备的,一份 PostScript 文件理论上可能包含无限循环,解释器需要"执行"整个程序才能知道最终画面是什么。这意味着:
- 不能随机访问:你想看第 50 页,必须从第 1 页开始"执行"整个程序直到第 50 页——因为前面的代码可能定义了后面要用的变量和函数。
- 渲染速度不可预测:简单的页面秒出,复杂的页面可能跑几分钟。
- 文件不可检索:你没办法在一份 PostScript 文件里"搜索"某个词——因为文字可能是通过运算动态生成的。
- 安全隐患:一门编程语言意味着可以做很多你不希望它做的事情。
这些问题在"发给打印机"的场景下可以容忍——反正打印机就是从头到尾执行一遍。但到了 1990 年代初,人们开始想在屏幕上阅读文档,而不只是打印。这时 PostScript 的弱点就暴露无遗了:想快速翻到第 50 页?等着吧。
1.2 PDF 的诞生:Camelot 项目
1.2.1 1991:John Warnock 的备忘录
1991 年,John Warnock 写了一份内部备忘录,标题是《The Camelot Paper》。开头就说:
"设想这样一种能力:把任何来源的文档发送到任何地方,在接收端显示和打印时都能保持完全忠实的再现——不受任何显示设备或打印引擎特性的影响。"
这段话定义了 PDF 的全部使命:跨平台、跨设备、视觉完全一致。
Warnock 把这个内部项目命名为"Camelot"。目标是创造一种新的文件格式——保留 PostScript 的精确页面描述能力,但去掉编程语言的部分,变成一个静态的、可随机访问的数据格式。tips
1.2.2 从编程语言到数据格式
PDF 和 PostScript 的关系,用一个比喻来说:
- PostScript 是菜谱(一套指令,按步骤执行才能得到菜)
- PDF 是打包好的外卖(最终结果已经固定了,你只需要打开吃)
技术上,PDF 做了几个关键的设计决策:
- 去图灵完备化:PDF 不是编程语言。没有循环,没有条件分支,没有变量赋值。每一页都是独立的、确定性的描述。
- 页面独立性:每一页的渲染不依赖前面的页面。你可以直接跳到第 50 页,不需要处理前 49 页。
- 交叉引用表(xref):文件末尾有一张"目录",记录了每个对象在文件中的字节偏移。想找第 50 页?查表,直接跳到那个位置。
- 对象模型:所有内容(页面、字体、图片、元数据)都用编号的"对象"表示,通过引用互相关联。
这些设计让 PDF 获得了 PostScript 不具备的关键能力:快速随机访问。这对屏幕阅读来说是绝对必要的。
1.2.3 1993 年 6 月 15 日:PDF 1.0 发布
Adobe 在 1993 年正式发布了 PDF 1.0 和配套软件:
- Acrobat Exchange:PDF 阅读和编辑器(收费)
- Acrobat Reader:只能阅读(免费)
- Acrobat Distiller:把 PostScript 文件转换为 PDF(收费)
注意 Adobe 的商业模式设计:阅读免费,创建收费。这个策略后来被证明是天才级的决策——它让 PDF 格式以零摩擦在全世界扩散,同时 Adobe 通过卖"生产工具"赚钱。
但 PDF 1.0 的初始反应其实很冷淡。原因很多:
- 当时网速慢,PDF 文件太大(相比纯文本的 HTML)
- Acrobat Reader 本身就有好几兆,下载都得等半天tips
- 大多数人还在用针式打印机,PostScript 已经够用了
- HTML 刚刚兴起,人们更兴奋于网页而不是"电子纸"
1.2.4 PDF 如何赢得世界
PDF 的真正普及是一个渐进过程,几个关键转折点:
1994 — 免费阅读器的分发策略
Adobe 把 Acrobat Reader 做成完全免费下载,甚至鼓励其他公司在光盘里附带。当时互联网还不普及,很多人是通过杂志附赠光盘第一次接触到 PDF 阅读器的。
1996 — 美国国税局(IRS)
IRS 开始用 PDF 发布税务表格。几亿美国人突然有了"必须能打开 PDF"的刚需。这是 PDF 进入主流的标志性事件——政府背书的力量是巨大的。
1999 — PDF 1.3,支持嵌入字体和透明度
这个版本让 PDF 真正满足了印刷行业的需求。设计师终于可以放心把 PDF 发给印刷厂,确信输出和自己看到的完全一致。
2001 — PDF 取代 PostScript 成为印刷行业标准
印刷业开始用 PDF/X(PDF 的印刷子集)替代 PostScript 作为交付格式。一个时代结束了。
2005 — Adobe Reader 7,免费且无处不在
此时 Adobe Reader 已经预装在几乎所有新电脑上。PDF 从"你可能需要安装阅读器"变成了"每台电脑都能打开"。
2008 — ISO 32000-1:PDF 成为国际标准
Adobe 把 PDF 1.7 规范交给了 ISO。从此 PDF 不再是 Adobe 的私有格式,而是一个开放的国际标准。任何人都可以免费获取规范、实现自己的 PDF 阅读器或生成器。
1.3 Adobe 帝国
1.3.1 不只是一个格式
理解 PDF 的历史,必须理解 Adobe 这家公司的商业逻辑。
Adobe 从来不只是"做 PDF 的那家公司"。他们的产品线覆盖了整个数字内容创作到输出的链条:
| 环节 | 产品 | 角色 |
|---|---|---|
| 图像创作 | Photoshop、Illustrator | 生产视觉素材 |
| 排版 | InDesign | 把素材组合成页面 |
| 文档管理 | Acrobat | 审阅、签名、表单 |
| 输出协议 | PostScript → PDF | 精确再现最终结果 |
Adobe 的生意本质是:控制从创意到最终呈现的每一个环节。PostScript 控制了打印输出,PDF 控制了电子文档分发。他们的护城河不是某一个产品,而是整个工作流的锁定——你在 Photoshop 里修图、在 InDesign 里排版、用 Acrobat 交付,全程不离开 Adobe 生态。
1.3.2 格式标准背后的商业博弈
Adobe 在 2008 年把 PDF 标准化给 ISO,看似"大公无私",实际是精心计算过的:
- 消除竞争的借口:如果 PDF 是 Adobe 私有格式,竞争对手(Microsoft 的 XPS、开源社区的 ODF)就有理由推广替代格式。标准化后,这些替代品失去了"开放性"的攻击角度。
- 护城河不在格式本身:Adobe 的利润来自 Acrobat Pro(售价 449 美元的专业版)和 Creative Cloud 订阅,不是来自格式的私有性。格式开放了,但生产高质量 PDF 的最好工具依然是 Adobe 的。
- 规范复杂度就是壁垒:PDF 1.7 的 ISO 规范有 756 页。完整实现一个符合标准的 PDF 渲染引擎需要数年工程投入。"开放"不等于"容易做"。
1.3.3 从买断到订阅
2013 年,Adobe 全面转向 Creative Cloud 订阅制。Acrobat 从一次性购买变成月费制。这个商业模式转变引发了巨大争议,但从商业角度是极其成功的——Adobe 的年收入从 2012 年的 43 亿美元增长到 2024 年的 215 亿美元。
对用户来说,这意味着"编辑 PDF"这件事变成了每月 22.99 美元的持续支出。这也是为什么市场上出现了大量替代品(Foxit、Smallpdf、各种在线工具)——但没有一个能完全匹配 Acrobat 的功能完整度。
1.4 PDF 的竞争者们(以及他们为什么输了)
1.4.1 DjVu:比 PDF 更早优化扫描文档
DjVu(发音 "déjà vu")是 AT&T 实验室在 1996 年发明的格式,专门针对扫描文档优化。它的压缩算法极其出色——同样的扫描页面,DjVu 文件通常只有 PDF 的 1/5 到 1/10 大小。
DjVu 的核心思想是把每一页拆成三层:
- 前景层(文字和线条,高分辨率,1-bit 黑白)
- 背景层(图片和底色,低分辨率,彩色)
- 蒙版层(决定哪些区域属于前景、哪些属于背景)
这种分层压缩方式让扫描文档既清晰又小巧。在学术文献下载网站(如某些影子图书馆)上,DjVu 至今仍被广泛使用。
但 DjVu 输给 PDF 的原因很简单:生态。Adobe 几乎在每台电脑上预装了免费的 PDF 阅读器,而打开 DjVu 需要额外安装软件。技术上更优不代表生态上能赢。
1.4.2 XPS:微软的尝试
2006 年,微软随 Windows Vista 推出了 XPS(XML Paper Specification)。它基于 XML 和 ZIP,结构比 PDF 更现代、更容易解析。
XPS 的技术设计其实相当不错——XML 描述的页面结构比 PDF 的二进制对象清晰得多,字体嵌入和颜色管理也考虑得很周全。但它犯了一个致命错误:来得太晚了。
到 2006 年,PDF 已经是事实标准。全世界的政府、企业、学术机构都在用 PDF 交换文件。没有人愿意为一个功能相似的新格式重新建设工具链。XPS 在 Windows 10 中已经被边缘化,到 Windows 11 基本名存实亡。
1.4.3 HTML:Web 时代的"反 PDF"
有一种论调认为"HTML 才是文档的未来"——响应式、可搜索、天然跨平台。
但 HTML 和 PDF 解决的是根本不同的问题:
| 维度 | HTML | |
|---|---|---|
| 核心承诺 | 所有人看到的完全一样 | 内容适配不同设备 |
| 布局模型 | 固定尺寸页面(A4/Letter) | 流式布局(宽度自适应) |
| 离线使用 | 单文件,完全独立 | 依赖外部资源(CSS/JS/图片) |
| 打印输出 | 精确到 0.01mm | 需要额外的打印样式表 |
| 法律/存档 | 数字签名、不可篡改 | 动态内容,不保证不变 |
PDF 的核心价值是"视觉保真"——你发给对方一份 PDF,不管他在什么设备上打开,看到的排版和你完全一样。HTML 做不到这一点,也不打算做到这一点。
这就是为什么合同、论文、发票、官方文件依然是 PDF——在这些场景中,"每个人看到完全相同的内容"不是可选的,是强制要求。
1.5 PDF 版本演进一览
| 版本 | 年份 | 关键特性 |
|---|---|---|
| 1.0 | 1993 | 基础功能:文字、图形、图片 |
| 1.1 | 1994 | 密码保护、外部链接 |
| 1.2 | 1996 | 交互式表单(AcroForm) |
| 1.3 | 1999 | 嵌入字体子集、透明度、JavaScript |
| 1.4 | 2001 | JBIG2 压缩、标记内容(Tagged PDF) |
| 1.5 | 2003 | 对象流、交叉引用流(文件更小) |
| 1.6 | 2004 | 嵌入 3D 内容(U3D)、AES 加密 |
| 1.7 | 2006 | XFA 表单、增强的注释 → 2008 成为 ISO 32000 |
| 2.0 | 2017 | 移除过时特性、改进加密、更严格的规范 |
三十年,从一个简单的"电子纸"进化成一个功能庞大、向后兼容三十年历史包袱的复杂系统。后面的章节会让你看到这些复杂性到底意味着什么。