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'
この結果できたのが以下のような帳票になります。
なかなかよさげな気配です。




0 件のコメント:
コメントを投稿