我试图将一个PDF文档转换为灰度,因为我需要打印机识别每一页是否含有颜色。
我在linux命令行上使用ghostscript。
我将PDF转换为PS,以检索所有信息。
pdftops -level3sep input.pdf
它生成了一个.ps文件:input.ps
我再次将这个PS文件转换为PDF,用ghostscript将其转换为灰阶。
gs -o output.pdf -sDEVICE=pdfwrite -dColorConversionStrategy=/Gray -dProcessColorModel=/DeviceGray input.ps
该命令生成了一个PDF文件。
当我打开最后这个文件时,我看到所有的页面都是灰度的。测试彩色页面的命令说,这些页面也是灰阶的。
gs -o - -sDEVICE=inkcov output.pdf
对于每一页,它都向我返回CMYK值。
Page 1
0.00000 0.00000 0.00000 0.92538 CMYK OK
Page 2
0.00000 0.00000 0.00000 0.06737 CMYK OK
Page 3
0.00000 0.00000 0.00000 0.63738 CMYK OK
Page 4
0.00000 0.00000 0.00000 0.75010 CMYK OK
and so on... CMYK: 0,0,0,[something] -> each page is in grayscale.
但当我去打印文件时,打印机将每一页都识别为sRGB,并将它们算作彩色页,而不是灰度页。
如果我用这个脚本检查每一页,它也会返回给我所有的页面都是sRGB。
#!/bin/bash
FILE=$1
PAGES=$(pdfinfo ${FILE} | grep 'Pages:' | sed 's/Pages:\s*//')
GRAYPAGES=""
COLORPAGES=""
DOUBLECOLORPAGES=""
echo "Pages: $PAGES"
while (test "$N" -le "$PAGES")
COLORSPACE=$( identify -format "%[colorspace]" "$FILE[$((N-1))]" )
echo "$N: $COLORSPACE"
if [[ $COLORSPACE == "Gray" ]]
GRAYPAGES="$GRAYPAGES $N"
COLORPAGES="$COLORPAGES $N"
# For double sided documents also list the page on the other side of the sheet:
if [[ $((N%2)) -eq 1 ]]
DOUBLECOLORPAGES="$DOUBLECOLORPAGES $N $((N+1))"
#N=$((N+1))
DOUBLECOLORPAGES="$DOUBLECOLORPAGES $((N-1)) $N"
N=$((N+1))
echo $DOUBLECOLORPAGES
echo $COLORPAGES
echo $GRAYPAGES
The result is:
andrea@release:~/fotocopia$ ./script.sh output.pdf
Pages: 4
1: sRGB
2: sRGB
3: sRGB
4: sRGB
1 2 1 2 3 4 3 4
1 2 3 4
那么问题来了:我怎样才能让打印机(而不是脚本)将页面识别为灰度?有没有一种方法可以通过linux命令行让我做到这一点?