2

尝试在 .bat 文件中使用 GhostScript 9.06 64bit 合并目录中的所有 pdf

以下,使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
4

4 回答 4

2

您不能在 Ghostscript 命令行上指定通配符,就这么简单。

由于 GS 没有找到名为“*.pdf”的文件,因此它没有执行任何标记操作,在这种情况下,您会得到一个空白文件。

于 2012-09-11T18:50:53.177 回答
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

于 2013-05-10T11:16:45.483 回答
1

您不能从命令行指定通配符,但您可以gswin32c运行命令文件。

由于“命令文件”只需要用任意数量的空格(空格、制表符、换行符)分隔开关,并且文件大小没有限制,我们可以制作一个满足您需要的文件

echo -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=merged.pdf > files.gsx
dir *.pdf /b >> files.gsx

创建此文件files.gsx后,您可以使用

gswin32c @files.gsx

所有文件将被合并

于 2012-09-12T17:45:07.327 回答
1

Ghostscript 本身不能进行通配符扩展。

如果您gs ... *.pdf从可以进行通配符扩展的外壳内部调用,它仍然可以工作。

您链接到的网站和您上面使用的代码有所不同:

  1. 您的代码是 DOS 批处理并使用call gswin64c .... 但如前所述,Ghostscript 本身不能扩展通配符。

  2. 链接网页中的代码是 Unix shell,它在Ghostscript 看到自己的命令行之前进行通配符扩展。当 Ghostscript 看到它时,通配符扩展已经发生了。

您必须为您的批处理文件找到一个解决方案,您首先将(扩展的)*.pdf 文件名存储在变量中%mypdfs%,然后执行call gswin64c ... %mypdfs%.

于 2012-09-12T12:25:07.530 回答