PDFをPNGに変換する


83

PDFをPNG画像(少なくとも1つの表紙)に変換しようとしています。pdftkでPDFの最初のページを正常に抽出しています。私はimagemagickを使用して変換を行っています:

convert cover.pdf cover.png

これは機能しますが、残念ながら、cover.pngが正しくレンダリングされません(PDFのアルファオブジェクトの一部が正しくレンダリングされません)。ImageMagickがGhostScriptを使用して変換を行うことは知っています。gsを使用して直接行うと、目的の結果を得ることができますが、他のツールを利用できるため、変換ライブラリを使用したいと思います。

GhostScriptのこのコマンドは、目的のイメージを実現します。

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

GhostScriptへの変換を介して引数を渡す方法はありますか、それともGhostScriptを直接呼び出すことに固執していますか?


2
GhostScriptを直接呼び出すことが問題になるのはなぜですか?
kquinn 2009年

それは本当に大したことではありません。同時にconvertを介して他のいくつかのパラメーターを実行したいので、すべてを1つのコマンドにまとめることができれば便利です。コードをよりクリーンで一貫性のあるものに保ちます。また、一時ファイルが1つ少なくなることも意味します。
アダム


gsの呼び出し方法とImageMagickの呼び出し方法の違いは何ですか?ImageMagickの上流に何かを報告する価値があるかもしれません(フォロワーへの注意、ghostscriptの更新も役立つ
かもしれませ

回答:


70

最初のコマンドが出力をstdoutに書き込むことができ、2番目のコマンドがstdinから入力を読み取ることができる場合は、パイプを介して接続された2つのコマンド(gsconvert)で1つのコマンドラインを使用できます。

  1. 幸い、gsはstdout(... -o %stdout ...)に書き込むことができます。
  2. 幸い、convertはstdin(convert -background transparent - output.png)から読み取ることができます。

問題が解決しました:

  • 特別な画像を処理するアルファチャネルに使用されるGS、
  • 透明な背景を作成するために使用される変換、
  • ディスクへの一時ファイルの書き込みを回避するために使用されるパイプ。

完全なソリューション:

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

これは、名前のPNGファイルを作成しますpage-000.pngpage-001.png、...(注こと%d-countingはゼロベース-file-000.png対応のPDFのページ1に、0012ページへ...

または、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

7
これは-dBATCH -dNOPAUSE -dQUIET、gsオプションに追加した場合にのみ機能します。
フォード2013年

@ford:つまり、古いバージョンのGhostscriptを使用しているということです。最近のバージョンでは可能であり-o output.file、これは自動的かつサイレントに同時に設定さ-dBATCH -dNOPAUSE -dQUIETれます。
Kurt Pfeifle 2014年

@ford:しかし、上記の回答の他の場所で深刻なタイプミスがありました。それにもかかわらず、なぜ22の賛成票を得たのだろうか:-)
Kurt Pfeifle 2014年

仕事は私のために見つけますが、複数ページのpdfをimage_1.png、image_2.pngに自動的に変換したいのですが...最初にpdfファイルから各ページを抽出する必要がありますか?
タラス2015年

わかりました、画像を分離しました。しかし、変換中の「変換」パラメータとして「-transparencewhite」が必要です。私はパイプでそれをすることができました、しかしなしで?
タラス2015年

29

利用可能なすべての選択肢の中で、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."

21

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 ...}-ファイルタイプ
  • -o-出力ファイル(%stdoutからstdout)
  • -dTextAlphaBits = 4-フォントのアンチエイリアス。
  • -r300-300 dpi

9

poppler-utilsパッケージに含まれているコマンドラインユーティリティを使用することもできます。

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

例:

pdftocairo -png mypage.pdf mypage.png

1
これはとてもいいです。PDFが複数ページの場合、複数のPNGファイルがあります。
Tomasz Gandor 2018年

5

受け入れられた答えを得ることができませんでした。次に、GhostscriptがPNGをネイティブにサポートするだけでなく、複数の異なる「エンコーディング」をサポートするため、実際にはソリューションがはるかに簡単であることがわかりました。

  • png256
  • png16
  • pnggray
  • pngmono
  • ..。

私のために働くシェルコマンドは次のとおりです。

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

pnggrayエンコーディングと500DPIを使用して、test.pdfのページ2をtest.pngに保存します。


2

ここでドイツの議論、それが使用することによって解決されたSVGファイルに対して、このような問題については、

convert -background transparent

おそらくこれはあなたにもうまくいくでしょう。


悲しいことに、それは私の問題を解決しません。これは実際にはPDF内の画像であり、すべての上にアルファチャネルがあります。
アダム

2

彼のスレッドが古いとはいえ、ソリューションを追加します。多分これはとにかく誰かを助けるでしょう。

まず、PDFを生成する必要があります。私はそのためにXeLaTeXを使用します:

xelatex test.tex

これで、ImageMagickGraphicMagicはどちらもパラメーターを左から右に解析するため、左端のパラメーターが最初に実行されます。最適な処理のためにこのシーケンスを使用することになりました。

gm convert -trim -transparent white -background transparent -density 1200x1200 -resize 25% test.pdf test.png

透明な背景に素敵なグラフィックを提供し、実際にページにあるものにトリミングします。パラメータは、より良い細分性を与え、そして全体的な解像度を向上させます。-density-resize

密度を下げることができるかどうかを確認することをお勧めします。変換時間を短縮します。


2

ImageMagickが不正確な色を与えていたPDFの場合、GraphicsMagickの方が優れていることがわかりました。

$ gm convert -quality 100 -thumbnail x300 -flatten journal.pdf\[0\] cover.jpg

確認するのに十分な情報はありませんが、これは色空間が正しく定義されていないことが原因である可能性があります。-colorspaceIMオプションを確認してください。
rivimey 2017

2

このページには代替ツールもリストされているので、Linux / Windows / Mac用にコンパイルされたコマンドラインツールを備えたxpdfについて説明します。透明性をサポートします。商用利用は無料です-本当に法外な価格設定のGhostscriptとは対照的です。

巨大なPDFファイルでのテストでは、Ghostscriptより7.5%高速でした。

(PDFからテキストおよびHTMLへのコンバーターもあります)


私はこれをしばらく使用しましたが、問題なく動作します。一般的に、解像度は高くなりますが、Ghostscriptよりも少し遅くなります。しかし、画像ははるかに見栄えが良く(少し暗くなりますが)、Ghostscriptで機能するアンチエイリアシングはxpdfでうまく機能します!
TheStoryCoder


1

私の解決策ははるかに単純で直接的なものです。少なくとも、私の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

ええ、これはOPが最初に試したものですが、ImageMagickがghostscriptを呼び出したときに、他に何かエラーが発生することはありませんでした...しかし、それが機能する場合は、うまくいきます:)
rogerdpack 2017

0

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.