原始pdf颜色转换(已知转换公式)从RGB到CMYK

时间:2015-04-29 13:35:07

标签: pdf colors rgb acrobat cmyk

这个问题与

有关 然而,更具体的方式。考虑一下我不是印刷生产专家;)

情况:对于打印,我只允许使用两种颜色,青色和黑色。该打印要求最终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)。

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

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

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

由于数字众多,我宁愿选择一个不需要太多编码的批量解决方案,但如果它应该是唯一的解决方案,我也会对此持开放的态度。工作流程如"加载/转换/保存"例如,在每个单独的数字的程序中,或者用易于处理的C ++ PDF API编写小程序。

限制和其他信息:不再可能使用不同的文件格式(如TikZ图),因为它不能完美地工作,对数字的必要调整会产生太多的开销。一个可能有用的信息:由于数字是在Inkscape中创建的,因此PDF中没有光栅图像。我也不希望在颜色转换过程中将所有数字转换为光栅图像。

编辑:

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

3 个答案:

答案 0 :(得分:0)

这是一个想法,我认为如果你的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-在步骤1中每个生成的ps文件的开头粘贴Postcript程序。

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转换将使用setcmykcolor运算符保留postscript中指定的cmky颜色。

也许您可以将公式发布为新问题,有人可以帮助您将其翻译为postscript。

答案 1 :(得分:0)

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

难度将与PDF中使用的着色模式(渐变)有关;如果它们是作为GradientColor导入的,那么从理论上讲,它是一个挖掘GradientColor以找到基本RGB颜色并替换它们的CMYK替换的问题。

答案 2 :(得分:-1)

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