【发布时间】:2011-01-02 14:25:32
【问题描述】:
如果我有一个包含特定 RGB 颜色的对象(文本、艺术线条)的 PDF 文件,并且我想将这些对象转换为具有特定 CMYK 颜色,有哪些可用的库可以让我这样做?
请注意,我不需要将任意 RGB 值“映射”到“合适的”CMYK 值的能力 - 这些值是预先确定的。
.NET/C# 是首选,但我几乎可以考虑任何事情。
显然我更喜欢免费/开放图书馆而不是付费图书馆,但根据许可模式,我也会考虑付费图书馆。
【问题讨论】:
标签: pdf
如果我有一个包含特定 RGB 颜色的对象(文本、艺术线条)的 PDF 文件,并且我想将这些对象转换为具有特定 CMYK 颜色,有哪些可用的库可以让我这样做?
请注意,我不需要将任意 RGB 值“映射”到“合适的”CMYK 值的能力 - 这些值是预先确定的。
.NET/C# 是首选,但我几乎可以考虑任何事情。
显然我更喜欢免费/开放图书馆而不是付费图书馆,但根据许可模式,我也会考虑付费图书馆。
【问题讨论】:
标签: pdf
说实话?这是非常重要的。
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 不是用于编辑的。
如果我的任务是让这件事发生,我会做以下事情:
【讨论】: