使用 ghostscript 替换 PDF 中的颜色
Replace colors in PDF using ghostscript
如何将 PDF 文档中的一种颜色转换为另一种颜色,例如将#ff0000(红色)的所有实例转换为#ffffff(白色)?
我见过许多 ghostscript 命令做类似的事情(使用 setcolor、setcolortransfer),但我找不到解决这个确切问题的方法。
例如,以下将创建输入 PDF 的图像负片:
gs -o output.pdf -sDEVICE=pdfwrite -c "{1 exch sub}{1 exch sub}{1 exch sub}{1 exch sub} setcolortransfer" -f input.pdf
我会通过更高级别的控制来解决这个问题,专注于用不同的(不是负面的)颜色替换单一颜色。
基本上,您不能(或者至少不能使用 Ghostscript)。
首先,您似乎假设颜色将在 RGB 中指定,而实际上它们可以在 CMYK、ICC、CalRGB 或 Lab 中指定。您还需要考虑索引色彩空间。
其次,Ghostscript 没有 'edit' PDF 文件,当您将 PDF 文件作为输入发送到 Ghostscript 时,它会被完全解释为图形图元并处理图元。
当输出为 PDF 时,图元将重新组合成一个新的 PDF 文件。此过程的目标是新 PDF 文件的视觉外观应与原始文件相匹配。它不是同一个 PDF 文件,其内部结构可能完全不同。
最后,您打算如何处理图像?你会逐字节地处理这些颜色吗?还是您打算忽略它们?阴影也是如此,颜色甚至不直接出现在 PDF 文件中,而是从函数中生成的。
在不知道你为什么要这样做的情况下,我什至无法提供其他方法;解压PDF文件,阅读并手动替换颜色。
如何将 PDF 文档中的一种颜色转换为另一种颜色,例如将#ff0000(红色)的所有实例转换为#ffffff(白色)?
我见过许多 ghostscript 命令做类似的事情(使用 setcolor、setcolortransfer),但我找不到解决这个确切问题的方法。
例如,以下将创建输入 PDF 的图像负片:
gs -o output.pdf -sDEVICE=pdfwrite -c "{1 exch sub}{1 exch sub}{1 exch sub}{1 exch sub} setcolortransfer" -f input.pdf
我会通过更高级别的控制来解决这个问题,专注于用不同的(不是负面的)颜色替换单一颜色。
基本上,您不能(或者至少不能使用 Ghostscript)。
首先,您似乎假设颜色将在 RGB 中指定,而实际上它们可以在 CMYK、ICC、CalRGB 或 Lab 中指定。您还需要考虑索引色彩空间。
其次,Ghostscript 没有 'edit' PDF 文件,当您将 PDF 文件作为输入发送到 Ghostscript 时,它会被完全解释为图形图元并处理图元。
当输出为 PDF 时,图元将重新组合成一个新的 PDF 文件。此过程的目标是新 PDF 文件的视觉外观应与原始文件相匹配。它不是同一个 PDF 文件,其内部结构可能完全不同。
最后,您打算如何处理图像?你会逐字节地处理这些颜色吗?还是您打算忽略它们?阴影也是如此,颜色甚至不直接出现在 PDF 文件中,而是从函数中生成的。
在不知道你为什么要这样做的情况下,我什至无法提供其他方法;解压PDF文件,阅读并手动替换颜色。