ImageMagick拆分PDF输出文件名始终从零开始

时间:2015-02-18 14:53:10

标签: pdf imagemagick range ghostscript

我运行以下命令在ImageMagick中分割PDF:

  

convert file.pdf [5-10] file.png

结果输出文件始终以零开头。那就是:

  

file-0.png,file-1.png,file-2.png ...

任何想法我可能做错了什么?文档说明文件应该从5开始加后缀,与提取的页面的页码相匹配。

2 个答案:

答案 0 :(得分:5)

我最终使用-scene #命令行参数解决了这个问题。

这会导致输出从所需的索引开始。后人:

convert file.pdf -scene 5 file-%d.png

答案 1 :(得分:2)

您会看到您描述的结果,因为ImageMagick的多页图像格式的页数是 从零开始 :Page 1将具有索引0,页面2将具有索引1

此外,ImageMagick无法自行处理PDF输入文件:它使用 Ghostscript 作为'委托' - Ghostscript首先使用PDF并为每个PDF发出光栅文件页。然后,ImageMagick只处理这些光栅文件。

根据您的确切ImageMagick版本和IM设置,这可能会导致间接PNG输出生成,转换链可能如下所示:

PDF --> PPM (portable pixmap) --> PNG
     ^                         ^
     |                         |
     |                         +-- (handled by ImageMagick)
     +-- (handled by Ghostscript)

如果你运气不好,结果会很慢,质量可能不会那么好。

要验证convert a.pdf a.png命令中到底发生了什么,您可以添加-verbose参数。这将显示IM用于处理PDF输入的Ghostscript命令:

convert -verbose a.pdf a.png

 /var/tmp/magick-15951W3TZ3WRpwIUk1 PNG 612x792 612x792+0+0 8-bit sRGB 3.73KB 0.000u 0:00.000
 a.pdf PDF 612x792 612x792+0+0 16-bit sRGB 3.73KB 0.000u 0:00.000
 a.pdf=>a.png PDF 612x792 612x792+0+0 8-bit sRGB 2c 2.95KB 0.000u 0:00.000

 [ghostscript library] -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT \
   -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pngalpha" \
   -dTextAlphaBits=4 -dGraphicsAlphaBits=4 "-r72x72" \
  "-sOutputFile=/var/tmp/magick-15951W3TZ3WRpwIUk%d" \
  "-f/var/tmp/magick-15951nJD8-fF8kA7j" \
  "-f/var/tmp/magick-15951JTZDMwtEswHn"

(正如您所看到的,我的 IM安装​​设置为进行PDF-> PNG转换而无需通过PPM绕行...您的里程可能会有所不同。)

直接使用Ghostscript时,您可能会获得更好的结果,而不是运行IM convert命令。 (如果ImageMagick完全适用于PDF-> PNG转换,那么您肯定会安装Ghostscript。)所以你可以试试这个:

gs                  \
 -o file-%03d.png   \
 -sDEVICE=pngalpha  \
  file.pdf

-%03d文件名后缀将导致Ghostscript输出file-001.pngfile-002.pngfile-003.png

但是,如果你运气不好并且安装了较旧版本的Ghostscript,那么文件名也会以file-000一个...

开头。

在任何情况下,由于您的示例命令似乎建议您只想从PDF文件转换页面范围(5--10)(而不是所有页面),这是使用的命令:

gs                  \
 -o file-%03d.png   \
 -sDEVICE=pngalpha  \
 -dFirstPage=5      \
 -dLastPage=10      \
  file.pdf

但坏消息是: Ghostscript将 STILL 开始将输出文件命名为file-001.png(第5页) ...... file-005.png(第10页)。

要解决这个问题,你必须为前4页生成PNG,然后再删除它们:

gs                  \
 -o file-%03d.png   \
 -sDEVICE=pngalpha  \
 -dFirstPage=1      \
 -dLastPage=10      \
  file.pdf

rm -rf file-00{1,2,3,4}.png