我运行以下命令在ImageMagick中分割PDF:
convert file.pdf [5-10] file.png
结果输出文件始终以零开头。那就是:
file-0.png,file-1.png,file-2.png ...
任何想法我可能做错了什么?文档说明文件应该从5开始加后缀,与提取的页面的页码相匹配。
答案 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.png
,file-002.png
,file-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