prawn with Rails2.3.5

投稿者 okkez 2010-02-12 04:00:00 GMT

prawn を Rails2.3.5 で使おうと思って調べてみたら、prawnto が使えなくなっていた。

仕方が無いので prawn 単体を Rails で使う方法を考えてみたので書いておく。

以下のコードをそれぞれのファイルに書く。

# config/environment.rb
config.gem "prawn"
config.gem "prawn-layout", :lib => "prawn/layout"
config.gem "prawn-security", :lib => "prawn/security"

config.gem “prawn” だけだと prawn/{layout,security} がちゃんと読み込まれないので別の場所で require する必要がある。

# config/initializers/mime_types.rb
Mime::Type.register "application/pdf", :pdf
# 適当なヘルパー
  def render_pdf
    pdf = Prawn::Document.new(:page_size => "A4")
    # フォントは環境に合わせる
    pdf.font "/usr/share/fonts/truetype/vlgothic/VL-Gothic-Regular.ttf"
    yield pdf
    pdf.render
  end

以上を追加したら、割と簡単に PDF を出力することができるようになる。

コントローラーでこんな風に書いて、

class ReportsController < ApplicationController
  def show
    @report = Report.find(params[:id]
    respond_to do |format|
      format.html # show.html.erb
      format.pdf # show.pdf.erb
    end
  end
end

ビューでこう書けばよい。

# show.pdf.erb
<%=
render_pdf do |pdf|
  pdf.text "Hello, PDF world!"
end
%>

追記

本家(github)をよく見たら別の方法が書いてあった。 * Using Prawn in Rails - prawn - GitHub

どっちが良い方法なんだろう。 github に書いてある方法だとちゃんとダウンロードするファイル名を指定できるのが良い。

自分が書いた方法だと、view なので view で使用するデータの受け渡しが楽だけどファイル名の指定とかが面倒。 あと Emacs で適切なモードになってくれないのが気にくわない。

カテゴリ  | タグ ,  | 2 comments | トラックバックなし

コメント

  1. kirill 発言 about 1 hour later:

    I find that its hard to make complex PDF using prawn . When will there be real reporting solution for ruby ?

  2. okkez 発言 about 5 hours later:

    Sorry, I don’t know well about it. But I found this site http://www.rubyreports.org/ . Making PDF using prawn is as difficult as any other solution including other languages (e.g. Java).

トラックバック

トラックバックリンク:
http://typo.okkez.net/trackbacks?article_id=269

コメントは許可されていません