mod_ruby + Ruby FPDF
Rubyで動的にPDFを作成してWeb上に表示したいと思い、いろいろと探してみたのですがなかなか「これだ!」とすぐに使えるものが無く、試行錯誤してみました。
調べてみるといくつか選択肢はあるようですが、PHPで使い慣れたFPDFをRubyに移植したRuby FPDFを今回は利用することにしました。
上記のページの下にダウンロードリンクがあるので、ダウンロードしたものを解凍して、適当なフォルダーに置いてみます。
まず、ローカルできちんと動くかどうかを確認してみるために、examplesフォルダの中にあるexample1.rbを実行してみます。
$ ruby example1.rb
...エラーです。そこで、「require 'fpdf'」の部分を「require '../fpdf'」と書き換えて、もういちど試すとexample1.pdfというファイルがきちんと作られました。
しかし、WebでPDFを生成させようかと思ったらちょっとうまく行かない。サーバの適当な場所にFPDFをアップロードして、example1.rbを実行してもエラーになります。
ある意味当然と言えば当然なのに気がつくまでにはちょっと時間がかかってしまいました。ここで、一番大きなポイントは
print pdf.Output()です。
改造後のexample1.rbは以下となります。赤字の部分が変更箇所です。
#!/usr/local/bin/ruby # This example, when run, will generate a PDF file called example.pdf. # This is based directly on the first tutorial example given on the # FPDF website (http://www.fpdf.org). #require 'class/fpdf/fpdf' load '../fpdf.rb' print "Content-type: application/pdf¥n¥n" pdf=FPDF.new pdf.AddPage pdf.SetFont('Arial','B',16) pdf.Cell(40,10,'Hello World!') pdf.Close() #pdf.Output('example1.pdf') print pdf.Output()
動作確認ページはこちらです。
でも、これはmod_rubyではないので、mod_rubyの場合は、
print "Content-type: application/pdf¥n¥n"の部分を
r = Apache.request r.content_type = "application/pdf" r.send_http_header()と書き換えて使用します。
何かの役には立ちますでしょうか。もし他にも良い方法をご存知の方がおられれば、教えていただけると助かります。
後は日本語がきちんと使えるかどうかを確認してみたいけど、未確認なのではっきりとは言えませんが、僕の経験上だめだと思う...でも、僕の経験上きっと時間が解決してくれるはず(他力本願)。そのためには、利用者が増えないといけないので、その一助になれるよう今後も面白そうなネタがあれば公開してみようと思います。
Ruby on Railsと一緒にPDFを表示する方法はいろいろと紹介されていて、簡単に見つかりますね。ものすごい誘惑を感じますが、絶対そんなの使わないぞ!
| 固定リンク
コメント