【Ruby+PDFKit】RubyでHTMLからPDFを生成する
RubyにPDFKitを入れると、HTMLでマークアップした文書をPDFとして出力することができます。デフォルトオプションでも相当きれいな出力が得られるので、データ解析の結果をまとめたり、日々の実験結果のサマリを自動生成するのにも使えると思います。以下、自分用のログです。
[tmkm-amazon]9784774173221[/tmkm-amazon]
インストール
gemでPDFKitをインストール。
1
2
3
gem install pdfkit
http://wkhtmltopdf.orgにあるwkhtmltopdfという外部プログラムが必要なので、ダウンロードページからダウンロードしてインストールします。
使い方のサンプル
以下のサンプルのように、HTMLをstringとして用意し、PDFKit.new()に渡します。to_pdfメソッドをコールすると、PDFの文字列が戻ってくるので、fileに書き出しています。
なお、<h1>タグではstyleアトリビュートを付与してフォントを選択したり、<h2>タグでは文字色を変更しています。CSSを書いておくと簡単に装飾を変更できます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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とかに保存して
1
ruby make_pdf.rb
と実行すると、RubyPDFExample.pdfというPDFファイルが生成されるはずです。
画像を挿入するサンプル
タグを使えば、画像の挿入も可能。ぼくがMac環境で試した範囲では、画像ファイルをフルパスで指定する必要がありました(なお、Rubyで相対パスからフルパスを取得する場合はFile.expand_path(“file.png”)がつかえます)。
1
<img src="/Users/yuasa/Desktop/Taipei.png">
生成されるPDFは以下のような感じになります。
なお、サンプルで使用している写真は台北の國家戲劇院(National Theater)です。 [tmkm-amazon]B00K8BNHEC[/tmkm-amazon]
ソースコード全体は以下のとおりです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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]