linux - 从 linux 命令行将 PDF 转换为 GRAYSCALE 格式以供打印机使用

标签 linux pdf printing command-line grayscale

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

我在 linux 命令行中使用 ghostscript。

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

    pdftops -level3sep 输入.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 并将它们计为彩色页面,而不是灰度页面。

如果我用这个脚本检查每个页面,它会返回所有页面也是 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 阅读器时我遇到了这个问题,而使用原始的 Adob​​e Reader 插件(通过 chrome 扩展在 chrome 上覆盖)我能够以灰度正确打印并让打印机识别格式。

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

关于linux - 从 linux 命令行将 PDF 转换为 GRAYSCALE 格式以供打印机使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28322062/

相关文章:

pdf - 将 PDF 转换为干净的 SVG?

java - 在 PDFClown 的 StaticNote 中更改字体颜色

shell - 如何在CMake中打印shell脚本的结果?

python - pyqt打印预览QTableView

jquery - 在某些页面上 IE 中的 iframe 访问被拒绝

linux - 加密 FTP 目录以确保文档安全

linux - 查找Linux日志文件中两行日期之间的差异

linux - 使用重命名重命名具有日期模式的多个文件

c# - 多页 PDF 在 iPad 上无法打开

代码崩溃并出现错误段错误(核心转储)