如何仅使用黑色墨水以编程方式将PDF转换为灰度?

如何仅使用黑色墨水以编程方式将PDF转换为灰度?,pdf,ghostscript,grayscale,cmyk,Pdf,Ghostscript,Grayscale,Cmyk,我正在尝试使用Ghostscript来完成此操作: gs -sOutputFile=gray.pdf \ -sDEVICE=pdfwrite \ -sColorConversionStrategy=Gray \ -dProcessColorModel=/DeviceGray \ -dNOPAUSE -dBATCH \ -dAutoRotatePages=/None \

我正在尝试使用Ghostscript来完成此操作:

gs -sOutputFile=gray.pdf           \
   -sDEVICE=pdfwrite               \
   -sColorConversionStrategy=Gray  \
   -dProcessColorModel=/DeviceGray \
   -dNOPAUSE -dBATCH               \
   -dAutoRotatePages=/None         \
    color.pdf
但这不会导致只使用黑色墨水:

gs -q  -o - -sDEVICE=inkcov gray.pdf

 0.15365  0.15365  0.15365  0.09419 CMYK OK
我可以使用Adobe产品成功地进行转换,但我希望能够以更自动化的方式进行转换。

这主要是由于inkcov的工作方式

您的PDF文件包含一个带有DeviceRGB混合空间的透明组。请注意,这实际上并不创建任何RGB输出,它只是意味着任何混合的对象都必须在RGB空间中进行。因此,任何不在DeviceGB中的内容(例如所有灰色对象)必须首先转换为RGB,然后混合,然后转换为设备空间进行渲染

因为inkcov是CMYK设备,这意味着混合的RGB对象必须转换为CMYK。这会导致不太完美的黑色。事实上,PDF文件除了指定透明度的混合空间为RGB外,不包含任何内容,除了灰色规格

看看Acrobat似乎在做什么,似乎最简单的解决方案就是将透明度混合空间也更改为DeviceGray。我们从以前的经验中知道,在不同的空间中混合确实会导致渲染的差异。另一方面,改变所有颜色规格的颜色空间也是如此


如果有时间做更多的调查,我可能会在下一个版本中继续研究。

您使用的是什么版本的Ghostscript,在哪个平台上?它看起来像Linux,所以下一个问题是您是从我们的源代码中自己编译的,还是使用打包的版本?“color.pdf”的副本在哪里,以便我们检查该文件?我在Ubuntu和Mac OS X上都遇到了相同的问题,在这两种情况下都使用从package manager安装的ghostscript。在几个不同的文件中也会发生这种情况。下面是一个文件的示例:这是由于inkcov的工作方式。您的PDF文件包含一个带有DeviceRGB混合空间的透明组。请注意,这实际上并不创建任何RGB输出,它只是意味着任何混合的对象都必须在RGB空间中进行。因为inkcov是CMYK设备,这意味着混合的RGB对象必须转换为CMYK。这会导致不太完美的黑色。事实上,PDF文件除了指定透明度的混合空间为RGB外,不包含任何内容。我根本不清楚我们应该怎么做,这是我在下一版本中正在考虑的事情之一。我不确定我是否完全理解答案。你是说我已经成功地将PDF转换为只使用黑色墨水,但是我使用inkcov测试它是否只使用黑色墨水的方法是不正确的?如果是这样的话,我应该使用什么样的测试方法来测试黑色墨水?这取决于您认为的“转换”。文件中没有设备灰色的颜色规格,但是,文件使用透明度,透明度的混合空间保留为DeviceRGB。这意味着在该组中绘制的任何内容都将首先转换为RGB、混合,然后再转换回设备空间。因为inkcov是CMYK,这种转换会产生黑色以外的颜色。您不能“仅测试黑色墨水”,因为墨水的使用取决于输出设备。您只能查看PDF文件中的颜色值。