mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

Ruby - ThinReports で帳票出力!

[ プログラミング ] [ Ruby ]

こんばんは。

以前、Ruby で帳票出力するのに Prawn というGemsパッケージを使用した記事を投稿しました。

今回は、我が「Ruby City MATSUE」の企業が開発した Ruby・Rails に特化した 帳票生成機能を実現するオープンソースソフトウェア「ThinReports」を試してみました。 (というかこれも Prawn が絡んでいるようですが・・・) ※作者さんによる「ThinReports」の紹介動画も USTREAM にアップされていました。→ 「ThinReports」の開発で知るOSSの威力

特徴としては、帳票デザインを行うためのソフト「ThinReports Editor」で視覚的にデザインでき、そのレイアウトに対してソースコードで値を埋めていく(ジェネレートする)感じでしょうか!?

動作環境・インストール方法・使い方などは、「ThinReports」に非常に丁寧でわかりやすく記載されていますので、ここでは紹介しません。

Ruby がインストールされている環境であれば、「ThinReports」の環境はすぐに整い、サンプルのレイアウト・Rubyスクリプトもすぐに作れます。 サンプルのPDF出力まで30分とかかりませんでした。

そして、ついでに上記のサンプルとは別に独自にサンプルを作成してみました。 架空の「損益計算書」です。

ThinReports Editor

デザイン画面です。

THINREPORTS_EDITOR

Rubyスクリプトサンプル

サンプルのRubyスクリプトです。 今回はサンプルなので、数字をベタ打ちしています。

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# coding: utf-8
# ThinReports サンプル
#   ( 架空の損益計算書を作成 )

require 'thinreports'

report = ThinReports::Report.new :layout => 'thinreports_sample'

report.start_new_page

# 日付
report.page.item( :from_y ).value( 22 )
report.page.item( :from_m ).value(  4 )
report.page.item( :from_d ).value(  1 )
report.page.item( :to_y   ).value( 23 )
report.page.item( :to_m   ).value(  3 )
report.page.item( :to_d   ).value( 31 )

# 売上高
report.page.item( :uriage_l                   ).value( 998615104 )
report.page.item( :shohin_uriage_l            ).value(    836457 )
report.page.item( :shohin_uriage_r            ).value( 999451561 )

# 売上原価
report.page.item( :kishu_tanaoroshi_l         ).value(    284920 )
report.page.item( :shohin_shiire_l            ).value(    538257 )
report.page.item( :toki_seihinseizougenka_l   ).value( 848259932 )
report.page.item( :gokei_l                    ).value( 849083109 )
report.page.item( :kimatsu_tanaoroshi_l       ).value(   -231480 )
report.page.item( :kimatsu_tanaoroshi_r       ).value( 848851629 )
report.page.item( :uriage_sorieki_r           ).value( 150599932 )

# 販売費及び一般管理費
report.page.item( :hanbai_ippan_r             ).value(  73325581 )
report.page.item( :eigyo_rieki_r              ).value(  77274351 )

# 営業外収益
report.page.item( :uketori_risoku_l           ).value(    170957 )
report.page.item( :uketori_haitokin_l         ).value(    342754 )
report.page.item( :zatsu_shunyu_l             ).value(   7354601 )
report.page.item( :zatsu_shunyu_r             ).value(   7868312 )

# 営業外費用
report.page.item( :shiharai_risoku_l          ).value(   4435029 )
report.page.item( :tokubetsu_shokyakuhi_l     ).value(   2997000 )
report.page.item( :yakuin_taishoku_l          ).value(  30000000 )
report.page.item( :taishoku_kyufu_l           ).value( -18518000 )
report.page.item( :zatsu_sonshitsu_l          ).value(    799130 )
report.page.item( :zatsu_sonshitsu_r          ).value(  19713159 )
report.page.item( :keijo_rieki_r              ).value(  65429504 )

# 特別損失
report.page.item( :koteishisan_shoukyakuson_l ).value(   2328732 )
report.page.item( :koteishisan_shoukyakuson_r ).value(   2328732 )

# TOTAL
report.page.item( :toki_junrieki_mae_r        ).value(  63100772 )
report.page.item( :hojinzei_r                 ).value(  25000000 )
report.page.item( :hojinzei_chosei_r          ).value(   2790000 )
report.page.item( :toki_junrieki_r            ).value(  35310772 )

# PDF生成
report.generate_file('thinreports_sample.pdf')

PDFサンプル

生成された PDF です。

THINREPORTS_SAMPLE

所感

  • 以前、翼システム(現在は、帳票ソリューション事業は「ウイングアークテクノロジーズ」に売却されてる)の SVF を使用したことありますが、SVF のエディタよりは簡単に使えます。
  • 標準的なフォントがデフォルトで搭載されているので、別途フォントファイルを用意する必要がない。
  • 今回は試していないが、ページが複数行に渡る場合も自動でヘッダ等を付加したり、ページ番号も簡単に付けられるようになっている。
  • 基本的な帳票なら「Prawn」より使いやすい。

以前 Ruby + Prawn で作成した PDF 出力アプリを Ruby + ThinReports に変更してみようと思いました。

以上。

Comments