pdfでテーブルを出力する際にprawn + prawn-tableを使用している
のでサンプル
Gem準備
Gemfile
source 'https://rubygems.org'
gem 'prawn'
gem 'param-table'
pdf用のクラス作成
僕の場合はpdfごとにクラス作るようにしています。
hoge_hoge.rb
HogeHoge < Prawn::Document
def initialize
# 用紙サイズと向きを指定
super(page_size: 'A3', page_layout: :landscape)
render_table
end
private
def render_table
end
end
出力
railsのコントローラーとかから
hoges_controller.rb
def action
send_data PDF::HogeHoge.new.render, filename: "hoge.pdf", type: 'application/pdf'
end
この時点では真っ白だと思うので、tableを書いていきます。
テーブルを書く
サンプルなので適当に
hoge_hoge.rb
def render_table
data = [['column1', 'column2'], ['value1_1', 'value1_2'], ['value2_1', 'value2_2']]
table data
end
これだけでPDFをテーブルに出力できるようになります。
その他
テーブルが複数ページにまたがる場合
table data, header: true
をつけとくと、テーブルがページをまたがってもヘッダをつけてくれる
render_table
number_pages('<page> / <total>', at: [bounds.right - 50, 0])
こうしとけば各ページにページ番号もつけれます。
テーブルのスタイルまわり
テーブルの5行ごとに下線を太くしたい
table data, header: true do |t|
t.before_rendering_page do |page|
0.step(page.row_count, 5) do |i|
page.row(i).border_bottom_width = 3
end
end
end
上記だとページがまたがっても大丈夫
テーブル全体でスタイル指定したい
table data, cell_style: { size: 18 }
セルごとに細かくスタイル指定したい
data = [
make_cell(content: 'aaa', align: :center, valign: :center, size: 10),
{ content: 'bbb', size: 20 }
]
とかでOK