如何使用 Ghostscript 创建正确的(灰度)PDF/X-3 文件

如何使用 Ghostscript 创建正确的(灰度)PDF/X-3 文件

我正在尝试使用 Ghostscript 将任意 PDF 文件(使用 pdfLaTeX 创建的杂志,包含一些照片,但也包含一些图形,例如网络漫画)转换为有效的 PDF/X-3,并且我希望结果是灰度/单色。我对 ICC 颜色配置文件不太了解,我不太关心色彩管理无论如何,如果没有 ICC 配置文件,这更容易,那么我不介意。我愿意让打印机处理我的文件——我不需要绝对的色彩保真度(尤其是因为我们在这里谈论的是灰度)。

我一直在尝试使用Ghostscript 文档,“创建 PDF/X-3 文档”部分基于此,我的尝试如下:

gs                                   \
  -dSAFER -sDEVICE=pdfwrite          \
  -dEmbedAllFonts                    \
  -sProcessColorModel=DeviceGray     \
  -sColorConversionStrategy=Gray     \
  -dPDFX -dPDFACompatibilityPolicy=1 \
  -o 'output.pdf' -f 'my_pdfx_def.ps' 'input.pdf'

my_pdfx_def.ps根据 Ghostscript 附带的模板,其中包含以下内容:

%!

systemdict /ProcessColorModel known {
  systemdict /ProcessColorModel get dup /DeviceGray ne exch /DeviceCMYK ne and
} {
  true
} ifelse
{ (ERROR: ProcessColorModel must be /DeviceGray or /DeviceCMYK.)=
  /ProcessColorModel cvx /rangecheck signalerror
} if

[ /GTS_PDFXVersion (PDF/X-3:2002) % Must be so (the standard requires).
  /Trapped /False                 % Must be so (Ghostscript doesn't provide other).
  /DOCINFO pdfmark

% Define an ICC profile:

currentdict /ICCProfile known {
  [/_objdef {icc_PDFX} /type /stream /OBJ pdfmark
  [{icc_PDFX} <</N systemdict /ProcessColorModel get /DeviceGray eq {1} {4} ifelse >> /PUT pdfmark
  [{icc_PDFX} ICCProfile (r) file /PUT pdfmark
} if

% Define the output intent dictionary:

[/_objdef {OutputIntent_PDFX} /type /dict /OBJ pdfmark
[{OutputIntent_PDFX} <<
  /Type /OutputIntent              % Must be so (the standard requires).
  /S /GTS_PDFX                     % Must be so (the standard requires).
  /OutputCondition (Commercial and specialty printing) % Customize
  /Info (none)                     % Customize
  /OutputConditionIdentifier (CGATS TR001)      % Customize
  /RegistryName (http://www.color.org)   % Must be so (the standard requires).
  currentdict /ICCProfile known {
    /DestOutputProfile {icc_PDFX}  % Must be so (see above).
  } if
>> /PUT pdfmark
[{Catalog} <</OutputIntents [ {OutputIntent_PDFX} ]>> /PUT pdfmark

这确实运行了,并生成了一个文件,表面上看在我的 PDF 查看器中似乎没问题。但是,考虑到 Ghostscript 的文档中我应该做的一长串事情,我不确定这是否真的足够(生成有效/合理的 PDF/X-3 文档)。特别是,它说

要从 Postscript 或 PDF 文件创建 PDF/X-3 文档,您应该:

[…]

  • 在运行输入文档之前指定 PDF/X 定义文件。它提供要包含在输出文档中的附加信息。可以在 中找到示例 PDF/X 定义文件gs/lib/PDFX_def.ps
  • 如果已注册的打印条件适用,请在 PDF/X 定义文件中指定其标识符。否则,请提供 ICC 配置文件并在 PDF/X 定义文件中指定它,如下所述。

我尝试调整它提到的文件PDFX_def.ps(见上文),但我不知道什么OutputCondition是 an 或我应该为此输入什么。不幸的是,Ghostscript 文档中几乎没有记录这一点。我尝试.icc在我的自定义版本中设置一个文件,但无法让 Ghostscript 找到该文件——无论如何,我总是得到“ Error: /invalidfileaccess in --file--”。无论如何,我会使用哪个颜色配置文件?

  • 在 ColorSpace 资源类别中提供DefaultRGB资源文件。要么在 PDF/X 定义文件中定义它,要么提供 的定义gs/Resource/ColorSpace/DefaultRGBgs/Resource/ColorSpace/DefaultRGB通常与 Ghostscript 一起分发,其内容不一定能满足您的需求,请参见下文。

不用说,它没有指定如何做到这一点。但无论如何,考虑到我想要灰度,我是否真的需要这个?

  • 使用 指定-sOutputICCProfile一个 ICC 配置文件,该配置文件代表最终文件的颜色空间(CMYK 或灰度)。这与 PDF/X 定义文件中使用的 ICC 配置文件相同,即 ICCProfile。即使您使用的是标准OutputCondition且不需要指定 ICCProfile,您仍必须设置OutputICCProfile适当的 ICC 配置文件才能进行正确的颜色转换。

好吧,我没有具体说明-sOutputICCProfile,而且这似乎也没什么坏处。我还应该这么做吗?(再说一遍,我应该从哪里提取 ICC 配置文件?)

相关内容