我正在尝试将 PDF 文档转换为灰度,因为我需要打印机识别每个页面是否包含颜色。
我在 linux 命令行中使用 ghostscript。
我将 PDF 转换为 PS 以 grep 所有信息:
pdftops -level3sep 输入.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
等等... CMYK: 0,0,0,[something] -> 每个页面都是灰度的。
但是当我打印文档时,打印机将每一页识别为 sRGB 并将它们计为彩色页面,而不是灰度页面。
如果我用这个脚本检查每个页面,它会返回所有页面也是 sRGB:
#!/bin/bash
FILE=$1
PAGES=$(pdfinfo ${FILE} | grep 'Pages:' | sed 's/Pages:\s*//')
GRAYPAGES=""
COLORPAGES=""
DOUBLECOLORPAGES=""
echo "Pages: $PAGES"
N=1
while (test "$N" -le "$PAGES")
do
COLORSPACE=$( identify -format "%[colorspace]" "$FILE[$((N-1))]" )
echo "$N: $COLORSPACE"
if [[ $COLORSPACE == "Gray" ]]
then
GRAYPAGES="$GRAYPAGES $N"
else
COLORPAGES="$COLORPAGES $N"
# For double sided documents also list the page on the other side of the sheet:
if [[ $((N%2)) -eq 1 ]]
then
DOUBLECOLORPAGES="$DOUBLECOLORPAGES $N $((N+1))"
#N=$((N+1))
else
DOUBLECOLORPAGES="$DOUBLECOLORPAGES $((N-1)) $N"
fi
fi
N=$((N+1))
done
echo $DOUBLECOLORPAGES
echo $COLORPAGES
echo $GRAYPAGES
结果是:
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 命令行的方法允许我这样做?
提前致谢
最佳答案
我忘了发布解决方案。非常抱歉。
问题与 GhostScript 的转换无关,而是与用于打开 PDF 文件的软件有关。
使用 Chrome 嵌入式 PDF 阅读器时我遇到了这个问题,而使用原始的 Adobe Reader 插件(通过 chrome 扩展在 chrome 上覆盖)我能够以灰度正确打印并让打印机识别格式。
希望对遇到同样问题的人有所帮助
关于linux - 从 linux 命令行将 PDF 转换为 GRAYSCALE 格式以供打印机使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28322062/