如何将特定RGB颜色更改为PDF文件中的特定CMYK颜色?

时间:2010-01-07 17:43:22

标签: pdf

如果我有一个包含特定RGB颜色的对象(文本,艺术线条)的PDF文件,并且我想将这些对象转换为具有特定的CMYK颜色,那么可以使用哪些库来执行此操作?< / p>

请注意,我不需要能够从任意RGB值“映射”到“合适的”CMYK值 - 这些值是预先确定的。

.NET / C#首选,但我几乎可以考虑任何事情。

显然我更喜欢免费/开放式图书馆,但是根据许可模式我也会考虑付费图书馆。

1 个答案:

答案 0 :(得分:4)

诚实?这非常重要。

PDF渲染是通过描述将按顺序渲染的内容的程序完成的。有一个图形状态,它累积程序所做的更改以及标记页面。

可以通过多种不同的方式设置颜色。希望您的PDF文档仅使用运算符RG和rg,它们设置RGB颜色以进行描边操作和非描边操作。这意味着颜色操作将采用以下形式:

rf gf bf RG

其中rf,gf和bf是浮点数,表示从0.0到1.0的颜色通道强度。

重写所有RG和rg运算符分别使用K和k,这将使用4通道CMYK。

这本身就具有挑战性,因为你必须阅读你想要的文档/页面,解析内容流并重写一个将取代旧内容的新内容(再次,可能但不是微不足道的 - PDF允许您通过在文件中附加新一代来替换内容流等单个对象。不要考虑使用SED。 PDF依赖于文件布局,并且在不保持相同长度的情况下更改内联内容将破坏PDF。

如果文件使用CS和cs运算符,则会出现真正的问题。考虑这一系列操作:

/DeviceRGB CS 1 0 0 SC 0 0 m 200 200 l S 200 200 m 200 0 l 0 1 0 SC S

这意味着将颜色空间设置为DeviceRGB,将颜色设置为红色,移至(0,0),行设置为(200,200),笔划(红色),移至(200,200),行设置为(200,0),将颜色设置为绿色和笔划。

这不是那么简单 - 如果你想将RGB红色改为CMYK黄色,你可以这样做:

/DeviceCMYK CS 0 0 1 0 SC 0 0 m 200 200 l S 200 200 m 200 0 l 0 1 0 SC S

这将适用于黄色,但会打破设置为绿色的尝试,因为CS命令现在需要4个通道。

您需要做的是解释内容流,跟踪当前颜色空间是什么,以及当CS命令进入时您想要更改颜色时,需要将其替换为/ DeviceCMYK CS cmyk SC然后下一个rgb SC命令需要更改为/ DeviceRGB CS rgb SC。

这没有考虑如何处理基于ICC的色彩空间,灰色,LAB,n通道,色彩映射,图案,表格等。

PDF不是为编辑而制作的。

如果我的任务是实现这一目标,我会做以下事情:

  1. 如果是少于10个文件,我会在Illustrator中打开它们,更改颜色并以PDF格式导出
  2. 如果是10或更多且不到1000,我会聘请临时工来做我在第1步中所做的工作。
  3. 如果它是1000或更多且小于10000,我会编写一个程序来编写Illustrator脚本以进行更改,如果可能的话。
  4. 如果它是10000或更多并且正在进行中,我会与管理层就文档制作进行认真的讨论,因为如果需要在终端文件格式上进行此类更改并且无法正确重新生成它们。