この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
Railsのwebアプリケーション上で、PDFを自動作成させたい、ということがあり、 その際に「ThinReports」というツールを使う機会があったので、 このツールの良い所や、使い辛いと思った所をまとめてみました。
利点
1. 専用のエディタが使える
googlechromeにて、専用のエディタアプリが用意されており、
これを使うことでかなり視覚的にPDFのレイアウトを組むことが出来ます。
アプリは、Chromeのwebストアから無料でダウンロードが可能です。
エディタの画面上で矩形や画像、表を配置することが出来るので、
全てソースから作成するより、PDFの出来上がりが想像しやすいです。
また、要素の座標位置も1px単位で確認できるので、微調整も容易です。


矩形は四角と丸、直線のみですが、細かく調整が可能なため、
組み合わせれば、PDF上に簡単なイラストを描くことも可能です。
この辺りはペイントやパワーポイントで使用できる矩形を想像してもらえれば、
操作性が想像しやすいかと思います。
2. 要素の流し込みが簡単
エディタには矩形とは別に、要素の流し込み先となる枠(テキスト・画像)を作成できる機能が組み込まれています。
流し込み先をレイアウトファイル内に作ってしまえば、あとはrails側で要素を投げるだけでPDFに内容を埋め込めます。


また、Thinreports用のgemがあるので、rails側のセットアップも比較的簡単です。
Gemfile内にgem thinreports
を記述してbundle installすれば、事前準備は完了です。
あとは、コントローラなどからレイアウトファイルに値を渡してあげましょう。
上のコードは、先程のレイアウトファイルに要素を渡し、PDFを出力している所です。
Userモデルの情報をpdf化しています。
値の受け渡しは、基本的にvalueで渡せますが、画像の場合はsrcを使って、画像のパスを渡せばOKです。
欠点
1. 流し込む要素が大きいと対応しにくい
一つの流し込み領域に対して、長いテキストなどを入れる場合、
領域からはみ出すぶんに関して、
「その分領域を拡張する」「文字サイズを縮小する」のどちらかを選択しておくことが出来ます。
ただし、拡張されるのはその領域だけなので、すぐ下に別のテキスト等があると、表示がかぶってしまいます。
文字を縮小すればかぶりませんが、縮小した所だけ不自然に文字が小さくなってしまうので、要素の規定文字数が定まっていない場合、あまり向かないかもしれません。
2. フォントが少ない


細かい所ではありますが、エディタで使用できるフォントが少ないです。
日本語のフォントは「明朝体」「ゴシック体」の二つのみです。
このフォントは流し込みをした要素にも適用されるので、
多様にフォントを使用して、デザインの凝ったPDFを作成したい、という場合は別の方法を取った方がいいでしょう。
一応、開発元のロードマップには、カスタムフォント対応が予定されていますが、
更新の頻度が低いようなので、あまり期待せず待つしか無いようです・・・
以上、Thinreportsを使ってみた感触でした。
目的によって向き・不向きがありますが、視覚的にレイアウトが作れて、
結構きれいなPDFが出力できるので、気になった方は一度触ってみるのも良いかもしれません。