Ruby - PrawnでPDF作成!
Updated:
今日はRubyでPDFを出力するテストをしてみました。
調べてみると色々と方法があるようですが、一番資料があって理解しやすそうだったGemパッケージ「Prawn」を使用する方法をとりました。
以下の作業手順はWindowsXP上のRubyでのものですが、Linuxサーバでも同様の手順で可能です。
以下が手順です。
作業手順
前提条件
- OS は WindowsXP SP3 ( Linuxでも同様 )
- Ruby は 1.9.2-p290 がインストールされている。
1.Prawn のインストール
コマンドプロンプトで以下のようにしてGemパッケージ「Prawn」をでインストールする。
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・・・” )
# -*- 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・・・” )
# -*- 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スクリプトの存在するフォルダへ移動して実行してみる。
ruby test_pdf_1.rb
ruby test_pdf_2.rb
以下のようなPDFが作成されればOK。 (一部、文字が重なっている部分がありますが、こんなこともできますよ、という意図的なものです。)
- test_pdf_1.rb の結果 → test_1.pdf
- test_pdf_2.rb の結果 → test_2.pdf
参考にしたサイト
- Prawn
- 猫ぐらし: Ruby de Pdf
- RubyでPDF出力 - 適当に哲学書とやらを読んでみる - Yahoo!ブログ
- prawn のサンプル (ruby での PDF 生成): katoy: cocolog
作業は以上です。 今回は簡単なPDF作成例しか紹介していませんが、実際はイメージを挿入したり、表を作成したりと色々できるようです。
いつか近いうちにもっとちゃんとした(?)PDFを作成してみたいとも思っています。
以上。
Comments