【问题标题】:Creating correct PDF/X with ps2pdf (ghostscript)使用 ps2pdf (ghostscript) 创建正确的 PDF/X
【发布时间】:2015-08-06 17:30:35
【问题描述】:

我已经为此苦苦挣扎了几天,所以我想我会在这里寻求帮助...

基本上,我正在尝试使用 ps2pdf(9.10 版)创建正确的 PDF/X-1 和 PDF/X-3 文档。是的,我知道 ps2pdf 据说只支持 PDF/X-3(见this threadthis threadthis thread)。但是,由于 PDF/X-1 基本上是 PDF/X-3 的子集,我想这样的转换应该是可能的。另外,使用命令...

gs -sDEVICE=pdfwrite -dPDFX -dBATCH -dNOPAUSE -dNOOUTERSAVE -sProcessColorModel=DeviceCMYK -sOutputFile=out.pdf PDFX_def.ps in.pdf

我注意到我正在创建的 PDF/X-3 文件的颜色被转换为 CMYK,而不是保留为 RGB(PDF/X-3 应该是这种情况)。因此,从技术上讲,这些文件现在是 PDF/X-1:我可以通过将“/GTS_PDFXVersion (PDF/X-1a:2003)”添加到 PDFX_def.ps 并通过 Adob​​e 的 Preflight 运行文件来确认。

这让我想到了问题的第一部分:如何防止将原始 PDF 文档中定义的 RGB 颜色转换为 CMYK?开关“-dColorConversionStrategy=/LeaveColorUnchanged”似乎没有任何效果。 (实际上,我读到here 说这种转换甚至是不可能的。那么,为什么会发生这种情况?或者这是过时的信息?)

其次,为什么documentation 会说“RGB 不允许”与“-dPDFX”结合使用?这不就是 PDF/X-3 的意义所在吗?

第三,是否也可以创建通过 Adob​​e 预检的 PDF/X-4 文档?

顺便说一下,这是我的 PDFX_def.ps 文件:

%!
% $Id$
% This is a sample prefix file for creating a PDF/X-3 document.
% Feel free to modify entries marked with "Customize".

% This assumes an ICC profile to reside in the file (Blurb_ICC_Profile.icc),
% unless the user modifies the corresponding line below.

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

% Define entries to the document Info dictionary :

/ICCProfile (ISOcoated_v2_300_eci.icc) def  % Customize or remove.

