Ada*_*dam 76 pdf png image imagemagick ghostscript
我正在尝试将PDF转换为PNG图像(至少是一个封面).我用pdftk成功地提取了PDF的第一页.我正在使用imagemagick进行转换:
convert cover.pdf cover.png
Run Code Online (Sandbox Code Playgroud)
这很有效,但不幸的是,cover.png通过错误渲染(PDF中的某些alpha对象无法正确呈现).我知道ImageMagick使用GhostScript进行转换,如果我直接使用gs我可以得到所需的结果,但我宁愿使用转换库,因为它有其他我想要利用的工具.
GhostScript中的此命令可完成所需的图像:
gs -sDEVICE=pngalpha -sOutputFile=cover.png -r144 cover.pdf
Run Code Online (Sandbox Code Playgroud)
我想知道有没有办法通过转换为GhostScript传递参数,还是我坚持直接调用GhostScript?
Kur*_*fle 64
如果第一个命令可以将其输出写入stdout,并且第二个命令可以从stdin读取其输入,则可以使用一个命令行和两个通过管道连接的命令(gs,convert).
... -o %stdout ...).convert -background transparent - output.png)读取.问题解决了:
完整解决方案
gs -sDEVICE=pngalpha \
-o %stdout \
-r144 cover.pdf \
| \
convert \
-background transparent \
- \
cover.png
Run Code Online (Sandbox Code Playgroud)
如果您希望每个PDF页面都有一个单独的PNG,则可以使用以下%d语法:
gs -sDEVICE=pngalpha -o file-%03d.png -r144 cover.pdf
Run Code Online (Sandbox Code Playgroud)
这将创建名为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
Run Code Online (Sandbox Code Playgroud)
Glu*_*ate 27
在所有可用的替代方案中,我发现Inkscape在将PDF转换为PNG时可以产生最准确的结果.特别是当源文件具有透明层时,Inkscape在Imagemagick和其他工具失败的地方取得了成功.
这是我使用的命令:
inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"
Run Code Online (Sandbox Code Playgroud)
在这里它是在脚本中实现的:
#!/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."
Run Code Online (Sandbox Code Playgroud)
yan*_*pas 14
要将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
每个选项的含义:
也可以使用poppler-utils包中包含的命令行实用程序:
sudo apt-get install poppler-utils
pdftoppm --help
pdftocairo --help
Run Code Online (Sandbox Code Playgroud)
例:
pdftocairo -png mypage.pdf mypage.png
Run Code Online (Sandbox Code Playgroud)
无法获得公认的答案。然后发现实际上该解决方案无论如何都要简单得多,因为Ghostscript不仅本地支持PNG,而且甚至支持多种不同的“编码”:
png256png16pnggraypngmono对我有用的shell命令是:
gs -dNOPAUSE -q -sDEVICE=pnggray -r500 -dBATCH -dFirstPage=2 -dLastPage=2 -sOutputFile=test.png test.pdf
Run Code Online (Sandbox Code Playgroud)
它将使用pnggray编码和500 DPI 将test.pdf的第2页保存到test.png 。
| 归档时间: |
|
| 查看次数: |
92635 次 |
| 最近记录: |