• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

Javaはあまり好きではないが、PDF出力ライブラリはiTextが一番だと思っている。GoogleやAdobeのような大手もiTextを利用している事から、その実力は折り紙付きだ。
そもそも、私がJRubyを使い始めたきっかけも、RailsでiTextを使いたかったからだ。

通常、iTextでグラフを生成する場合は、JFreeChartを使うのが一般的だが、今回はiText + Google Chart APIという斬新な組み合わせにチャレンジしてみた。

環境

  • Ubuntu 8.04 64bit
  • JRuby 1.1.4
  • Rails 2.1.2
  • iText 2.1.4


iTextのインストール

下記の3つをダウンロードし、jruby/libディレクトリにコピーする。


PDF出力のメソッド

RailsのControllerにPDF出力用のメソッドを作成。
Google Chart APIのグラフをiTextに埋め込む場合は、URLにパラメータをセットし、それを
document.add(Image::getInstance(URL))
で追加するだけ。
URLに改行コードが入るとエラーになってしまうので、必ずgsubで置換しておくこと。

   1  require 'java'
   2  include_class "java.io.OutputStream"
   3  include_class "java.io.ByteArrayOutputStream"
   4  include_class "java.io.IOException"
   5  include_class "com.lowagie.text.pdf.PdfWriter"
   6  include_class "com.lowagie.text.Document"
   7  include_class "com.lowagie.text.Font"
   8  include_class "com.lowagie.text.pdf.BaseFont"
   9  include_class "com.lowagie.text.Paragraph"
  10  include_class "com.lowagie.text.PageSize"
  11  include_class "com.lowagie.text.Chunk"
  12  include_class "com.lowagie.text.Image"
  13  
  14  class PdfsController < ApplicationController
  15    def pdf
  16      m = ByteArrayOutputStream.new()
  17      document=Document.new() 
  18      writer=PdfWriter.getInstance(document,m)
  19      writer.closeStream = false
  20      document.open()
  21      font = Font.new(BaseFont.createFont("HeiseiMin-W3", "UniJIS-UCS2-H", false),20)
  22      document.add(Paragraph.new("税理士業界におけるSaaSベンダのシェア", font))
  23      
  24      chart = <<-EOS
  25  http://chart.apis.google.com/chart?
  26  chs=460x200
  27  &chd=t:62,12,5,2,19
  28  &cht=p3
  29  &chl=A社|B社|C社|D社|その他
  30      EOS
  31      
  32      document.add(Image::getInstance(chart.gsub!(/\n/, "")))
  33      document.close
  34      send_data String.from_java_bytes(m.toByteArray), :type=> "application/pdf", :dispostion=>"inline"
  35    end
  36  end
sample.pdf ・・・上記のコードで出力したPDF
ご覧の通り、日本語も普通に使える。

まとめ

JFreeChartに比べて、グラフが簡単に作れる。
この組み合わせはなかなかいいなと思った。

posted by Png abikounso on Mon 17 Nov 2008 at 14:00

Comments:

or Preview
Social Bookmarks
  • Delicious
  • B_entry1034
  • Clip_16_12_w
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