Ghostscript:如何在 Windows 上将 PDF 与通配符合并
Posted
技术标签:
【中文标题】Ghostscript:如何在 Windows 上将 PDF 与通配符合并【英文标题】:Ghostscript: how to merge PDFs with wild card on Windows 【发布时间】:2012-09-23 08:29:03 【问题描述】:我正在尝试合并目录中的所有 *.pdf :
gswin64c -q -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=Total_Files.pdf -dBATCH *.pdf
这在 Linux 上非常适合我,但是当我在 Windows 上运行它时
我收到**Error: /undefinedfilename in *.pdf.**
。
请有人帮我解决这个问题。
【问题讨论】:
【参考方案1】:之前有一个关于这个话题的问题,答案是一样的,Ghostscript 不允许在输入文件名中使用通配符,你必须指定你想要的每个文件作为输入。
为什么它可以在 Linux 上运行?因为您使用的 shell 将“*.ps”扩展为文件的完整列表在将命令行传递给 Ghostscript。
要在 Windows 中执行此操作,您需要执行 shell 脚本,将文件名通过管道传输到文件,然后将文件作为参数提供给 GS。
EG,类似
for %s in (*.ps) do ECHO %s >> filename.lst
gswin64c.... @filename.lst
【讨论】:
感谢您的回答。我已经尝试过这个解决方案并且它有效。 唯一的问题 filename.lst 未排序。它对文件名进行排序,如 varchar 1、10、11、2、20 等。 您先生,2021 年您仍然是救命稻草。谢谢!【参考方案2】:(我的问题几乎完全相同)。我的解决方案(在以前的答案的帮助下)稍微更好地回答了原始问题(下面是一个实际的 MS-DOS 示例)
del filename.lst
for %%s in (C:\somefolder\some?wildcards*.pdf) do ECHO %%s >> filename.lst
gswin64c.... @filename.lst
解释一下;
'>>' 表示在 MS-DOS 中追加 - 所以首先我们删除文件 filename.lst
我读到(刚刚在其他地方)MS-DOS 批处理文件中的%%s
有效(而不是%s
)。显然 - 有一天文件名可能包含空格(就像我的那样),所以最好安全并引用文件名。所以更好的批处理文件是;
del filename.lst
for %%s in (C:\somefolder\some?wildcards*.pdf) do ECHO "%%s" >> filename.lst
gswin64c.... @filename.lst
现在我只是用它来输入许多 EPS 文件 - 但许多 PDF 文件也可以正常工作;就像上面的例子一样——我实际上用这两种方法测试了它——我的结果是一个包含许多 EPS 文件的 PDF——以及一个 PDF 中多个 PDF 文件的许多页面(根据问题)。
【讨论】:
【参考方案3】:作为 for 循环的替代方法
dir /b /o:n *.ps > filename.lst
完成工作(/b 仅获取文件,/o:n 按名称排序)。
为了彻底解决排序问题,你可以将前9个文件重命名为01->09,或者在记事本中打开输出文件,手动处理这几种情况。但如果您有超过 100 个文件,这可能会很麻烦。
很抱歉挑起这个一年前的帖子,它帮助我解决了我的问题,但我认为使用 'dir' 更容易、更灵活,并且不需要您在开始之前删除文件列表。
【讨论】:
以上是关于Ghostscript:如何在 Windows 上将 PDF 与通配符合并的主要内容,如果未能解决你的问题,请参考以下文章
Ghostscript:如何在 Windows 上将 PDF 与通配符合并
如何在 Windows 中将 ghostscript DLL 库提供给 python?