RubyとPrawnでPDFに線を引く
RFPDFからPrawnに移行して、いろいろと使っていますが、こなれてくると何の問題も感じなくなってきました。
特に日本語の扱いで、余計なところに頭を悩ませないところがいいですね。
ということで、知人にPrawnを紹介してみたら、線の描画でコードの書き方をど忘れしてしまったので、備忘のためにブログの記事にしておきます。
PrawnのWebサイトとはちょっと違う書き方をサンプルにしてみました。
下記のコードを実行する前にIPAフォントの最新版ではなくTTF版をダウンロードして、ソースと同じフォルダに入れておいて下さい。
#!/usr/bin/ruby require 'rubygems' require 'prawn' require 'prawn/measurement_extensions' #PDFの初期化 pdf = Prawn::Document.new(:page_size => "A4", :page_layout => :landscape) #明朝体での文字列出力 pdf.font "ipam.ttf" pdf.text "表ソフトPDFがきちんと出力されるかテスト", :at => [100,200], :size => 24 #ゴシック体での文字列出力 pdf.font "ipag.ttf" pdf.text "フォントを変えて出力してみたり...", :at => [100,300], :size => 16 #普通の直線を書いてみる pdf.line_width = 1 pdf.line [100,100], [200, 200] pdf.line [100,100], [100, 200] pdf.stroke #破線を書いてみる pdf.dash = 5 pdf.line_width = 3 pdf.line [30.mm,10.mm], [2.mm, 2.mm] pdf.line [30.mm,10.mm], [10.mm, 20.mm] pdf.stroke #ファイルの生成 pdf.render_file("sample.pdf")
少し説明をすると、位置の設定は基本的にポイントという単位で行いますが、エクステンションをrequireすることで簡単に単位を変換する事ができます。
textにおける:at => [left, top]が文字列を表示する位置の指定になるのですが、これは先頭文字の左下を指定することになりますので、ご注意下さい。
また、lineの数値は始点と終点の順番で
line [felt, top], [left, top]
という意味になっています。
dashの指定をすると、指定した長さ毎の破線を描画でき、dash = 0 とすると普通の直線に戻ります。
帳票や一覧を作成する時にとても便利。
どうですか?PDFの生成でお困りの方がおられましたら、Prawnを使ってみられませんか
##### 追記 #####
投稿当時のPrawnのバージョンは0.6でしたが2014年1月のバージョンは0.14で上記のスクリプトはそのままでは動かなくなっているようです。
既知の対策として、「pdf.text」の部分を「pdf.draw_text」に変更すると動きますので、ご利用時にはご注意下さい。
もし他にも修正の必要な箇所がありましたら、コメントなどでご指摘いただけると助かります。
| 固定リンク
この記事へのコメントは終了しました。
コメント
おかげさまでなんとか帳票っぽいのができましたー。
ありがとです。
投稿: そめい | 2009/12/03 13:46
そめいさん、コメントありがとうございます。
僕も最近はPrawnにお世話になっていて、これは作者様のためにもユーザー増加に協力せねばと思っていたところなので、Prawnを利用して頂いていると聞いて、少し嬉しくなりました。
また、良かったら情報交換させて下さい。
投稿: きむらしのぶ | 2009/12/04 05:30
Prawライブラリを使用するにあたり、参考させていただいています。
上記サンプルで、
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
#明朝体での文字列出力
pdf.font "ipam.ttf"
pdf.text "表ソフトPDFがきちんと出力されるかテスト", :at => [100,200], :size => 24
#ゴシック体での文字列出力
pdf.font "ipag.ttf"
pdf.text "フォントを変えて出力してみたり...", :at => [100,300], :size => 16
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
の「pdf.text」が間違っています。
ライブラリを確認したところ、「pdf.draw_text」でした。
textメソッドには「:at」が無いため、エラーになってしまいました。
修正してみては如何でしょうか?
投稿: momoziro | 2014/01/31 19:16
momoziroさん、コメントありがとうございます。
ご指摘のとおり、textはdraw_textに置き換わってますね。
投稿当時のバージョンから随分と変更があるようで、そのままでは動かないスクリプトになっていました。
全てを修正できたらいいのですが、とりあえずご指摘のあった部分は修正しておきますね!
もし、他にもおかしなところがあれば、教えていただけると助かります。
投稿: きむらしのぶ | 2014/02/02 09:30