![为什么文档中包含的一些矢量图形会强制光栅化整个页面,从而破坏杯子中文本的外观?](https://linux22.com/image/255218/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%96%87%E6%A1%A3%E4%B8%AD%E5%8C%85%E5%90%AB%E7%9A%84%E4%B8%80%E4%BA%9B%E7%9F%A2%E9%87%8F%E5%9B%BE%E5%BD%A2%E4%BC%9A%E5%BC%BA%E5%88%B6%E5%85%89%E6%A0%85%E5%8C%96%E6%95%B4%E4%B8%AA%E9%A1%B5%E9%9D%A2%EF%BC%8C%E4%BB%8E%E8%80%8C%E7%A0%B4%E5%9D%8F%E6%9D%AF%E5%AD%90%E4%B8%AD%E6%96%87%E6%9C%AC%E7%9A%84%E5%A4%96%E8%A7%82%EF%BC%9F.png)
当我\includegraphics
查看某些 PDF 文件(例如这个 SVG在使用 Inkscape 转换后,LuaLaTeX 或 PDFLaTeX 生成的输出将是这样:当使用 CUPS 打印包含图片的页面时,整个页面将被光栅化,看起来像下图中的底部示例(我有 CUPS 选项“强制光栅化”,这会产生与任何页面相同的糟糕打印输出,因此 CUPS 或我的配置肯定是部分原因)。第一行是同一页,但没有包含该 PDF。其他 PDF 工作正常,所有光栅图像也是如此(这有点自相矛盾)。
当然,这些是结果的扫描件,所以请原谅质量不佳。您仍然应该能够看到“l”和其他倾斜垂直线的波浪状外观。
以下是栅格化输出的 PDF 比较:
我尝试了不同的 PDF 查看器,并打印为 PDF 格式,以免浪费纸张。以下是 okular 生成的内容:
这是相同缩放级别的 acroread:
如果你仔细观察,acroread 可能略有优势;)
即使强制 acroread“打印为图像”(我认为这里命名的是“强制光栅化”选项),结果看起来也好得多:
我不知道它是否看起来像它应该达到的疯狂的 2400 dpi 但仍然(这些图片以大约的文本大小打印\small
)。
答案1
这很可能是由透明效果引起的。透明效果是 PDF(≥ 1.4)的一个相对较新的功能,许多打印机尚未“开箱即用”地支持它(基本上,这需要带有附加 PDF 1.4 扩展的 PostScript Level 3 RIP)。因此,打印系统(打印机驱动程序)必须通过将对象栅格化为普通 CMYK 对象来“扁平化”透明效果,然后再将它们发送到打印机。
栅格化通常按页面进行:将整个页面栅格化为位图,然后发送到打印机。这也会影响页面的其他内容,导致文本出现“粗糙外观”。
尤其是(但不限于)在 Linux 上,许多打印机驱动程序在这方面做得不是特别好。这就是为什么从 Adobe Reader 打印时结果通常更好,因为它(可选)执行扁平化前将页面发送到打印机驱动程序。
解决方法
解决方法是展平 PDF 图形中的透明效果前将它们嵌入到文档中,这样打印机驱动程序就没有必要对整个页面进行栅格化。Adobe 提供了一个白皮书提供一些背景信息以及如何使用他们的产品实现这一点。我的方法是使用 ghostscript 将相应的图像转换为 PDF 1.3,它不支持透明效果,因此强制进行光栅化:
ps2pdf13 image.pdf image-13.pdf
不幸的是,ghostscript 也只是将整个页面(图像)栅格化,因此图像中的字体仍然会呈现“粗糙的外观”,并且其文本在生成的 PDF 中不再可选。不过,文档的主要文本现在将保持其较高的打印质量。
如果页面上的透明或阴影效果不是由包含的图形引起的,而是pdflatex
直接生成的(例如,通过使用 TikZ),情况就会有所不同。对于 TiKZ 来说,解决方案是利用其外部化功能在编译期间自动执行上述转换。针对此问题的专门问题在 tex.se 上。
答案2
原因可能是所包含的 PDF 文件包含 PostScript 中没有的透明效果。因此,光栅化可能只是实现透明度的一种变通方法。
答案3
我在使用 Acrobat 和 Evince 时都遇到过这个问题,但出于某种原因,在使用 Evince 时更常遇到这个问题。我不确定原因,但通常问题涉及带有透明度或某些符号/字体的光栅图形。
我发现的唯一解决方法是在打印机设置中将光栅分辨率设置为最大可能值,例如,如果可用,则设置为 1200 dpi。这几乎可以得到与正确的矢量图像相同的结果。打印时间可能会增加。这些选项在通常的打印对话框中可用。
还要确保为打印机设置了正确的驱动程序,以便可以利用可用的最大分辨率。