2011-07-02

rubyで帳票

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
※この情報はpreview2の場合の情報です。新しいバージョンでは互換性がありません。新しいバージョンに関しては、rubyで帳票を作るのに便利そうなThinReportsがバージョンアップしていたを参照してください。



rubyで帳票を作りたいなぁと思って調べると
Prawn
というを使って頑張ってPDFを作成する感じと
JasperReport
というもの用意して、連携して使う感じが見つかります。

できれば帳票のデザインは、別の人がやってプログラムではデータをはめ込むだけにしたいわけです。
Prawn
ではデザインの分離はできなそうです。
JasperReport
では、デザインの分離はできそうですが環境を用意するのがちょっとめんどくさそうです。

で他のを調べていたら
ThinkReports
というのがありました。
デザインをちゃんと分離できます。

利用するには以下の3つが必要なようです。
・ThinReports Editor:帳票デザインツール
・ThinReports Generator for Ruby:帳票作成環境
・PXDoc:帳票印刷ツール
印刷に専用ツールが必要なのがちょっと微妙な気がしないわけでもないですが、将来的にはpdfに対応するようです。

インストール方法は、
http://osc.matsukei.net/projects/thinreports/wiki/Installation_Guide
を見ればよいのですが、それぞれ以下のような感じです。

・ThinReports Editorのインストール
Windows環境で作業を行う
http://osc.matsukei.net/projects/thinreports-editor/files
から最新版をダウンロードしてインストールする。

・ThinReports Generator for Rubyのインストール
linux環境で実行する
su -
gem install thinreports-generator --pre

・PXDoc
Windows環境で作業を行う
http://www.pxdoc.com/download.htm
よりバージョン1.18.21をダウンロードしてインストールする

で使い方です。

まずは帳票のデザインをします。
http://osc.matsukei.net/projects/thinreports/wiki/Getting_Started
こちらを見ればなんとなく使い方がわかります。
データを当てはめるところにしっかり名前をつけておけばよい感じです。
以下のような感じのを作ってみました。

デザインしたものにデータをはめ込むのは以下のような感じです。
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

require 'rubygems'
require 'thinreports'

#デザインしたファイルを置いたディレクトリ
ThinReports::Generator.config.layouts_dir = '/home/ohoho/uhuhu'

#デザインしたファイル名を指定
report = ThinReports::Generator.new_report :test_test

report.new_page do |page|
  page[:aaa].value = 'おらおら'
  list = page.list(:test_list)
  data = [['コード1','おなまえ1','バルバル'],
          ['コード22','おなまえ12','バルバルバル'],
          ['コード22333','おなまえ12345','バルバルバル場るバルバル'],
          ['コード2233344455555','おなまえ1234567890','バルバルバル場るバルバルバリバリバリバリ'],
          ['コード2233344455555667788','おなまえ1234567890なまえ~~~~','バルバルバル場るバルバルバリバリバリバリバロバロバロ'],
         ]
  data.each do |d|
    list.new_row do |row|
      row[:code].value = d[0]
      row[:name].value = d[1]
      row[:valval].value = d[2]
    end
  end
end

report.new_page do |page|
  page[:aaa].value = 'オラオラオラオラオラオラオラオラオラオラオラオラオロオラオラオラオラオラオラオラオラララララララララララララ'
  list = page.list(:test_list)
  for i in 0..50
    list.new_row do |row|
      row[:code].value = 'code' + i.to_s
      row[:name].value = 'name' + i.to_s
      row[:valval].value = 'valval' + i.to_s
    end
  end
end

File.open('test_out.pxd', 'w') do |f|
   f.puts report.generate(:pxdoc)
end

puts 'Done'

この結果できたのが以下のような帳票になります。



なかなかよさげな気配です。


コメントを投稿