【问题标题】:How to retain unprocessed pages in PDF while running Ghostscript processing?如何在运行 Ghostscript 处理时保留 PDF 中未处理的页面?
【发布时间】:2020-03-14 11:43:27
【问题描述】:

我正在运行一个 gs 脚本,它将 PDF 页面范围转换为灰度。完成后,它会通过删除 -sPageList 参数中未给出的页面来生成一个输出文件。

gs 是否可以选择保留未处理的页面?我已经阅读了在线文档,但找不到答案。 man gs 也没有帮助。

脚本

#!/bin/bash

gs \
 -sOutputFile=output.pdf \
 -sDEVICE=pdfwrite \
 -sColorConversionStrategy=Gray \
 -sPageList=1-37,39-42,44,45,47-60,63-67,69-71,73-80,82,85-116,119,122-142,145-147,149-199,201-215,218,220,221,225,227-232,235,237,240- \
 -dProcessColorModel=/DeviceGray \
 -dCompatibilityLevel=1.4 \
 -dNOPAUSE \
 -dBATCH \
 $1

【问题讨论】:

    标签: pdf pdf-generation ghostscript


    【解决方案1】:

    没有。

    pdfwrite 设备的工作方式在here 中进行了描述,如果您处理来自输入的页面,那么它会到达输出,如果您不处理来自输入的页面,那么它不会到达输出。所有选项都应用于所有输入页面。

    因此,您不能选择仅将某些页面转换为灰色而保持其他页面不变,这正是我认为您实际要求的。

    您可以每页生成一个灰色 PDF 文件,然后使用类似的方法在未修改的输出的每页生成一个 PDF 文件。然后,您可以创建一个脚本,按您想要的顺序处理每个单独的 PDF 文件,以创建一个所有页面都按正确顺序排列的最终 PDF 文件。

    这是一个简化的示例,考虑一个 4 页文件,我们希望保留第 3 页不变并使其他页面变灰:

    首先处理所有的灰色页面:

    gs \
     -sOutputFile=gray/output%d.pdf \
     -sDEVICE=pdfwrite \
     -sColorConversionStrategy=Gray \
     -sPageList=1, 2, 4 \
     -dProcessColorModel=/DeviceGray \
     -dCompatibilityLevel=1.4 \
     -dNOPAUSE \
     -dBATCH \
     input.pdf
    

    然后生成所有其他页面:

    gs \
     -sOutputFile=original/output%d.pdf \
     -sDEVICE=pdfwrite \
     -sPageList=3
     -dNOPAUSE \
     -dBATCH \
     input.pdf
    

    然后最后将所有页面缝合回去:

    gs \
     -sOutputFile=output.pdf \
     -sDEVICE=pdfwrite \
     -dNOPAUSE \
     -dBATCH \
     gray/output1.pdf gray/output2.pdf original/output1.pdf gray/output3.pdf
    

    足够复杂(页数)的文件会超出 shell 的行长,在这种情况下,您可以查看 @file 语法,将整个命令行放入文件中并告诉 Ghostscript 使用文件内容用于命令行。

    不,您不能更改 %d 语法,以便设备使用页码写入输出文件,这不是编号的工作方式,它始终从 1 开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      • 1970-01-01
      • 2012-10-17
      相关资源
      最近更新 更多