[ /GTS_PDFXVersion (PDF/X-3:2002) % Must be so (the standard requires).
  /Title (Title)                  % Customize.
  /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 (ISOcoated_v2_300_eci.icc) % Customize
  /Info (Info)                     % Customize
  /OutputConditionIdentifier (Custom)      % 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


    【解决方案1】:

    好的,KenS 的答案应该被接受为这个问题的正确答案,但是几年来一直大量参与标准工作(现在大约十五 :)),我想添加一些更一般的陈述。

    PDF/X-1a
    请参考 PDF/X-1a,而不是 PDF/X-1。这是两个不同的东西,虽然目前没有人使用 PDF/X-1,但最好使用正确的标准名称,其中包括“a”。

    PDF/X-3 和 RGB
    原始问题中的陈述“而不是将它们留在 RGB 中(PDF/X-3 应该是这种情况)”是不正确的或至少具有误导性(尽管我认为意图是正确的)。

    PDF/X-1a 和 PDF/X-3 的区别确实在于 PDF/X-3 支持 CMYK 以外的颜色空间。但这并不意味着不允许使用 CMYK,或者您不能完美地将 PDF/X-3 用于仅 CMYK 的文件。事实上,据我所知,大多数使用“PDF/X-3”的实现都只是使用 CMYK 文件。

    是的,如果您有一个仅包含 CMYK 和/或专色的 PDF/X-3 文件,并且您将标准元数据字段更改为 PDF/X-1a,您最终会得到一个有效的 PDF/ X-1a 文件;这些标准之间几乎没有区别。

    【讨论】:

    • 感谢@David 对 PDF/X-1a 的澄清。确实,我一直忘记字母“a”。 :) 至于 RGB 与 CMYK:是的,我知道在 PDF/X-3 中使用 CMYK 空间非常好。然而,在我看来,使用 CIELAB 和(托管)RGB 的可能性是 PDF/X-3 的主要优点之一,这就是为什么我问这是否可能。
    • 另外,感谢@David 对 PDF/X-1a 的确认:那么,我是否正确假设上述程序生成的文件确实是有效的 PDF/X-1a文件?他们似乎通过了验证......但是在让 ghostscript 处理转换时,我需要注意什么吗?
    • 是的,正如我所说,有潜在的输入色彩空间不会转换为有效的 PDF/X-1a 色彩空间,而是保持不变。这会将文件保留为有效的 PDF/X-3 文件,但不是有效的 PDF/X-1a 文件。
    • 除非您有一种方法可以保证生成 PDF/X 文件或在不能生成 PDF/X 文件时抛出错误,或者除非您对 PDF 生成过程有绝对的控制权,否则您真的只能确定一个如果 PDF 文件通过了预检检查(例如您已经使用 Acrobat Preflight 插件完成的检查),则它符合 PDF/X。
    • @DavidvanDriessche:所以在谈到某个标准时,将字母a 添加到数字1 是很重要的。但是您甚至可以跳过/X- 之后的数字而不受惩罚?!? [没关系,大卫——开玩笑的...] :-)
    【解决方案2】:

    好的,首先你不能使用 pdfwrite 生成 PDF/X-1,因为 PDF/X-1 中的颜色支持存在限制。现在实际上几乎可以做到,但是 Separation 和 DeviceN 颜色空间没有转换为设备空间,需要转换。

    其次,您应该真正使用当前版本的 Ghostscript (9.16)。

    正如您稍后在回答中指出的那样,文档指出您不能使用 /RGB。所以你的 RGB 颜色转换为 CMYK 的原因是因为你不能使用 RGB(见下文)。

    您引用的 Ghostscript 错误报告已有 5 年历史,5 年前的真实情况不再真实(近 2 年前发布 9.10 时也不再真实)。但是,正如我在上面提到的,您仍然无法生成 PDF/X-1,这就是该错误仍然存​​在的原因。一些工作已经完成,还有更多工作要做。

    与 PDFX 一起设置 ColorConversionStrategy 无效,因为 PDFX 的颜色转换要求取代了命令行中的 ColorConversion。

    您不能在 PDF/X-1 文档中使用 DeviceRGB 空间,除非您指定一个本身不是 DeviceRGB 或 DeviceN 空间的 DefautlRGB 颜色空间。我记得目前 pdfwrite 中没有规定指定 DefaultRGB 空间,这就是您不能使用 DeviceRGB 的原因。

    最后;不,您还不能使用 pdfwrite 设备生成 PDF/X-4 文件。

    【讨论】:

    • 感谢@KenS 提供的有用回复。我可以再问几个问题:(1)你说pdfwrite不能生成PDF/X-1文件是什么意思?如我所见,生成的 PDF/X-3 文件看起来确实是 PDF/X-1。他们甚至通过了 Adob​​e 的 PDF/X-1 预检。如果它们是 X-3,就不需要将 RGB 转换为 CMYK? (我没有使用 DeviceN 空格。) (2) 对我来说,使用 PDF/X-3 的主要优势在于能够包含 RGB 颜色并让打印机处理转换。所以,如果你说的是真的(我假设它是真的),在我看来我真的无法生成 PDF/X-3 文件!?
    • 目前的代码不能接受任意输入并可靠地生成 PDF/X-1 输出。有可能的输入不会转换为可接受的设备空间。因此它不能生成 PDF/X-1(在某些情况下,特定类型的输入会生成一个可以通过 PDF/X-1 验证的 PDF 文件,但它可靠)。您可以生成 PDF/X-3 文件,因为它对色彩空间有更广泛的支持。使用 RGB 并“让打印机处理转换”会导致结果质量不佳,除非您的工作流程经过仔细的颜色校准。
    • @KenS:请写“PDF/X-1a”,而不是“PDF/X-1”。两者在技术上是有区别的,今天唯一使用的是 PDF/X-1a
    • @KenS:还有,为什么说“Separation 和 DeviceN 颜色空间不转换为设备空间,需要转换”?情况并非如此,PDF/X-1a 完全支持分离和 DeviceN 颜色空间(不是 N 通道),只要它们的替代颜色空间为 PDF/X-1a 标准可接受。
    • 我目前是根特工作组 (www.gwg.org) 的执行官,这是一个主要在欧洲得到广泛认可的标准组织。 所有在不同国家使用的标准都是基于 PDF/X-1a。这并不是说没有基于 PDF/X-3 的标准,但使用的标准几乎完全建立在 PDF/X-1a 之上。我知道的唯一例外是瑞士。你说得对,打印机更了解他们的机器,但是从 RGB 到 CMYK 的转换是责任,大多数打印机不喜欢这样 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多