Ghostscript 将 PDF 2 转换回 PDF 版本 1.7

Ghostscript to convert PDF 2 Back to PDF version 1.7

我需要通过读取大量 PDF 并将每一页插入到新的多页 PDF 中来构建 PDF 服务器端。问题是 PDF 以 2.0 版格式提供,但我的应用程序只能读取 1.7 版。我想将版本 2 文件转换回版本 1.7 文件,以便我的应用程序可以读取它。

我正在使用 ghostscript 版本 9.27,并尝试了几个命令,但每次我都得到一个空的 PDF。示例:

/usr/local/bin/gs \
    -q -dNOPROMPT \
    -dBATCH \
    -dDEVICEWIDTH=595 \
    -dDEVICEHEIGHT=842 \
    -sDEVICE=pdfwrite \
    -dCompatibilityLevel=1.7 \
    -sFileName=pdf-version-2.pdf \
    -sOutputFile=fileout.pdf

没有错误,只是一个空的 PDF。 "file" 命令确实给出了预期的输出 "PDF document, version 1.7" 但当文件为空时这就不太好了。非常感谢任何帮助!

好的,所以我认为问题出在您的命令行(正如我的一位同事向我指出的那样)。您已指定 -sFileName=pdf-version-2.pdf,看起来您正试图指定输入文件。

没有 Ghostscript 开关 -sFileName,您只需在命令行输入文件名即可指定输入文件名。所以你真的想要:

/usr/local/bin/gs \
    -q -dNOPROMPT \
    -dBATCH \
    -dDEVICEWIDTH=595 \
    -dDEVICEHEIGHT=842 \
    -sDEVICE=pdfwrite \
    -dCompatibilityLevel=1.7 \
    -sOutputFile=fileout.pdf \
    pdf-version-2.pdf

出于 30 年前的良好原因,Ghostscript 命令行开关被复制到 PostScript 环境中,在那里它们可以被 PostScript 程序访问。因此,虽然 Ghostscript do 附带的一些实用程序确实使用了 -sFileName,但 Ghostscript 本身没有,它只是定义了一个 PostScript 变量,使用该名称,以便程序可以读取它。

因为您指定了 BATCHNOPROMPT,但没有指定输入文件,解释器启动,将当前页面擦除为白色,然后退出。关闭 pdfwrite 设备会导致它写出页面的当前内容,这是白色的,导致您的 PDF 文件为空。

上面稍微修改过的命令行对我来说效果很好,但正如我在评论中指出的那样,指定 DEVICEWIDTHPOINTS 和 DEVICEHEIGHTPOINTS 实际上不会做任何事情。