当前位置:  开发笔记 > 编程语言 > 正文

将PDF转换为PNG

如何解决《将PDF转换为PNG》经验,为你挑选了5个好方法。

我正在尝试将PDF转换为PNG图像(至少是一个封面).我用pdftk成功地提取了PDF的第一页.我正在使用imagemagick进行转换:

convert cover.pdf cover.png

这很有效,但不幸的是,cover.png通过错误渲染(PDF中的某些alpha对象无法正确呈现).我知道ImageMagick使用GhostScript进行转换,如果我直接使用gs我可以得到所需的结果,但我宁愿使用转换库,因为它有其他我想要利用的工具.

GhostScript中的此命令可完成所需的图像:

gs -sDEVICE=pngalpha -sOutputFile=cover.png -r144 cover.pdf

我想知道有没有办法通过转换为GhostScript传递参数,还是我坚持直接调用GhostScript?



1> Kurt Pfeifle..:

如果第一个命令可以将其输出写入stdout,并且第二个命令可以从stdin读取其输入,则可以使用一个命令行和两个通过管道连接的命令(gs,convert).

    幸运的是,gs可以写入stdout(... -o %stdout ...).

    幸运的是,转换可以从stdin(convert -background transparent - output.png)读取.

问题解决了:

GS用于处理特殊图像的alpha通道,

转换用于创建透明背景,

用于避免在磁盘上写出临时文件的管道.

完整解决方案

gs -sDEVICE=pngalpha       \
   -o %stdout              \
   -r144 cover.pdf         \
   |                       \
convert                    \
   -background transparent \
   -                       \
    cover.png

更新

如果您希望每个PDF页面都有一个单独的PNG,则可以使用以下%d语法:

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

这将创建名为page-000.png,, page-001.png...的PNG文件(请注意,%d-counting从零开始 - file-000.png对应于PDF的第1 001页,第2页...

或者,如果您想保持透明背景,对于100页PDF,请执行此操作

for i in {1..100}; do        \
                             \
  gs -sDEVICE=pngalpha       \
     -dFirstPage="${i}"      \
     -dLastPage="${i}"       \
     -o %stdout              \
     -r144 input.pdf         \
     |                       \
  convert                    \
     -background transparent \
     -                       \
      page-${i}.png ;        \
                             \
done


这只适用于我,如果我将`-dBATCH -dNOPAUSE -dQUIET`添加到gs选项中.

2> Glutanimate..:

在所有可用的替代方案中,我发现Inkscape在将PDF转换为PNG时可以产生最准确的结果.特别是当源文件具有透明层时,Inkscape在Imagemagick和其他工具失败的地方取得了成功.

这是我使用的命令:

inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"

在这里它是在脚本中实现的:

#!/bin/bash

while [ $# -gt 0 ]; do

pdf=$1
echo "Converting "$pdf" ..."
pngfile=`echo "$pdf" | sed 's/\.\w*$/.png/'`
inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"
echo "Converted to "$pngfile""
shift

done

echo "All jobs done. Exiting."



3> yanpas..:

要将pdf转换为图像文件,请使用以下命令:

对于PNG gs -sDEVICE=png16m -dTextAlphaBits=4 -r300 -o a.png a.pdf

对于JPG gs -sDEVICE=jpeg -dTextAlphaBits=4 -r300 -o a.jpg a.pdf

如果您有多个页面添加到名称%03d gs -o a%03d.jpg a.pdf

每个选项的含义:

sDEVICE = {jpeg,pngalpha,png16m ...} - filetype

-o - 输出文件(%stdout到stdout)

-dTextAlphaBits = 4 - 字体抗锯齿.

-r300 - 300 dpi



4> turdus-merul..:

也可以使用poppler-utils包中包含的命令行实用程序:

sudo apt-get install poppler-utils
pdftoppm --help
pdftocairo --help

例:

pdftocairo -png mypage.pdf mypage.png



5> Raffael..:

无法获得公认的答案。然后发现实际上该解决方案无论如何都要简单得多,因为Ghostscript不仅本地支持PNG,而且甚至支持多种不同的“编码”:

png256

png16

pnggray

pngmono

...

对我有用的shell命令是:

gs -dNOPAUSE -q -sDEVICE=pnggray -r500 -dBATCH -dFirstPage=2 -dLastPage=2 -sOutputFile=test.png test.pdf

它将使用pnggray编码和500 DPI 将test.pdf的第2页保存到test.png 。

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有