返回

如何用 Ghostscript 输出文件名中紧跟 %d 的数字、字母或空格?

windows

如何在 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 的发行说明和变更日志,了解有关新功能和修复的最新信息。