请注意,我不需要能够从任意RGB值“映射”到“合适的”CMYK值 – 这些值是预先确定的.
.NET / C#首选,但我几乎可以考虑任何事情.
显然我更喜欢免费/开放图书馆到付费图书馆,但根据许可模式我也会考虑付费图书馆.
解决方法
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,将颜色设置为绿色和笔划.
这不是那么简单 – 如果你想将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替换它,然后next rgb SC命令需要更改为/ DeviceRGB CS rgb SC.
这没有考虑如何处理基于ICC的色彩空间,灰色,LAB,n通道,色彩映射,图案,表格等.
PDF不是为编辑而制作的.
如果我的任务是实现这一目标,我会做以下事情:
>如果它少于10个文件,我会在Illustrator中打开它们,更改颜色并以PDF格式导出>如果是10或更多且不到1000,我会聘请一名临时工来做我在第1步中所做的工作.>如果它是1000或更多且小于10000,我会编写一个程序来编写Illustrator脚本以进行更改,如果可能的话.>如果它是10000或更多并且正在进行中,我会与管理层就文档制作进行认真的讨论,因为如果需要在终端文件格式上进行这样的更改并且无法正确重新生成它们.