Javaはあまり好きではないが、PDF出力ライブラリはiTextが一番だと思っている。GoogleやAdobeのような大手もiTextを利用している事から、その実力は折り紙付きだ。
そもそも、私がJRubyを使い始めたきっかけも、RailsでiTextを使いたかったからだ。
通常、iTextでグラフを生成する場合は、JFreeChart
環境
- Ubuntu 8.04 64bit
- JRuby 1.1.4
- Rails 2.1.2
- iText 2.1.4
iTextのインストール
下記の3つをダウンロードし、jruby/libディレクトリにコピーする。
PDF出力のメソッド
RailsのController
Google Chart APIのグラフをiTextに埋め込む場合は、URLにパラメータをセットし、それを
document.a
で追加するだけ。
URLに改行コードが入るとエラーになってしまうので、必ずgsubで置換しておくこと。
1 require 'java' 2 include_class "java.io.Ou tputStream " 3 include_cl ass "java.io.By teArrayOut putStream" 4 include_cl ass "java.io.IO Exception" 5 include_cl ass "com.lowagi e.text.pdf .PdfWriter " 6 include_cl ass "com.lowagi e.text.Doc ument" 7 include_cl ass "com.lowagi e.text.Fon t" 8 include_cl ass "com.lowagi e.text.pdf .BaseFont" 9 include_cl ass "com.lowagi e.text.Par agraph" 10 include_cl ass "com.lowagi e.text.Pag eSize" 11 include_cl ass "com.lowagi e.text.Chu nk" 12 include_cl ass "com.lowagi e.text.Ima ge" 13 14 class PdfsContro ller < Applicatio nControlle r 15 def pdf 16 m = ByteArrayO utputStrea m.new() 17 document=Document.new() 18 writer=PdfWriter.getInstanc e(document,m) 19 writer.closeStrea m = false 20 document.open() 21 font = Font.new(BaseFont.createFont ("HeiseiMin- W3", "UniJIS-UCS 2-H", false),20) 22 document.add(Paragraph.new("税理士業界におけるSaaSベンダのシェア", font)) 23 24 chart = <<-EOS 25 http://cha rt.apis.go ogle.com/c hart? 26 chs=460x20 0 27 &chd=t:62,12,5,2,19 28 &cht=p3 29 &chl=A社|B社|C社|D社|その他 30 EOS 31 32 document.add(Image::getInstanc e(chart.gsub!(/\n/, ""))) 33 document.close 34 send_data String.from_java_ bytes(m.toByteArra y), :type=> "applicatio n/pdf", :dispostion =>"inline" 35 end 36 end
sample.pdf
ご覧の通り、日本語も普通に使える。
まとめ
JFreeChart
この組み合わせはなかなかいいなと思った。
posted by
abikounso
on Mon 17 Nov 2008
at 14:00


