如何用 Ghostscript 输出文件名中紧跟 %d 的数字、字母或空格?
2024-03-21 20:32:15
如何在 Ghostscript 输出文件名中将数字、字母或空格紧随 %d
问题
当使用 Ghostscript 10.02.1(2023 年 11 月 1 日)在 Windows 10 上生成输出文件名时,如果你在 %d
后面紧跟十六进制数字、空格或连字符,就会出现问题。例如:
gs -sDEVICE=jpeg -o "%d0.jpeg" -dFirstPage=1 -dLastPage=1 'test file.pdf'
以上命令将导致以下错误消息:
第 1 页 GPL Ghostscript 10.02.1:**** 无法打开文件 '1-.jpeg'。**** 错误:页面绘制错误发生。无法绘制此页,该页将在输出中丢失。
解决方法
然而,如果你将 %d
后面紧跟的符号更改为非十六进制数字、空格或连字符,则可以正常工作。例如:
gs -sDEVICE=jpeg -o "%dG.jpeg" -dFirstPage=1 -dLastPage=1 'test file.pdf'
原因分析
这种奇怪的行为似乎与 Ghostscript 对 %d
格式说明符的处理方式有关。根据官方文档,%d
类似于 C printf
格式,其格式规范应遵循 C 的规范。
在 C 中,%d
用于打印十进制整数。十六进制数字、空格和连字符通常不视为有效整数,因此 Ghostscript 将其视为语法错误。
解决建议
如果你需要在输出文件名中将数字、字母或空格紧随 %d
,可以使用以下变通方法:
- 使用
%dp
,其中p
可以是任何非十六进制数字、空格或连字符,例如:%dp foo.jpeg
- 将
%d
与文本字符串组合,例如:%d - foo.jpeg
结论
了解 Ghostscript 在处理 %d
格式说明符时的特殊行为非常重要,尤其是在生成输出文件名时。通过采用适当的变通方法,你可以避免错误并获得所需的文件名。
常见问题解答
1. 为什么会发生这样的问题?
Ghostscript 对 %d
格式说明符的处理方式与 C printf
的规范有关,后者不将十六进制数字、空格和连字符视为有效整数。
2. 有没有办法修复这个问题?
目前没有直接解决此问题的补丁或更新。不过,你可以使用上面概述的变通方法。
3. 如果我需要使用十六进制数字、空格或连字符作为文件名的一部分,该怎么办?
你可以将 %d
与文本字符串组合,例如:%d - foo.jpeg
4. 我在使用 Ghostscript 时遇到了其他问题,如何获得帮助?
你可以查看 Ghostscript 官方文档,加入 Ghostscript 用户论坛或向社区寻求帮助。
5. Ghostscript 的未来版本是否会解决这个问题?
无法确定未来版本的 Ghostscript 是否会解决这个问题。不过,你可以关注 Ghostscript 的发行说明和变更日志,了解有关新功能和修复的最新信息。