这确实是一种令人困惑的故障:文档就在屏幕上,每一页都渲染得好好的,而打印机什么也不出,或者吐出空白纸,或者报错。人的第一反应是猜文件出了些不易察觉的损坏。通常并没有。
显示 PDF 和打印 PDF 是要求不同的两种操作。你的阅读器在一块自己完全掌控的屏幕上绘制,想用多高分辨率就用多高,需要的字体早已全部在内存里。而打印会把文档交给一整串其他软件——打印驱动、后台队列,有时还有打印机自己的解释器——其中任何一环都可能拒绝你的阅读器乐于完成的工作。打印正是在那里出问题的。
为什么 PDF 打得开却打不出来
六件事几乎解释了所有情况,而且值得学会区分,因为它们的解法毫无共通之处:
| 原因 | 你看到的现象 | 解法 |
|---|---|---|
| 权限禁止打印 | 打印选项变灰,或出现关于权限的错误 | 文件是你的就解除限制 |
| 未扁平化的表单或批注 | 页面能打印,但填写的内容不见了 | 扁平化文件 |
| 隐藏或不可打印的图层 | 页面打出来空白或缺一部分 | 扁平化文件 |
| 打印机处理不了的字体或透明度 | 任务卡住、报错,或打出乱码 | 作为图像打印 |
| 文件超出打印机内存 | 打了几页就停下 | 压缩,或分批打印 |
| 驱动、后台处理或队列故障 | 任何程序都打不出东西 | 根本不是 PDF 的问题 |
打印权限标志
PDF 格式自带一组权限标志,与打开文件所需的任何密码相互独立——打印、复制文本、编辑和提取,都可以分别允许或禁止。因此一份文档完全可能对谁都能自由打开,却拒绝打印;出版社、考试机构和一些企业文档系统分发只读材料,用的正是这一招。
症状不会认错:打印命令变灰,或者报出提到权限或安全性的错误,而不是打到一半才失败。查看阅读器里的文档属性,那里的安全性或权限面板会列出文件允许做什么。
如果文档是你自己的——你自己做的,或者你自己加了保护、现在又要打印——那么在你有密码的前提下,解锁 PDF 可以解除这项限制。如果文档属于别人,这项限制是授权层面的决定而非技术故障,正确的做法是向发件人索要一份可打印的副本。
打不出来的表单、批注和图层
对于「能打印,但内容不见了」这一具体抱怨,这是最常见的原因,归根结底源于该格式的一个结构细节。页面内容、批注和表单域分别存放在不同的层里。你在表单域中输入的文字、添加的高亮和评论、放在最后一页上的签名,全都属于批注内容,而不是页面内容。
打印驱动和阅读器设置在是否包含这一层上做法不一。Adobe 的打印对话框里有一个「注释和表单」下拉菜单,在某些配置下默认打印不含这些内容的文档。结果就是:表单打出来所有答案都是空的,或者签好字的合同打出来没有签名——这比压根打不出来糟糕得多,因为很容易被忽略。
- 填好的表单域打出来是空的。最典型的情况。你的答案属于批注内容,被驱动跳过了。
- 签名和印章消失。同一原因。手写或图片形式的签名在扁平化之前始终是批注。
- 高亮和评论不见了。这往往是有意为之——但当高亮本身就是文档的重点时就不是了。
- 整页打出来是空白。CAD 导出件和印前制作文件这类带图层的文档,可见内容可能位于被标记为不可打印的图层上。
一个操作就能解决这四种情况。扁平化 PDF 会把批注、表单域和图层合并为普通页面内容,生成一份只有单一可见状态的文档,显示成什么样就打印成什么样。出于同样的道理,在归档或用邮件发送已填好的表单之前,这也是正确的一步——它与在屏幕上显示为空白的页面是同源问题,根本原因一致。
字体、透明度和打印机内存
文档侧剩下的故障都是同一种形态:打印机被要求去做它做不到的事,于是要么卡住,要么报错,要么打出一堆没意义的东西。它们值得辨认,因为解法完全一样。
- 打印机无法下载的字体。PostScript 打印机是随任务接收字体数据的。损坏或异常庞大的嵌入字体可能传输失败,结果打出乱码,或者什么也打不出来。
- 透明度和混合模式。来自设计软件的投影、柔化蒙版和分层图稿,打印前需要先扁平化。有的驱动处理得当,有的会打出黑块或白洞,还有的会在那一页上无限期卡住。
- 超大图像。整页 600 dpi 的扫描件,每张纸的数据量都极为可观。普通办公打印机会在任务中途耗尽工作内存并停下。
- 页数过多。把上千页的文档送入后台队列,可能耗尽磁盘空间,或者在打印开始之前就让队列超时。
对于内存类的情况,直接的解法就是把文件变小:压缩 PDF 会对过大的图像降采样,通常仅此一步就够了。如果文档单纯是太长、无法一次送入队列,拆分 PDF 可以把它切成章节或固定大小的段落,按顺序打印。至于字体和透明度,下一节的后备办法比再怎么调驱动都可靠。
当问题根本不在 PDF
在文档上再花时间之前,先把机器排除掉。下面每一项只要一分钟,而它们解释了「PDF 打不出来」报告中相当高的比例:
- 打印点别的东西。用任意其他程序打印一页文档。如果那也失败,责任在打印机、驱动或队列,PDF 是清白的。
- 清空打印队列。一个卡住的任务会挡住排在它后面的一切,而后面那些任务看上去像是各自失败了。把队列里的东西全部取消,然后重启打印后台服务。
- 换一个阅读器打印。用 Chrome 打开文件并从中打印。Chrome 自己渲染页面,送出的任务相对简单,从而绕开了相当一部分驱动层面的复杂性。
- 更新打印机驱动。比文档所用 PDF 功能更老的驱动,失败方式正是这样,尤其是在遇到透明度时。
作为图像打印:通用后备办法
如果你只从本文带走一项实用技巧,那就带走这一项。几乎每个打印对话框都提供作为图像打印选项,藏在「高级」按钮后面。它从根本上改变了这项任务:不再向打印机发送页面的描述——要加载哪些字体、要绘制哪些矢量、要解算哪些透明度——而是由你的电脑把每一页渲染成一张扁平位图再发过去。
由于打印机收到的是图片而非指令,所有字体、透明度和解释器问题都会一并消失。它更慢,文字也会略微发虚,但在别的办法全都不管用时,它管用。
三步修好打不出来的 PDF
按从最可能到最不可能的顺序,下面这套流程能解决绝大多数打印故障:
检查权限并测试打印机
查看文档的安全属性里有没有打印限制,再用另一个程序打印一页,确认打印机本身是好的。这两项检查排除了那两类无论怎么折腾文件都修不好的情况。
把文档扁平化
把它上传到 扁平化 PDF。这会把表单域、签名、批注和图层合并为普通页面内容,从而解决答案缺失、签名消失和整页打空的问题——顺带还能消除大部分透明度故障。
先压缩,再作为图像打印
如果任务仍然卡住,把文件送进 压缩 PDF,让过大的扫描件回到打印机内存能承受的范围,然后启用「作为图像打印」再打。这两招合起来覆盖了字体、透明度和内存三类情况。
如果文件压根打不开,那要解决的就不是打印问题——先从阅读器的错误信息到底在说什么入手,等文档能打开了再回来处理打印。
常见问题
因为页面内容、批注和表单域分别存放在不同的层里,而某些打印驱动和设置会跳过批注层。如果你文档里所有可见的东西都属于批注内容——填好的表单、一个签名、若干高亮——打出来的页面就是空的。把文件扁平化会将这些元素合并为普通页面内容,此后它显示成什么样就打印成什么样。
这就是同一个分层问题,也是最常见的打印抱怨。你输入的答案存放在表单域里,而不在页面上。要么把阅读器的打印对话框设为「文档和标记」或「注释和表单」,要么——更可靠,因为它会随文件一起传递——先把 PDF 扁平化,让答案变成永久的页面内容。
它改变了电脑发送给打印机的内容。不再发送一份需要打印机自行解释的页面描述——要加载哪些字体、要绘制哪些矢量、要解算哪些透明度——而是由电脑把每一页渲染成扁平位图,然后把图片发过去。于是所有字体、透明度和解释器问题都随之消失。它更慢,文字也会略显发虚,所以在任务卡住、报错或打出乱码时再用。
不是。PDF 自带权限标志,它对打印、复制和编辑的控制与打开文件所需的密码相互独立,所以一份文档完全可能自由打开却仍禁止打印。如果文件是你的而且你有密码,解锁 PDF 可以解除这项限制。如果它来自别人,那这项限制是刻意设置的,正确的做法是向发件人索要一份可打印的版本。
这种表现指向的是内存,而不是文档无效。高分辨率扫描件每页承载的数据量很大,普通办公打印机会在任务中途耗尽工作内存。压缩 PDF 会对过大的图像降采样,通常能彻底解决问题;对于特别长的文档,把文件拆开、分批打印还能顺带避开后台队列的容量限制。
应该,把它当成惯例。扁平化会把图层、透明度和批注解算成单一而明确的页面描述,从而消除你所看到的与他们设备所输出的之间的主要分歧来源。它还能防止表单域和评论被不可预测地打印或丢弃,并让文件成为更可靠的存档副本。