【问题标题】:ImageMagick Split PDF Output File Name Always Starts at ZeroImageMagick 拆分 PDF 输出文件名总是从零开始
【发布时间】:2015-04-19 15:02:37
【问题描述】:

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

转换文件.pdf[5-10] 文件.png

生成的输出文件始终以零开头。那就是:

文件-0.png、文件-1.png、文件-2.png...

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

【问题讨论】:

    标签: pdf imagemagick range ghostscript


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      您会看到您描述的结果,因为 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.pngfile-002.pngfile-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
      

      【讨论】:

      • 感谢您的信息。我最终通过使用 -scene # 命令解决了这个问题,这导致输出从所需的索引开始。为了后代:>convert file.pdf -scene 5 file-%d.png
      • @Csizzle:哦,谢谢 :-) -- 这对我来说是个新闻。不知道那个。我认为您应该将其添加为完整的答案。你甚至可以接受你自己的答案(我肯定也会投票赞成 :-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 2021-02-06
      相关资源
      最近更新 更多