mk-mode BLOG

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

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

Ruby - PrawnでPDF作成!

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

こんばんは。

今日はRubyでPDFを出力するテストをしてみました。

調べてみると色々と方法があるようですが、一番資料があって理解しやすそうだったGemパッケージ「Prawn」を使用する方法をとりました。

以下の作業手順はWindowsXP上のRubyでのものですが、Linuxサーバでも同様の手順で可能です。

以下が手順です。

作業手順

前提条件

  • OS は WindowsXP SP3 ( Linuxでも同様 )
  • Ruby は 1.9.2-p290 がインストールされている。

1.Prawn のインストール

コマンドプロンプトで以下のようにしてGemパッケージ「Prawn」をでインストールする。

1
gem install prawn

2.フォントインストール

IPAフォントのダウンロード || OSS iPediaからIPAフォント(ttfファイル)をダウンロードし、これから作成するttfファイルをアクセス可能な場所へ配置する。 当方は、とりあえず「IPA明朝」「IPA P明朝」「IPAゴシック」「IPA Pゴシック」の4書体パックをダウンロードし・解凍し、全部をRubyスクリプト作成予定のフォルダへ配置しました。(実際は必要なフォントのみでよい)

3.コーディング

Rubyスクリプトのコーディングを行います。 “Prawn::Document.generate・・・"というコーディング方法と"Prawn::Document.new・・・"というインスタンス化する方法とあるようです。 参考のために両方の記述例を以下に掲載します。 ●test_pdf_1.rb ( "Prawn::Document.generate・・・” )

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
# -*- coding:utf-8 -*-
begin
    require 'rubygems'
rescue LoadError
end
require 'prawn'

FONT_FILE = 'ipamp.ttf'  # フォントファイル設定(IPA P明朝)
PDF_FILE  = 'test_1.pdf' # 作成するPDFファイル名

Prawn::Document.generate( PDF_FILE,
  :page_size       => "A4",      # 用紙サイズ
  :page_layout     => :portrait, # 用紙向き ( 縦:portrait、横:landscape )
  :left_margin     => 20,        # 余白(左)
  :right_margin    => 20  ) do   # 余白(右)

  # フォント指定
  font FONT_FILE

  # オプション指定無しでテキスト出力
  text "Hello, Prawn World!!" * 8

  # 下へ20px移動
  move_down 20

  # 中央揃え、フォントサイズ72pt
  text "テ ス ト", :align => :center, :size => 72

  # 下へ10px移動
  move_down 10

  # このような記述も可能
  font_size( 36 ) do
    text "薔薇。" * 14
  end

  # 頁内の左下からXY座標を指定可能
  draw_text 'Welcome in Prawn!', :at => [100,250]
  draw_text 'Welcome in Prawn!', :at => [150,200]

  # オプション指定無しでテキスト出力
  text "RubyでPDF! " * 180

  # 下へ50px移動
  move_down 50

  # 罫線
  stroke_horizontal_rule

  # 3回ループ
  3.times do |i|
    text "-" * 89
    text "  #{i} !!!!TEST!!!! !!!!テスト!!!!"
  end

  # 下へ10px移動
  move_down 10

  # 罫線
  stroke_horizontal_rule

end

●test_pdf_2.rb ( “Prawn::Document.new・・・” )

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 -*-
begin
    require 'rubygems'
rescue LoadError
end
require 'prawn'

FONT_FILE = 'ipag.ttf'   # フォントファイル設定(IPA ゴシック)
PDF_FILE  = 'test_2.pdf' # 作成するPDFファイル名

# pdfオブジェクトを生成
pdf = Prawn::Document.new(
  :page_size       => "A4",      # 用紙サイズ
  :page_layout     => :portrait, # 用紙向き ( 縦:portrait、横:landscape )
  :left_margin     => 20,        # 余白(左)
  :right_margin    => 20         # 余白(右)
)

pdf.font FONT_FILE

# オプション指定無しでテキスト出力
pdf.text "Hello, Prawn World!!" * 8

# 下へ20px移動
pdf.move_down 20

# 中央揃え、フォントサイズ72pt
pdf.text "テ ス ト", :align => :center, :size => 72

# 下へ10px移動
pdf.move_down 10

# このような記述も可能
pdf.font_size( 36 ) do
  pdf.text "薔薇。" * 14
end

# 頁内の左下からXY座標を指定可能
pdf.draw_text 'Welcome in Prawn!', :at => [100,250]
pdf.draw_text 'Welcome in Prawn!', :at => [150,200]

# オプション指定無しでテキスト出力
pdf.text "RubyでPDF! " * 180

# 下へ50px移動
pdf.move_down 50

# 罫線
pdf.stroke_horizontal_rule

# 3回ループ
3.times do |i|
  pdf.text "-" * 89
  pdf.text "  #{i} !!!!TEST!!!! !!!!テスト!!!!"
end

# 下へ10px移動
pdf.move_down 10

# 罫線
pdf.stroke_horizontal_rule

pdf.render_file( PDF_FILE )

※この2つはまったく同じ結果となります。今回は見栄えを変えるためフォントを異なるものにしてみました。

実行・確認

コマンドプロンプトで作成したRubyスクリプトの存在するフォルダへ移動して実行してみる。

1
2
ruby test_pdf_1.rb
ruby test_pdf_2.rb

以下のようなPDFが作成されればOK。 (一部、文字が重なっている部分がありますが、こんなこともできますよ、という意図的なものです。)

参考にしたサイト


作業は以上です。 今回は簡単なPDF作成例しか紹介していませんが、実際はイメージを挿入したり、表を作成したりと色々できるようです。

いつか近いうちにもっとちゃんとした(?)PDFを作成してみたいとも思っています。

以上。

Comments