诚实地?这非常重要。
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 c m y k SC,然后下一个 r g b SC 命令需要更改为 /DeviceRGB CS r g b SC。
这没有考虑如何处理基于 ICC 的色彩空间、灰度、LAB、n 通道、色彩映射、图案、表格等。
PDF 不是为了编辑而制作的。
如果我的任务是实现这一目标,我会执行以下操作:
- 如果文件少于 10 个,我会在 Illustrator 中打开它们,更改颜色并导出为 PDF
- 如果是 10 人或以上且少于 1000 人,我会雇用一名临时工来完成我在步骤 1 中所做的工作。
- 如果是 1000 或更多且少于 10000,如果可能的话,我会编写一个程序来编写 Illustrator 脚本来进行这些更改。
- 如果它是 10000 或更多并且正在进行,我会与管理层就文档生成进行认真的讨论,因为如果需要对终端文件格式进行这样的更改,并且它们无法正确重新生成。