首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将PDF转换为PNG

将PDF转换为PNG
EN

Stack Overflow用户
提问于 2009-03-17 08:18:52
回答 11查看 118.3K关注 0票数 86

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

代码语言:javascript
复制
convert cover.pdf cover.png

这是可行的,但不幸的是,cover.png没有正确呈现( PDF中的一些alpha对象没有正确呈现)。我知道ImageMagick使用GhostScript进行转换,如果我直接使用gs进行转换,我可以得到想要的结果,但我更喜欢使用convert库,因为它有其他我想要利用的工具。

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

代码语言:javascript
复制
gs -sDEVICE=pngalpha -sOutputFile=cover.png -r144 cover.pdf

我想知道有什么方法可以通过convert to GhostScript传递参数,还是只能直接调用GhostScript?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2010-08-01 04:14:03

如果第一个命令可以将其输出写入标准输出,并且第二个命令可以从标准输入中读取其输入,则可以将一个命令行与通过管道连接的两个命令(gsconvert)一起使用。

  1. 幸运的是,gs可以写入标准输出(... -o %stdout ...)。幸运的是,convert可以从标准输入(convert -background transparent - output.png).

中读取

问题已解决:

  • GS用于alpha通道处理特殊图像,
  • convert用于创建透明背景,
  • 管道用于避免写出磁盘上的临时文件。

完整解决方案:

代码语言:javascript
复制
gs -sDEVICE=pngalpha       \
   -o %stdout              \
   -r144 cover.pdf         \
   |                       \
convert                    \
   -background transparent \
   -                       \
    cover.png

更新

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

代码语言:javascript
复制
gs -sDEVICE=pngalpha -o file-%03d.png -r144 cover.pdf

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

或者,如果您想保持透明的背景,对于100页的PDF,请这样做

代码语言:javascript
复制
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
票数 73
EN

Stack Overflow用户

发布于 2013-03-19 02:59:31

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

这是我使用的命令:

代码语言:javascript
复制
inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"

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

代码语言:javascript
复制
#!/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."
票数 33
EN

Stack Overflow用户

发布于 2015-11-05 01:52:11

要将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

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

每个选项的含义:

  • sDEVICE={jpeg,pngalpha,font ...}- stdout)
  • -dTextAlphaBits=4
  • -o-输出文件(%stdout to stdout)
  • -dTextAlphaBits=4-
  • -o- 300 dpi
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/653380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档