如果我有一个包含特定RGB颜色的对象(文本,艺术线条)的PDF文件,并且我想将这些对象转换为具有特定的CMYK颜色,那么可以使用哪些库来执行此操作?< / p>
请注意,我不需要能够从任意RGB值“映射”到“合适的”CMYK值 - 这些值是预先确定的。
.NET / C#首选,但我几乎可以考虑任何事情。
显然我更喜欢免费/开放式图书馆,但是根据许可模式我也会考虑付费图书馆。
答案 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不是为编辑而制作的。
如果我的任务是实现这一目标,我会做以下事情: