その他
    ホーム 技術発信 DoRuby Thinreportsを使った感触
    Thinreportsを使った感触
     

    Thinreportsを使った感触

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    Railsのwebアプリケーション上で、PDFを自動作成させたい、ということがあり、 その際に「ThinReports」というツールを使う機会があったので、 このツールの良い所や、使い辛いと思った所をまとめてみました。

    利点

    1. 専用のエディタが使える

    googlechromeにて、専用のエディタアプリが用意されており、
    これを使うことでかなり視覚的にPDFのレイアウトを組むことが出来ます。
    アプリは、Chromeのwebストアから無料でダウンロードが可能です。

    エディタの画面上で矩形や画像、表を配置することが出来るので、
    全てソースから作成するより、PDFの出来上がりが想像しやすいです。
    また、要素の座標位置も1px単位で確認できるので、微調整も容易です。

    enter image description here

    矩形は四角と丸、直線のみですが、細かく調整が可能なため、
    組み合わせれば、PDF上に簡単なイラストを描くことも可能です。
    この辺りはペイントやパワーポイントで使用できる矩形を想像してもらえれば、
    操作性が想像しやすいかと思います。


    2. 要素の流し込みが簡単

    エディタには矩形とは別に、要素の流し込み先となる枠(テキスト・画像)を作成できる機能が組み込まれています。
    流し込み先をレイアウトファイル内に作ってしまえば、あとはrails側で要素を投げるだけでPDFに内容を埋め込めます。

    enter image description here

    また、Thinreports用のgemがあるので、rails側のセットアップも比較的簡単です。
    Gemfile内にgem thinreportsを記述してbundle installすれば、事前準備は完了です。
    あとは、コントローラなどからレイアウトファイルに値を渡してあげましょう。
    enter image description here

    上のコードは、先程のレイアウトファイルに要素を渡し、PDFを出力している所です。
    Userモデルの情報をpdf化しています。
    値の受け渡しは、基本的にvalueで渡せますが、画像の場合はsrcを使って、画像のパスを渡せばOKです。

    欠点

    1. 流し込む要素が大きいと対応しにくい

    一つの流し込み領域に対して、長いテキストなどを入れる場合、
    領域からはみ出すぶんに関して、
    「その分領域を拡張する」「文字サイズを縮小する」のどちらかを選択しておくことが出来ます。
    ただし、拡張されるのはその領域だけなので、すぐ下に別のテキスト等があると、表示がかぶってしまいます。
    文字を縮小すればかぶりませんが、縮小した所だけ不自然に文字が小さくなってしまうので、要素の規定文字数が定まっていない場合、あまり向かないかもしれません。


    2. フォントが少ない

    enter image description here

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



    以上、Thinreportsを使ってみた感触でした。
    目的によって向き・不向きがありますが、視覚的にレイアウトが作れて、
    結構きれいなPDFが出力できるので、気になった方は一度触ってみるのも良いかもしれません。