2010-01-07 66 views
2

如果我有一个带有特定RGB颜色的对象(文本,艺术线条)的PDF文件,并且我想将这些对象转换为具有特定的CMYK颜色,那么可以使用哪些库来实现这一点?如何将特定的RGB颜色更改为PDF文件中的特定CMYK颜色?

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

.NET/C#首选,但我会考虑几乎任何东西。

显然我更喜欢免费/开放图书馆到付费图书馆,但取决于许可模式,我也会考虑付费图书馆。

回答

4

老实说?这是非常不平凡的。

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

有许多不同的方式可以设置颜色。希望您的PDF文档只使用设置RGB颜色的操作员RG和rg进行抚摸和不抚摸操作。这意味着,色操作将在以下形式:

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或更多,并且正在进行,我会与管理层就文档制作进行认真的讨论,因为如果需要对这种类型的更改进行终端文件格式并且无法正确重新生成。
+0

@Mr。霍利:我明白这是不平凡的,这就是为什么我要找一个图书馆:-) *有*库在那里将读取PDF并提供一个高级API来修改它(或者说,写出一个修改后的版本)。 iText库就是一个例子,我用了很多。不幸的是,这不能做我在这里寻找的那种操纵。另一个我看过的是PdfTron--它可以做这种事情 - 但我不喜欢他们的授权模式(也是,它太重量级了,我只需要这一个功能)。 – 2010-01-07 20:55:45

+0

不过,感谢您花时间把这个深思熟虑的答案放在一起。 +1 – 2010-01-07 20:56:58