使用Ghostscript将PDF转换为JPEG

10

我正在使用Ghostscript将我的PDF文件转换为JPEG图像,这个方法效果很好。

对于我的输出图像,我在文件名中使用%03d,因此文件名将根据页码变为001002等等。

但是有时候我希望数字从更高的数字开始。

例如,我处理一个包含两页的文件,所以输出的图像是page001.jpgpage002.jpg

现在我想处理另一个PDF文件,而不是替换那些文件,我想创建page003.jpgpage004.jpg

如何做到这一点?

这是我现在使用的完整命令行:

'C:\gs\gs9.14\bin \gswin64c -dNOPAUSE -sDEVICE=png16m \
  -sOutputFile=page-%03d.jpg -r100x100 -q' . $pdf_file. '-c quit'

为什么不创建一个批处理文件来输出文件TmpPage-001.jpg、TmpPage-002.jpg...,然后在下一行将这些文件重命名为系列中所需的下一个文件名呢?或者我假设您没有创建临时文件的奢侈条件,因此输出应直接从Ghostscript进行。 - protonx80
2个回答

8

以下是一种可用的解决方法:

gswin64c.exe                  ^
   -sDEVICE=png16m            ^
   -sOutputFile=page-%03d.jpg ^
   -r100x100                  ^
   -c "showpage showpage"     ^
   -f filename.pdf
-c "showpage showpage" 命令会在输出中插入两个空白页。输出文件将被命名为
page-001.jpg + page-002.jpg + page-003.jpg + page-004.jpg
因此,前两页是纯白色的JPEG图像,需要之后删除。您可以使用任意数量的空白页扩展此命令。

更新

当然,如果您事先知道要将多个不同的PDF文件转换为图像,并且希望从上一个PDF结束的地方继续计数,则可以执行以下操作:
gswin64c.exe                  ^
   -sDEVICE=jpeg              ^
   -sOutputFile=page-%03d.jpg ^
   -r100x100                  ^
   -f file1.pdf               ^
   -f file2.pdf               ^
   -f file3.pdf               ^
   -f [...]

顺便提一下,您原始的命令请求使用 .jpg 文件后缀名,而 GhostScript 设备是 png16m。这不匹配。最初我盲目地复制了您的命令,但现在我已经更正了它。


这并不符合我的需求,因为在处理第一个文件时,我不知道是否会有第二个文件需要处理,我稍后才会得到第二个文件,只有当它具有相同的ID时,它才需要继续第一个文件。目前我所做的(并不是很有效率)是当我得到第二个文件时,我将其与第一个文件合并,然后处理整个PDF以获取图像。 - Daniel Katzan
好的,也许我可以使用您的建议来转换第二个PDF,从几个空白页面开始,因此我需要在不同的文件夹中进行操作,然后只移动所需页面,也许有一个参数可以用来在相同的文件夹中创建图像,而不会覆盖任何已经存在的具有相同名称的文件?这样我就可以在同一个文件夹中完成操作,并且实际上不会创建空白页面。另外,您能否指向我所有可能参数的文档?我发现有关该命令的信息有点难找,谢谢。 - Daniel Katzan
@DanielKatzan:当前“head”/开发版本文档:通用使用PDF输出PostScript输出图像输出 - Kurt Pfeifle
@DanielKatzan:发布了9.15版本:常规用法PDF输出PostScript输出图像输出 - Kurt Pfeifle
如果PDF文件中的页面>1,则可以添加-dNOPAUSE参数以禁用交互提示。 - Nanang F. Rozi

0

你不能使用标准版Ghostscript完成这个操作,输出文件编号是按照发出的页面编号来设置的(因此如果你有一个10页的文件,带有/NumCopies 2,那么你会得到编号为0到19的文件)。

当然,你可以在同一条命令行上处理两个文件,我认为这将使第二个文件的页面编号从第一组结束的地方开始。

否则,你将不得不修改Ghostscript设备的源代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接