【发布时间】:2015-04-19 15:02:37
【问题描述】:
我运行以下命令在 ImageMagick 中拆分 PDF:
转换文件.pdf[5-10] 文件.png
生成的输出文件始终以零开头。那就是:
文件-0.png、文件-1.png、文件-2.png...
任何想法我可能做错了什么?文档指出文件的后缀应从 5 开始,与提取的页面的页码相匹配。
【问题讨论】:
标签: pdf imagemagick range ghostscript
我运行以下命令在 ImageMagick 中拆分 PDF:
转换文件.pdf[5-10] 文件.png
生成的输出文件始终以零开头。那就是:
文件-0.png、文件-1.png、文件-2.png...
任何想法我可能做错了什么?文档指出文件的后缀应从 5 开始,与提取的页面的页码相匹配。
【问题讨论】:
标签: pdf imagemagick range ghostscript
我最终通过使用-scene # 命令行参数解决了这个问题。
这会导致输出从所需的索引开始。为后代:
convert file.pdf -scene 5 file-%d.png
【讨论】:
您会看到您描述的结果,因为 ImageMagick 的多页图像格式的页数是从零开始:第 1 页的索引为 0,第 2 页的索引为有索引1等
此外,ImageMagick 本身无法处理 PDF 输入文件:它使用 Ghostscript 作为其 'delegate' -- 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 使用 Ghostscript 命令来处理 PDF 输入:
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)(而不是 all页),这是要使用的命令:
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
【讨论】: