从 linux 命令行将 PDF 转换为适用于打印机的 GRAYSCALE 格式

Convert PDF to GRAYSCALE format for printer from linux command line

我正在尝试将 PDF 文档转换为灰度,因为我需要打印机识别每个页面是否包含颜色。

我在 linux 命令行中使用 ghostscript。

  1. 我将 PDF 转换为 PS 以获取所有信息:

    pdftops -level3sep input.pdf

它生成一个 .ps 文件:input.ps

  1. 我再次将这个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并将它们计为彩页,而不是灰度页。

如果我用这个脚本检查每个页面,returns 我发现所有页面也是 sRGB:

#!/bin/bash

FILE=
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 命令行的方法可以让我做到这一点?

提前致谢

首先,inkcov 设备总是 returns CMYK 值,而不管输入的颜色 space。所以它 returns K 通道值是正确的。

几乎不可能猜出为什么您的打印机或脚本在没有看到 PDF 文件的情况下认为页面是 sRGB。

您不应该双重转换 PDF 文件,那样更容易引入问题!你没有说你正在用 grep 提取什么样的信息,但它可能直接从 PDF 文件中可用。如果您想要灰度 PDF,则只需将原始 PDF 转换为新 PDF。

你也没有说你用什么版本的 Ghostscript 来做这个转换,我好像记得 9.15 中有一个错误可能有这个效果。您可能需要考虑查看当前代码。

我忘记了 post 解决方案。真的很抱歉。

问题与 GhostScript 的转换无关,而是与用于打开 PDF 文件的软件有关。

使用 Chrome 嵌入式 PDF reader 我遇到了这个问题,而使用原始的 Adob​​e Reader 插件(通过 chrome 扩展在 chrome 上被覆盖) 我能够以灰度正确打印并让打印机识别格式。

希望这对遇到同样问题的人有所帮助