PDFをPNG画像(少なくとも1つの表紙)に変換しようとしています。PDFの最初のページを正常に抽出していますpdftkを使用して、変換を行うためにimagemagickを使用しています。
convert cover.pdf cover.png
これは機能しますが、残念ながら、cover.pngは正しくレンダリングされません(PDFのアルファオブジェクトの一部は適切にレンダリングされません)。ImageMagickはGhostScriptを使用して変換を行い、 gsを使用して直接実行すると、目的の結果を得ることができますが、活用したい他のツールがあるので、変換ライブラリを使用したいです。
GhostScriptのこのコマンドは、目的のイメージを実現します。
gs -sDEVICE=pngalpha -sOutputFile=cover.png -r144 cover.pdf
変換を介してGhostScriptに引数を渡す方法はありますか、GhostScriptを直接呼び出すことに固執していますか?
最初のコマンドがその出力をstdoutに書き込むことができ、2番目のコマンドがstdinから入力を読み取ることができる場合、パイプを介して接続された2つのコマンド(gs
、convert
)で1つのコマンドラインを使用できます。
... -o %stdout ...
)に書き込むことができます。convert -background transparent - output.png
)から読み取ることができます。問題が解決しました:
完全なソリューション:
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
使用可能なすべての選択肢の中から、PDFをPNGに変換するときにInkscapeが最も正確な結果を生成することがわかりました。特にソースファイルに透明なレイヤーがある場合、Imagemagickやその他のツールが失敗した場所でInkscapeは成功しました。
これは私が使用するコマンドです:
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."
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
複数のページを名前に追加する場合%03dgs -o a%03d.jpg a.pdf
各オプションの意味:
poppler-utils
パッケージに含まれるコマンドラインユーティリティも使用できます。
Sudo apt-get install poppler-utils
pdftoppm --help
pdftocairo --help
例:
pdftocairo -png mypage.pdf mypage.png
受け入れられた答えを得ることができませんでした。次に、実際にはGhostscriptがPNGをネイティブでサポートするだけでなく、 複数の異なる「エンコーディング」 であるため、実際にはソリューションがはるかに簡単であることがわかりました。
png256
png16
pnggray
pngmono
私のために働くシェルコマンドは次のとおりです。
gs -dNOPAUSE -q -sDEVICE=pnggray -r500 -dBATCH -dFirstPage=2 -dLastPage=2 -sOutputFile=test.png test.pdf
pnggray
エンコーディングと500 DPIを使用して、test.pdfのページ2をtest.pngに保存します。
彼のスレッドが古いと思っても、ソリューションを追加します。とにかくこれは誰かを助けるでしょう。
まず、PDFを生成する必要があります。そのために XeLaTeX を使用します。
xelatex test.tex
ここで、 ImageMagick および GraphicMagic は両方ともパラメーターを左から右に解析するため、左端のパラメーターが最初に実行されます。最適な処理のためにこのシーケンスを使用することになりました:
gm convert -trim -transparent white -background transparent -density 1200x1200 -resize 25% test.pdf test.png
透明な背景に素敵なグラフィックを与え、実際にページ上にあるものにトリミングします。 -density
および-resize
パラメータ、より良い粒度を与え、全体的な解像度を上げます。
密度を下げることができるかどうかを確認することをお勧めします。変換時間を短縮します。
PDF ImageMagickが不正確な色を与えていたため、GraphicsMagickがより良い仕事をしたことがわかりました。
$ gm convert -quality 100 -thumbnail x300 -flatten journal.pdf\[0\] cover.jpg
このページには、私が言及する代替ツールもリストされているので、xpdfLinux/Windows/Mac用にコンパイルされたコマンドラインツールが用意されています。透明性をサポートします。 本当にとんでもない価格設定があるGhostscriptとは対照的に、商用利用は無料です。
巨大なPDFファイルでのテストでは、Ghostscriptより7.5%高速でした。
(PDFテキストおよびHTMLコンバーターへ)
私のソリューションは、はるかにシンプルで、より直接的です。少なくとも私のPCでは次のように動作します(次の仕様を使用):
me@home: my.folder$ uname -a
Linux home 3.2.0-54-generic-pae #82-Ubuntu SMP Tue Sep 10 20:29:22 UTC 2013 i686 i686 i386 GNU/Linux
と
me@home: my.folder$ convert --version
Version: ImageMagick 6.6.9-7 2012-08-17 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features: OpenMP
だから、ここで私は私のfile.pdf
:
me@home: my.folder$ convert -density 300 -quality 100 file.pdf file.png
単一のページを抽出してみてください。
$ page = 4
gs -sDEVICE=pngalpha -dFirstPage="$page" -dLastPage="$page" -o thumb.png -r144 input.pdf
PDFの最初のページを他のツールで分離することなく、ImageMagickを使用できます。
convert -density 288 cover.pdf[0] -resize 25% cover.png
ここで、名目密度を400%(72 * 4 = 288)増やし、その後1/4(25%)にサイズ変更します。これにより、生成されるPNGの品質が大幅に向上します。
ただし、PDFがCMYKの場合、PNGはそれをサポートしません。Ghostscriptはアルファ付きのCMYKを処理できないため、特に透明性がある場合は、sRGBに変換する必要があります。
convert -density 288 -colorspace sRGB -resize 25% cover.pdf[0] cover.png