使用 ghostscript 替换 PDF 中的颜色

Posted

技术标签:

【中文标题】使用 ghostscript 替换 PDF 中的颜色【英文标题】:Replace colors in PDF using ghostscript 【发布时间】:2015-09-01 21:09:38 【问题描述】:

如何将 PDF 文档中的一种颜色转换为另一种颜色,例如将 #ff0000(红色)的所有实例转换为 #ffffff(白色)?

我看到许多 ghostscript 命令在做类似的事情(使用 setcolor、setcolortransfer),但我找不到这个确切问题的解决方案。

例如,以下将创建输入 PDF 的图像负片:

gs -o output.pdf -sDEVICE=pdfwrite -c "1 exch sub1 exch sub1 exch sub1 exch sub setcolortransfer" -f input.pdf

我会通过更高级别的控制来超越这一点,专注于将单一颜色替换为不同的(不是负面的)颜色。

【问题讨论】:

【参考方案1】:

基本上,您不能(或至少不使用 Ghostscript)。

首先,您似乎假设颜色将在 RGB 中指定,而实际上它们可以在 CMYK、ICC、CalRGB 或 Lab 中指定。您还需要考虑索引颜色空间。

其次,Ghostscript 不会“编辑”PDF 文件,当您将 PDF 文件作为输入发送到 Ghostscript 时,它会完全解释为图形基元并处理基元。

当输出为 PDF 时,图元将重新组合成一个新的 PDF 文件。此过程的目标是新 PDF 文件的视觉外观应与原始文件匹配。它不是同一个 PDF 文件,其内部结构可能会完全不同。

最后,您打算如何处理图像?你会逐字节处理这些颜色来按摩颜色吗?还是您打算忽略它们?阴影也是如此,其中颜色甚至不直接存在于 PDF 文件中,而是由函数生成。

在不知道您为什么要这样做的情况下,我什至无法提供其他方法:解压PDF文件,阅读并手动替换颜色。

【讨论】:

我不需要高水平的替换精度(阴影并不重要)。我不知道如何检测颜色是 CMYK、RGB 还是其他颜色,我想我可以尝试多种组合并进行测试(有没有办法找出文档中使用的颜色?)。至于实际的编辑,我很清楚 Ghostscript 正在解释输入并生成输出 PDF,这正是我想要的。 我假设我要处理的这个 PDF 是所有图像,每个页面都有我想要“删除”的两种颜色背景(将两者中的每一个替换为白色)。我的猜测是这是可能的,基于另一个颜色被反转的帖子(导致原始 PDF 的图像负片)。 反转比特定颜色替换要容易得多。处理图像会很慢,因为每个图像样本都需要检查。您最好的选择可能是将 PDF 呈现为图像格式,在图像编辑器中更改颜色并将它们另存为 PDF> 或使用 MuPDF 之类的工具从 PDF 中提取所有图像并从那里继续。您可以使用 Ghostscript 来完成,但需要编写一些 C 代码并重新构建应用程序。

以上是关于使用 ghostscript 替换 PDF 中的颜色的主要内容,如果未能解决你的问题,请参考以下文章

替换 PDF 中的特定文档

Ghostscript 在合并 PDF 时跳过字符

是否可以使用ghostscript删除pdf中文本块的背景

使用 Ghostscript 从单个 JPG 文件创建 PDF - PDF 中的图像放置问题

未嵌入字体的 Ghostscript 和 PDF

通过将 PDF 中的所有字体字形转换为轮廓形状来替换它们