我有一个我从R / ggplot2生成的PDF文档。它包括几个具有“alpha”或透明度规格的图。 PDF文件很好地呈现给各种PDF阅读器,但在Windows中,当我尝试打印时,PDF会尝试“展平”图像。这种情况持续了一段时间,并且最终(30页文档的1小时以上)我必须中止。
之前已经报告过此问题但没有明确的解决方案。 (Flatten the alpha channel in ggplot2)当我尝试这个解决方案时,R / Bookdown抱怨我试图将HTML元素(我怀疑的PNG)隐藏到PDF中。
有没有办法对R / ggplot2 PDF输出进行后处理,这样当我尝试打印PDF时,它会起作用?
虽然我最终发布了可以在Windows环境中打印的PDF,但我可以将PDF从Windows移动到Linux,在那里“修复”PDF,然后将文件重新移植到Windows进行打印,...只有相关的linux工具。 OSX也可用。
连连呢?难以产生可重现的打印假脱机问题示例。
答案 0 :(得分:1)
作为对上述Maurits Evers答案的评论开始,但它的评论太大了。
这样做(PDF-> PS-> PDF)通常(对于透明的PDF文件)最终会在PDF文件中包含一个位图图像。哪个质量下降,不易扩展等等。
如果PDF文件不包含真正的透明度(例如Cairo生成的PDF,其中所有透明度都是100%不透明),那么您可以使用Ghostscript的pdfwrite和-dNOTRANSPARENCY标志生成一个新的PDF文件,其中所有透明度都具有被删除了。
如果要保留它,那么唯一的解决方案是渲染透明区域。但是,我建议将CompatibilityLevel设置为1.3并使用pdfwrite设备,而不是通过PostScript进行双重转换。转到PostScript只会在流程中转储大量其他内容,这种情况不太可能发生在PDF上。
还有一个名为pdfimage的新设备(将在下一个版本中),它只是将页面呈现为位图图像,然后写入PDF文件,其中每个页面都是图像。
答案 1 :(得分:0)
一种可能性是使用Ghostscript' pdf2ps
和ps2pdf
:
将PDF转换为PS
pdf2ps source.pdf source.ps
将PS转换为拼合PDF
ps2pdf source.ps source_flattened.pdf
这应该/将适用于所有系统* nix和Windows(您可能必须安装Ghostscript)。
我还发现this thread提供了更多细节和替代方法。