Ghostscript 将 PDF 2 转换回 PDF 版本 1.7

问题描述 投票:0回答:1

我需要通过读取多个 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 文档,版本 1.7”,但当文件为空时,这并不是很好。非常感谢任何帮助!

pdf command-line-interface ghostscript
1个回答
4
投票

我认为问题在于你的命令行(正如我的一位同事向我指出的那样)。您已指定 -

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 变量,以便程序可以读取它。

因为您已指定

BATCH
NOPROMPT
,但未指定输入文件,所以解释器启动,将当前页面擦除为白色,然后退出。关闭 pdfwrite 设备会使其写出页面的当前内容,即白色的内容,从而生成空的 PDF 文件。

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

© www.soinside.com 2019 - 2024. All rights reserved.