12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

prawnとprawn-tableでPDF

Posted at

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

参考サイト

12
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?