Rails
ThinReports

Thinreportsでらくらく帳票作成

More than 3 years have passed since last update.


Thinreportsの特徴


  1. Thinreports用のテンプレートを作成、比較的癖がある

  2. RailsでPDFに値を格納する、テーブルカラムの設定があると動的に良い感じ行を追加してくれる

  3. バイナリファイルを添付して送信

  4. 国内産のライブラリのため日本語の対応も心配がない(@thinreports_orgにメンションを送ると回答が来る)

テンプレート作成には癖があるが、wicked_pdfでHTMLやCSSを書いて作るよりずっと楽


Thinreports Editor インストール

Chromeの拡張機能で出力する帳票のPDFのテンプレートを作成する

インストール方法は下記URLのドキュメント「ChromeApp 版」の項を参照のこと

http://www.thinreports.org/documentation/ja/getting-started/installation.html


Thinreports 簡単な使い方の例


公式のクイックスタート

http://www.thinreports.org/documentation/ja/getting-started/quickstart.html


ブログ記事

http://ruby-rails.hatenadiary.com/entry/20140909/1410241835


帳票の作成の仕方のコツ

Thinreports Editor を起動すると下のような画面が表示される

2015-12-10 18 17 32

左側のリストをクリックし、パワーポイントのオブジェクトを操作する間隔で四角や、文字、画像を追加することが出来る。


画面左側要素

重要なものをいくつか説明していきます


  • 一番上の矢印


    • 各オブジェクト選択しプロパティの設定



  • 上から2番目の四角


    • 四角のオブジェクト、塗りつぶしなどを行う。



  • 上から6番目A


    • 固定文字入力オブジェクト

    • Thinreportsは四角のオブジェクトなどそのものに文字を入力できないので、形のオブジェクトの上に、この固定文字入力オブジェクトを置くと、文字の乗った四角を表現できる




  • 上から7番目の画像っぽいアイコン


    • 画像入力オブジェクト

    • 固定画像を挿入できる、バイナリで追加できるのでRailsオブジェクトにパスを渡す必要はない




  • 上から8番目枠で囲ったA(以降 囲みA)


    • コードから文字を入力するオブジェクト

    • オブジェクトにIDを指定して、コードでIDを指定することにより対象箇所に文字が入力される




  • 一番下 テーブルオブジェクト


    • テーブル作成できる、リスト表示したいN行のデータを表示するときに利用すると良い

    • header, detail, footerで項目を設定する




画面右側要素

2015-12-10 8 52 50

フォント種類や、フォントサイズ、文字位置などを変更できる

2015-12-10 9 35 07


テーブルオブジェクトをクリックした場合

テーブルオブジェクトをクリックした場合に、ヘッダーやフッターを表示・非表示を制御する

自動改ページのチェックを外すと、テーブルの行が1ページをはみ出た場合にそれ以降表を作ってくれなくなるので注意が必要

2015-12-10 8 28 27


画面上部

オブジェクトの整列や、オブジェクトの表示位置を前に・後ろに設定することが出来るメニューが有る

2015-12-12 15 30 42


オブジェクトの整列、サイズ調整方法


複数オブジェクトの選択方法

MacのChromeを利用した場合は

Shift + Cmd + クリック で複数オブジェクトを選択することが出来る

※ windowsの場合は把握してません

複数のオブジェクトを設定したら、画面上の整列で位置を揃えたり、サイズ調整をすることが出来きます

2015-12-12 15 30 48

オブジェクトを前面に出したい場合などは「前面に移動」を選択する

2015-12-12 15 30 58


テーブル作成時にのバッドノウハウ

Thinreportsは外枠や各セルの枠をHTMLのように設定することは出来ない。

各セルを並べてあたかも枠の設定しているように見せる必要がある


  1. ワクを囲むために四角のオブジェクトをheaderとdeatilに設定する


  2. セルの内容を表示するオブジェクトを設定する、headerには固定文字列のオブジェクト、detailにはrailsで変更可能なオブジェクトを設置する


1, 2の順番で作らないと表示順の関係で設定が面倒くさくなる


別レイアウト設定方法

レイアウトファイルは、1つのPDFに複数のレイアウトファイルを設定することが出来る

新規ページ作成メソッド時の引数にlayoutを設定すれば実現可能



サンプルコード

Routing設定


routes.rb

  resources :pdfs, only: [index] do

collection do
get :output
end
end

Viewの設定

app/views/index.html.erb


index.html.erb

# /pdfs/output へのパス

<%= link_to "PDF送信", output_pdfs_path %>

Controllerの設定


pdfs_controller.rb

class PdfsController < ApplicationController

def index
end

def output
# ThinreportsでPDFを作成
# Editorで作ったtlfファイルを読み込む
report = ThinReports::Report.new(layout: "#{Rails.root}/app/pdfs/table.tlf")

# 1ページ目
report.start_new_page
report.page.item(:title).value("ドキュメントタイトル")

# テーブルの値を設定
# list メソッドテーブルの行に値を入れる
# 表のIDを設定する(デフォルトのID値: default)
# add_row で列を追加できる
array = 20.times.map{|i| i}
# 20行表示する
array.each do |item|
report.list(:default).add_row do |row|
# 列の値を入れる
row.values(id:item, name: "name #{item}")
end
end
# ブロック内のrow.valuesで値を設定する
# テーブルが1ページを超えた場合は、2ページ目3ぺージ目に追記される

# 2ページ目 同じ帳票で表示項目を作りたい場合は、start_new_pageする
report.start_new_page
report.page.item(:title).value("ドキュメントタイトル2")

# 3 ページ目
# 別のレイアウトを適用させる
report.start_new_page layout: "#{Rails.root}/app/pdfs/page.tlf"
report.page.item(:text).value("テキストをRailsから入力")

# PDFファイルのバイナリデータを生成する
file = report.generate

# ブラウザでPDFを表示させたい場合
# パラメタのdisposition: "inline" をつけない場合は、PDFがダウンロードされる
send_data(
file,
filename: "filename_sample.pdf",
type: "application/pdf",
disposition: "inline")
end
end



バイナリの添付方法 email

Thinreportsのチュートリアルのとおりに使うと、画面表示する作業しかないが

生成したPDFのバイナリデータを

Amazon S3においたり、オンラインバッチで生成したり、メールで添付することも可能

# PDFファイルのバイナリデータを生成する

file = report.generate