优点和缺点:pdflatex+gs 与 gs+pdflatex

优点和缺点:pdflatex+gs 与 gs+pdflatex

我需要制作我所处理的文档的两个版本:彩色和灰度。当然,真正的问题是图像。我不是文档或图像的作者,我只是排版员。

  • 到目前为止,我使用以下相当复杂的程序,可以调用GS+PDFLatex

    1. 将所有图像转换为 PDF(epstopdfconvert)。
    2. 将它们放在子目录中figures/
    3. 使用gs(GhostScript)转换图像以灰度形式保存至目录figuresbw/
    4. 通过不同的\graphicspath{}控制来使用哪一个。
  • 然而,还有另一种选择,可以称为pdflatex+gs

    1. 根本不关心图像类型、路径等等。
    2. 运行pdflatex以获取彩色版本。
    3. 使用gs(GhostScript)转换文件转为灰度。

显然,第二种选择更容易实现,但我有一种不祥的预感,它肯定有一些缺点。那么问题是:使用其中一种选择有什么缺点?


我的gs命令:

nice gs \
  -sOutputFile=$outfile.pdf \
  -sDEVICE=pdfwrite \
  -sColorConversionStrategy=Gray \
  -dProcessColorModel=/DeviceGray \
  -dAutoRotatePages=/None \
  -dCompatibilityLevel=1.4 \
  $infile.pdf < /dev/null;

答案1

如果我理解的没错,您从客户那里收到一份包含 EPS 数据的文档,您需要制作无懈可击的彩色和灰度 PDF,然后将其传递给第三方进行 RIP。您可能无法控制用于 RIP 的软件,因此您希望尽一切努力将出现问题的概率降至最低。

您正在使用 epstopdf 将图形转换为 PDF,而 epstopdf 只是 gs 的包装器。这意味着您当前的工作流程实际上是 gs+gs+pdflatex。连续两次将同一张图形传递给 gs 似乎是一件相对安全的事情。如果 gs 生成的 PDF 代码有缺陷,那么该缺陷很可能在第一次传递后就存在了,而且第二次传递时不太可能出现任何新的缺陷。

在我看来,gs+pdflatex+gs 工作流程听起来是个坏主意。过去我遇到过问题,通过 gs 过滤 pdflatex 输出会产生错误的 pdf 输出,结果被 RIP 拒绝。RIP 拒绝它显然是正确的,因为 gs 输出实际上在语法上无效。这个错误被报告给了 gs 团队,他们回应说他们不在乎并且不会修复它:http://bugs.ghostscript.com/show_bug.cgi?id=693322

我建议您对图形进行一些预检检查。如果它们使用轮廓而不是字体,则最安全。我经常遇到使用透明度的 PDF 图形的 RIP 问题,所以我目前的做法是,对于任何使用透明度的图形,我都使用 pdftoppm 将其渲染为位图,并让 pdflatex 抓取位图。在 300 dpi 下它们看起来相当不错。以下是我用来自动执行该过程的几个脚本。

根据需要将 SVG 图形渲染为 PDF 或 PNG:

http://www.lightandmatter.com/cgi-bin/gitweb.cgi?p=.git;a=blob;f=scripts/render_one_figure.pl

对图形进行飞行前检查:

http://www.lightandmatter.com/cgi-bin/gitweb.cgi?p=.git;a=blob;f=scripts/preflight_one_fig.pl

这与您想要执行的操作略有不同,因为您的源格式是 EPS 而不是 SVG,但我认为您会发现许多预检检查和转换方法也适用于您。由于我们都在 Linux 上,因此您从我的代码中获取的片段也应该适合您。

总的来说,我认为 pdflatex 根本不会对 PDF 图形进行任何处理。它只是将它们复制到其输出中。这意味着 PDF 中的任何语法错误也将作为语法错误出现在 pdflatex 的输出中。这还意味着 PDF 中嵌入的任何字体都将嵌入到 pdflatex 的输出中。例如,如果其中一个图形中的字体的许可证禁止重新分发,那么该非法字体也会出现在您的 pdflatex 输出中。最好在图形和最终输出上使用 Linux 实用程序 pdffonts,这样您就可以看到发生了什么。出于所有这些原因,最安全的方法是将每个图形渲染为位图。

答案2

我怀疑 pdf 使用的色彩空间可能会出现问题。我真的不是这方面的专家,但你可能想看看

相关内容