Ruby - ThinReports でTweet一覧出力!
Updated:
先日は、我が「Ruby City MATSUE」の企業が開発した Ruby・Rails に特化した 帳票生成機能を実現するオープンソースソフトウェア「ThinReports」を試用してみた記事を書きました。
今回は以前、Ruby + Prawn で作成したTwitter の自分のツイート一覧を作成するスクリプトを、 Ruby + ThinReports に変更してみました。
帳票デザイン
ThinReports Editor を使用して帳票のデザインを行います。 今回作成したデザインは以下のとおり。 【ファイル名:tweet_list.tlf】
Ruby スクリプト
今回作成した Ruby スクリプトの PDF 作成部分の抜粋です。 DB(MySQL)に保存してあるデータを取得する部分等の掲載は割愛しています。
#### [START] PDF作成処理 ####
# 作成するPDFファイル名
pdf_file = 'TweetList_' + date_f + "-" + date_t + '.pdf'
ThinReports::Report.generate_file( pdf_file ) do
use_layout 'tweet_list.tlf'
# ヘッダ
events.on :page_create do |e|
# 日付
e.page.item( :date_from ).value( date_f[0,4] + "/" + date_f[4,2] + "/" + date_f[6,2] )
e.page.item( :date_to ).value( date_t[0,4] + "/" + date_t[4,2] + "/" + date_t[6,2] )
# ページ番号
e.page.item( :page ).value( e.page.no )
end
# 総ページ数
events.on :generate do |e|
e.pages.each do |page|
page.item( :page_total ).value( e.report.page_count )
end
end
# ページ作成
start_new_page
# 取得データ分ループ
res.each do |data|
tweet_time = Time.parse( data[2].to_s ).strftime( "%Y/%m/%d %H:%M:%S" ) # Linux対応
page.list( :tweet_list ).add_row do |row|
row.item( :datetime ).value( tweet_time )
row.item( :tweet_id ).value( "ID[ #{data[0].to_s} ]" )
row.item( :source ).value( "Source[ #{Sanitize.clean(data[3].to_s)} ]" )
row.item( :detail ).value( "#{Kconv.toutf8( data[1].to_s )}" )
end
end
end
#### [E N D] PDF作成処理 ####
生成される PDF
上記の Ruby スクリプトで生成される PDF です。
綺麗にできました。
Prawn を使用した場合に生成される PDF
比較のため、以前 Ruby + Prawn で作成した PDF が以下。
問題点等
- PDF は簡単綺麗に生成されたのですが、今回の帳票のような場合、リスト内の各行は高さが異なる(行数がまちまち)ので、それぞれの行の高さ(行数)に合わせて DETAIL の高さが自動で調整されるとうれしい。
- もっと複雑な帳票を作成するには Prawn の方がよいかも?
という訳で、今回は上記1の理由により、Twitter の自分のツイート一覧は当面は Ruby + Prawn で行こうと思います。 (行の高さが自動で調整されるようになったら ThinReports を使用することにします)
以上。
Comments