Webページをコマンドラインから一発でPDFや画像に変換する | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

wkhtmltopdf を使えば、Webページをコマンド一発でとてもシンプルにPDFや画像に変換することができます。

厳密に言えば、WebページのPDF変換と画像変換はコマンドが分かれており、wkhtmltopdfコマンドを使えばPDFへ、wkhtmltoimageを使えば画像へ変換することができます。

 

Linux版だけでなく、WindowsやMacOS版も用意されています。

 

ただし、2010年9月時点で最新版が0.10.0Beta5ということなので、ちょっとソフトウェア自体の安定度はどうかわかりませんが。

 

 

wkhtmltopdfのインストール

 

 

 

インストールといっても、ファイルを解凍すればバイナリファイルが出来上がるだけなのでとても簡単なんですが、最新の0.10.0ではLZMA形式で圧縮されたファイルになっており、解凍時に注意が必要です。

 

私のテストした環境でもLZMA形式のファイルを取り扱えなかったので、別途xzコマンドをインストールして対応しました。

 

# yum install xz.i386

 

 

xzコマンドを使えばLZMA形式で圧縮されたファイルを解凍できるので、先ほどダウンロードしたファイルを展開します。

 

 

$ xz -d wkhtmltopdf-0.10.0_beta5-static-i386.tar.lzma

$ tar -xvf wkhtmltopdf-0.10.0_beta5-static-i386.tar

 

 

すると、 wkhtmltopdf-i386という名前のバイナリファイルができるので、後はパスが通った適当なディレクトリにコピーしておきます。

 

 

# cp wkhtmltopdf-i386 /usr/local/bin/wkhtmltopdf

 

 

これで、wkhtmltopdfコマンドがどこからでも利用可能となりました。(wkhtmltoimageも同様です)

 

 

 

wkhtmltopdfの使い方

 

 

 

使い方もいたってシンプルなんですが、例えばGoogleのページのPDFファイルに変換したい場合は

 

 

$ wkhtmltopdf http://www.google.co.jp/ google.pdf
Loading pages (1/6)
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done

 

 

とします。

 

 

- google.pdf
A Day In The Boy's Life-GooglePDF変換

 

 

若干メニューの部分がおかしいのですが、GoogleサイトがPDFファイルへ変換されています。

 

ちなみに、wkhtmltopdfコマンドはWebサイトだけでなくローカルのファイルも変換することが可能です。

しかも、HTMLファイルだけでなくテキストなどでも変換可能になっています。

 

 

wkhtmltoimageの使い方

 

 

 

こちらも同様にシンプルに使えます。

 

 

$ wkhtmltoimage http://www.google.co.jp/ google.jpg
Loading page (1/2)
Rendering (2/2)
Done

 

 

デフォルトだと、JPG形式で保存されます。

 

 

- google.jpg

 

A Day In The Boy's Life-GoogleImage

 

※ 画像サイズはブログ貼り付け用に変更しています。

 

 

その他の画像フォーマットに変換したい場合は

 

 

$ wkhtmltoimage -f png http://www.google.co.jp/ google.png
Loading page (1/2)
Rendering (2/2)
Done

 

 

というように、最初に「-f」オプションを指定します。

 

その他にも、画像の幅や高さ、画像のクオリティなどを指定することも可能です。

詳細は、

 

$ wkhtmltoimage --help

 

 

で、確認してみてください。

 

 

Web魚拓のようにWebサイトの情報を定期的に撮っておきたいような場合には、使えるかもしれませんね。