« Inkscape 0.47 正式版出た! | トップページ | あるドメインに参加しているWindows機の共有フォルダをMacにマウントする方法? »

2009/11/28

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」に変更すると動きますので、ご利用時にはご注意下さい。

もし他にも修正の必要な箇所がありましたら、コメントなどでご指摘いただけると助かります。

|

« Inkscape 0.47 正式版出た! | トップページ | あるドメインに参加しているWindows機の共有フォルダをMacにマウントする方法? »

コメント

おかげさまでなんとか帳票っぽいのができましたー。
ありがとです。

投稿: そめい | 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

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/79953/46894241

この記事へのトラックバック一覧です: RubyとPrawnでPDFに線を引く:

« Inkscape 0.47 正式版出た! | トップページ | あるドメインに参加しているWindows機の共有フォルダをMacにマウントする方法? »