report = Thinreports ::Reports . new layout : 'foo'
report . layout . config . list do |list |
list . use_stores :price
list . events . on :page_footer_insert do |e |
e . section . item ( :price ) . value ( e . store . price )
end
list . events . on :footer_insert do |e |
e . section . item ( :price ) . value ( e . store . price )
end
end
@items . each do |item |
report . list do |list |
list . add_row price : item . price , name : item . name
list . store . price += item . price
end
end
report . generate filename : 'items.pdf'
リストのイベントモデルは非推奨へ (warn 'DEPRECATION')
List#overflow?
と List#on_page_break
コールバックを使ったマニュアル作成を推奨へ
report = Thinreports ::Reports . new layout : 'foo'
report . list do |list |
price = 0
total_price = 0
list . on_page_break do
list . page_footer price : price
total_price += price
price = 0
end
@items . each do |item |
list . add_row price : item . price , name : item . name
price += item . price
end
list . on_page_break . call
list . footer price : total_price
end
report . generate filename : 'items.pdf'
ローカル変数を使うことが微妙なら, こんな風にもできると良いかも。
report . list do |list |
list . page_footer . item ( :price ) . value = 0
list . footer . item ( :price ) . value = 0
list . on_page_break do
list . footer . item ( :price ) . value += list . page_footer . item ( :price ) . value
list . page_footer . item ( :price ) . value = 0
end
@items . each do |item |
list . add_row price : item . price , name : item . name
list . page_footer . item ( :price ) . value += item . price
end
list . on_page_break . call
# すでに list.footer.item(:price) は合計値が入っているので下記は不要
# list.footer price: total_price
end
うーん、ちょっと冗長すぎる。微妙..。根本的な解決策にはならないが list.footer[:price].value
とかできれば少しはマシか。
v1.0?: リストイベントは廃止、Editor で集計/件数/平均を設定可能へ
リストのイベントモデルを廃止へ (List#events #=> NoMethodError
)
Editor 上でページフッター/フッターのテキストボックスに対して、自動集計の設定オプションを追加
例えば、商品の合計金額をフッター/ページフッターの :price
テキストブロックに表示させるとき、
:price
テキストブロックのプロパティで "集計する: Yes" みたいな設定をしておくと、何もしなくても勝手に集計値がセットされる機能
明示的に集計ソースとなる繰り返し行のテキストブロック ID を指定することも可能