【Ruby+PDFKit】RubyでHTMLからPDFを生成する

Pocket

RubyPDFExampleWithImage (出来上がりイメージ)

RubyにPDFKitを入れると、HTMLでマークアップした文書をPDFとして出力することができます。デフォルトオプションでも相当きれいな出力が得られるので、データ解析の結果をまとめたり、日々の実験結果のサマリを自動生成するのにも使えると思います。以下、自分用のログです。

[tmkm-amazon]9784774173221[/tmkm-amazon]

インストール

gemでPDFKitをインストール。


gem install pdfkit

http://wkhtmltopdf.orgにあるwkhtmltopdfという外部プログラムが必要なので、ダウンロードページからダウンロードしてインストールします。

使い方のサンプル

以下のサンプルのように、HTMLをstringとして用意し、PDFKit.new()に渡します。to_pdfメソッドをコールすると、PDFの文字列が戻ってくるので、fileに書き出しています。

なお、<h1>タグではstyleアトリビュートを付与してフォントを選択したり、<h2>タグでは文字色を変更しています。CSSを書いておくと簡単に装飾を変更できます。

require "PDFKit"

htmlString=<<EOS
<h1 style="font-family:'ヒラギノ角ゴ Pro W3','Hiragino Kaku Gothic Pro',sans-serif;">Ruby PDF Example</h1>
<h2 style="color: orange;">Heading 2</h2>
<div>
	This is body text. This is body text. This is body text.
</div>
<div>
	This is body text2. This is body text2. This is body text2.
</div>
<div>
	<ul style="line-height: 3em;">
		<li> Itemize </li>
		<li> Itemize </li>
		<li> Itemize </li>
	</ul>
</div>
EOS

file=open("RubyPDFExample.pdf","w")
file.puts PDFKit.new(htmlString).to_pdf
file.close

で、これをmake_pdf.rbとかに保存して

ruby make_pdf.rb

と実行すると、RubyPDFExample.pdfというPDFファイルが生成されるはずです。

RubyPDFExample

画像を挿入するサンプル

<img>タグを使えば、画像の挿入も可能。ぼくがMac環境で試した範囲では、画像ファイルをフルパスで指定する必要がありました(なお、Rubyで相対パスからフルパスを取得する場合はFile.expand_path(“file.png”)がつかえます)。

<img src="/Users/yuasa/Desktop/Taipei.png">

生成されるPDFは以下のような感じになります。

RubyPDFExampleWithImage.pdf

RubyPDFExampleWithImage

なお、サンプルで使用している写真は台北の國家戲劇院(National Theater)です。
[tmkm-amazon]B00K8BNHEC[/tmkm-amazon]

ソースコード全体は以下のとおりです。

require "PDFKit"

htmlString=<<EOS
<h1 style="font-family:'ヒラギノ角ゴ Pro W3','Hiragino Kaku Gothic Pro',sans-serif;">Ruby PDF Example</h1>
<h2 style="color: orange;">Heading 2</h2>
<div>
	This is body text. This is body text. This is body text.
</div>
<div>
	This is body text2. This is body text2. This is body text2.
</div>
<div>
	<ul style="line-height: 3em;">
		<li> Itemize </li>
		<li> Itemize </li>
		<li> Itemize </li>
	</ul>
</div>
<img src="/Users/yuasa/Desktop/Taipei.png">   <!-- ←imgタグを追加しています -->
EOS

file=open("RubyPDFExampleWithImage.pdf","w")
file.puts PDFKit.new(htmlString).to_pdf
file.close

[tmkm-amazon]4797359986[/tmkm-amazon]
[tmkm-amazon]4767814294[/tmkm-amazon]