尝试在.bat文件中使用GhostScript 9.06 64bit合并目录中的所有pdf
以下,make merged.pdf,但它是1页空白
call gswin64c -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=merged.pdf *.pdf
如果我实际指定合并哪些PDF,它可以正常工作。是什么给了什么?
call gswin64c -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=merged.pdf 1.pdf 2.pdf 3.pdf
答案 0 :(得分:2)
您不能在Ghostscript命令行上指定通配符,就像那样简单。
由于GS没有找到名为'* .pdf'的文件,因此它没有执行任何标记操作,在这种情况下,您会得到一个空白文件。
答案 1 :(得分:1)
Ghostscript本身不能进行通配符扩展。
如果你从可以进行通配符扩展的shell中调用gs ... *.pdf
,它仍然可以工作。
您链接的网站与您上面使用的代码存在差异:
您的代码是DOS批处理并使用call gswin64c ...
。但正如所说,Ghostscript不能扩展通配符本身。
链接网页中的代码是Unix shell,它在 Ghostscript看到自己的命令行之前执行通配符扩展。当Ghostscript看到它时,已经发生了通配符扩展。
您必须找到批处理文件的解决方案,首先将(扩展的)* .pdf文件名存储在变量%mypdfs%
中,然后执行call gswin64c ... %mypdfs%
。
答案 2 :(得分:1)
您无法从命令行指定通配符,但可以使gswin32c
运行命令文件。
作为'命令文件'只需要将开关分隔开任意数量的空白区域(空格,制表符,换行符),并且文件大小没有限制,我们可以创建一个满足您需要的文件
echo -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=merged.pdf > files.gsx
dir *.pdf /b >> files.gsx
创建此文件 files.gsx 后,您可以使用
创建文件gswin32c @ files.gsx
将合并所有文件
答案 3 :(得分:1)
我做了以下事情来解决这个问题:
1。)dir /B *.pdf > do.bat
2。)用记事本打开do.bat
,用空格替换\r\n
3。)插入:c:\Programs\gs\gs9.07\bin\gswin64 -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=merged.pdf
在开头
然后执行do.bat
瞧