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



这个问题与有关

  • 用脚本(或其他方法)将RGB转换为PDF格式的CMYK

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

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

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

然而,Inkscape中唯一使用的颜色是CMY(K)的RGB补码,例如100%青色是(0255255)RGB,50%K是(127127127127)等。

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

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

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

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

由于图的数量很大,我更喜欢批量解决方案,它不需要我自己太多的编码,但如果它应该是唯一的解决方案,我也会对每个图的程序中的"加载/转换/保存"之类的工作流程持开放态度,或者使用简单的C++PDF API编写小程序。

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

编辑:

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

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

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

2-用Postscript语言编写一个Postscript程序,用您自己的实现重新定义运算符setrgbcolor、setgray和setcolor,您的实现将在内部使用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-将Postscript程序粘贴在步骤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

使用此命令行将其转换为带有重影脚本的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颜色。

也许你可以把你的公式作为一个新问题发布,有人可以帮你把它翻译成附言。

由于您可以访问Illustrator,您可能需要尝试将PDF导入Illustrator中,并使用Illustrator的脚本功能迭代元素,并用其CMYK替换颜色替换填充/笔划RGB颜色。

困难在于PDF中使用的着色模式(Gradients);如果它们被导入为GradientColor,那么在理论上,这是一个挖掘GradientColor以找到基本RGB颜色并替换其CMYK的问题。

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

最新更新