pdf - Ghostscript 将 PDF 2 转换回 PDF 版本 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。“文件”命令确实给出了预期的输出“PDF 文档,版本 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 附带的某些实用程序确实使用 -sFileName 确实(并且可能是您混淆的根源),但 Ghostscript 本身却没有,它只是使用该名称定义了一个 PostScript 变量,以便程序可以读取它。
因为您已指定BATCH
and NOPROMPT
,但尚未指定输入文件,解释器将启动,将当前页面擦除为白色,然后退出。关闭 pdfwrite 设备会导致它写出页面的当前内容,也就是白色,导致您的 PDF 文件为空。
上面稍微修改的命令行对我来说效果很好,但正如我在评论中指出的那样,指定 DEVICEWIDTHPOINTS 和 DEVICEHEIGHTPOINTS 实际上不会做任何事情。
推荐阅读
- python - 海龟背景变化 {python}
- python - 分数计算时间过长:避免循环 - python
- python - 在python中将网络抓取的html多边形坐标转换为纬度/经度
- c - X11 DefaultRootWindow Segfault 仅当程序由 Systemctl 运行时
- c# - 了解使用流利的 api 禁用级联删除
- powershell - 在 Foreach 循环中触发日志写入?
- neo4j - 如何在 Java Driver for Neo4J 中将 DateTime 值作为参数传递?
- json - 在 vb.net、js 或 pythom 中发出响应 json 字符串的 get 请求
- javascript - MutationObserver - 检测 div 孩子的变化
- javascript - 如何更改表单错误消息文本颜色?