【问题标题】:PDF flattening in WindowsWindows 中的 PDF 拼合
【发布时间】:2018-01-21 21:06:09
【问题描述】:

我有一个从 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 也可用。

建议?很难生成打印假脱机问题的可重现示例。

【问题讨论】:

    标签: r pdf ggplot2 printing


    【解决方案1】:

    作为对 Maurits Evers 上述回答的评论开始,但它对于评论来说太大了。

    这样做(PDF->PS->PDF)通常(对于透明的 PDF 文件)最终会得到一个包含在 PDF 文件中的位图图像。这会降低质量,不易扩展等。

    如果 PDF 文件不包含真正的透明度(例如,开罗生产的 PDF,其中所有透明度都是 100% 不透明),那么您可以使用 Ghostscript 的 pdfwrite 和 -dNOTRANSPARENCY 标志来生成一个新的 PDF 文件,其中所有透明度都有已删除。

    如果你想保留它,那么唯一的解决方案就是渲染透明区域。但是,我建议将 CompatibilityLevel 设置为 1.3 并使用 pdfwrite 设备,而不是通过 PostScript 进行双重转换。转到 PostScript 只会在此过程中转储大量其他内容,而转到 PDF 则不太可能发生这种情况。

    还有一个名为 pdfimage 的新设备(将在下一个版本中发布),它只是将页面呈现为位图图像,然后编写一个 PDF 文件,其中每个页面都是一个图像。

    【讨论】:

    • 谢谢你们俩。我今天将尝试使用 ghostscript 方法。 Ken - 您在下一个版本的 ghostscript 中提到的 pdfimage 实用程序是什么?
    • 它将在下一个版本中,是的(3 月,可能是 9.23 版)。您现在可以获取它,但这意味着克隆我们的 Git 存储库并自己构建它,这很乏味。
    • @KenS 非常有趣和有用,感谢您提供的详细信息。
    【解决方案2】:

    一种可能性是使用Ghostscriptpdf2psps2pdf

    1. 将 PDF 转换为 PS

      pdf2ps source.pdf source.ps
      
    2. 将 PS 转换为平面 PDF

      ps2pdf source.ps source_flattened.pdf 
      

    这应该/将适用于所有系统 *nix 和 Windows(您可能必须安装 Ghostscript)。

    我还找到了this thread,它提供了更多详细信息和替代方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-16
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 2010-09-10
      • 2019-01-29
      相关资源
      最近更新 更多