【问题标题】:Raw pdf color conversion (with known conversion formula) from RGB to CMYK从 RGB 到 CMYK 的原始 pdf 颜色转换(使用已知的转换公式)
【发布时间】:2015-07-08 20:05:33
【问题描述】:

这个问题与

有关

但是更具体。考虑到我不是印刷制作方面的专家;)

情况:对于打印,我只能使用两种颜色,青色和黑色。印刷厂要求最终 PDF 采用 DeviceCMYK 格式,仅使用通道 C 和 K。

pdflatex 自动为所有字体和绘制对象执行此操作(使用 xcolor 包),但是我有 100 多个 PDF 格式的草图/图形嵌入在手稿中。由于公认的设计糟糕的工作流程(后来意识到 Inkscape 无法导出 CMYK PDF),所有这些图形都是在 Inkscape 中创建的,因此是 RGB PDF。

但是,Inkscape 中唯一使用的颜色是 CMY(K) 的 RGB 补色,例如100% 青色是 (0,255,255) RGB,50% K 是 (127,127,127) 等等。

问题:我需要使用特定的转换公式将所有这些 PDF 图形从 RGB 转换为 DeviceCMYK(或者最终手稿的整个 PDF)。

我做了很多谷歌研究并尝试了常用的使用方法,例如Ghostscript 或 Adob​​e Acrobat 中的各种打印制作工具,但是到目前为止我发现的所有转换技术都想使用 ICC 颜色配置文件或使用其他一些转换策略,例如填充通道 MY 并保留一些 C 和 K。

我知道从 Inkscape-RGB 到通道 C 和 K 的原始颜色数字的确切转换公式,但是我不知道或找不到任何允许我手动指定转换公式的程序或工具。

问题:是否有任何工作流程可以使用我自己的原始数字特定转换公式手动将我的 PDF 从 RGB 转换为 C(MY)K,转换后的 PDF 使用工具在 DeviceCMYK 中,脚本还是 Adob​​e 产品?

由于数字众多,我更喜欢批处理解决方案,它不需要我进行太多编码,但如果它应该是唯一的解决方案,我也会对像“加载”这样的工作流程持开放态度/convert/save" 在程序中为每个图形或编写一个带有易于处理的 C++ PDF API 的小程序。

限制和附加信息: 不再可能使用不同的文件格式(如 TikZ 数字),因为它不能完美运行,并且对数字进行必要的调整会产生过多的开销。一个可能有用的信息:由于这些图形是在 Inkscape 中创建的,因此 PDF 中没有光栅图像。我也不希望在颜色转换期间将所有数字都转换为光栅图像。

编辑:

我创建了一个使用inkscape 创建的RGB PDF-figure 示例。
我还使用 Illustrator 将逐个对象的颜色手动转换为 CMYK-PDF,以显示结果的外观。 Illustrator 将轴向着色存储在 DeviceN 颜色空间中,颜色为青色和黑色,足够接近^^

【问题讨论】:

  • 您是否看到了 Ghostscript documentation about its ICC profile(PDF 文档)支持?
  • @KenS:平! (我不知道这是否会引起 KenS 的注意,但让我试试……)
  • 你能发布一个示例文档吗?我很确定这是可以做到的,尽管我可以指出的大多数解决方案都是商业性质的。不过,在说一些愚蠢的事情之前先看看一个可以试验的例子会很好:)
  • @KurtPfeifle 我查看了您发布的文档,但据我了解,我必须为转换指定我自己的 icc 配置文件?实际上,当我留在 DeviceRGB/CMYK 中时,我认为我不需要使用颜色配置文件。但正如我所说,我不是这方面的专家...
  • @DavidvanDriessche 我添加了请求的示例文档...关于商业解决方案,我自己只能使用 Adob​​e Family 的产品。但我很感谢您的任何建议!

标签: pdf colors rgb acrobat cmyk


【解决方案1】:

由于您可以访问 Illustrator,因此您可能想尝试将 PDF 导入 Illustrator 并使用 Illustrator 的脚本功能来迭代元素并将填充/描边 RGB 颜色替换为其 CMYK 替换颜色。

难点在于 PDF 中使用的阴影图案(渐变);如果它们是作为 GradientColor 导入的,那么理论上只需深入 GradientColor 以找到基本的 RGB 颜色并替换它们的 CMYK 替换。

【讨论】:

    【解决方案2】:

    使用带有 C++(或 C#??)的 ActivePDF.dll 解决了一个非常相似的问题。

    【讨论】:

    • ActivePDF 是商业的,对吧? (我假设您指的是 ActivePDF 工具包?)
    • 是的。但据我所知,他们有试用版。
    【解决方案3】:

    这是一个想法,我认为如果您的 PDF 文件专门使用颜色空间 DeviceGray、DeviceRGB 和 DeviceCMYK,它会起作用:

    1- 将所有 PDF 文件转换为 Postscript(例如使用 ghostscript 中的 pdf2ps)

    2- 编写一个 Postscript 程序,使用您自己的 Postscript 语言实现重新定义运算符 setrgbcolorsetgraysetcolor,您的实现将在内部使用 setcmykcolor,它将使用您的自定义计算值公式。

    这里是重新定义 setgray 运算符的示例:

    % The operator setcmykcolor expects 4 values in the stack
    % When setgray is called, we can expect to have 1 value in the stack, we will
    % use it for the black component of cmyk by adding 3 zeros and rolling the
    % top 4 elements of the stack 3 times
    
    /setgray { 0 0 0 4 3 roll setcmykcolor } bind def
    

    3- 将您的 Postcript 程序粘贴到第 1 步生成的每个 ps 文件的开头。

    4- 将所有文件转换回 PDF(例如 ps2pdf

    通过将这段代码保存为 sample.ps 来查看它的实际效果:

    /setgray { 0 0 0 4 3 roll setcmykcolor } bind def
    0.5 setgray
    0 0 moveto
    600 600 lineto
    stroke
    showpage
    

    使用这个命令行使用ghostscript将其转换为PDF(我使用的是9.14版):

    gswin64c.exe -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=sample.pdf sample.ps
    

    生成的 PDF 将具有以下页面内容:

    q 0.1 0 0 0.1 0 0 cm
    /R7 gs
    10 w
    % The K operator is the PDF equivalent of setcmykcolor in postscript
    0 0 0 0.5 K 
    0 0 m
    3000 3000 l
    S
    Q
    

    如您所见,ps-> pdf 转换将保留 postscript 中使用 setcmykcolor 运算符指定的 cmky 颜色。

    也许您可以将您的公式作为一个新问题发布,然后有人可以帮助您将其翻译成附言。

    【讨论】:

      猜你喜欢
      • 2011-01-26
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 2011-06-22
      相关资源
      最近更新 更多