ruby 1.9.3 + libharu 2.1.0 + 手軽に高橋メソッドな PDF v2
高橋メソッドをやろうと思う
↓
Google Docsのプレゼンテーションはフォントサイズに限界値があることを知る
↓
変換ツール(手軽に高橋メソッドな PDF v2)を見つける
↓
結構古いので動かすのに手間取る
↓
動いた←いまここ
というわけで、忘れないうちにメモを残しておきます。
試した環境はさくらVPS、rvm使ってruby1.9.3をインストール済
1. libharu 2.1.0のインストール
現時点で最新は2.3.0RC2、Stableでも2.2.1があるっぽいですが、元サイトにあるパッチが2.1.0用なので2.1.0を取ってきてインストールします。
png.hが必要になるので入ってない場合はlibpngをインストール。後はいつもの通り。
$ sudo yum install libpng $ sudo yum install libpng-devel $ wget http://libharu.org/files/libharu-2.1.0.tar.gz $ tar zxvf libharu-2.1.0.tar.gz $ cd libharu-2.1.0
手軽に高橋メソッドな PDF v2の最後に載っているパッチをpatch.txtとして用意し、パッチ適用。
$ patch -p0 < ../patch.txt $ ./configure $ make $ sudo make install
2. rubyインターフェイスのインストール
続いてrubyからhpdfを使えるように。
ただ、libhpdf 2.1.0付属のをそのまま入れると、STR2CSTRマクロがなくなっている為にruby 1.9系ではエラる。
ruby: symbol lookup error: /usr/local/rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/x86_64-linux/hpdf.so: undefined symbol: STR2CSTR
ので、先にSTR2CSTRをStringValuePtrに置換してからインストール。
$ cd libharu-2.1.0/if/ruby/ $ vi hpdf.c # 全置換 $ ruby extconf.rb $ make $ make install
3. 手軽に高橋メソッドな PDF v2を入れる
手軽に高橋メソッドな PDF v2からソースをコピペして実行ファイルのt2pdf.rbと、入力データとなるt5.txtを作成。
t2pdf.rbを幾つか修正。変更点は以下の通り
- rvm使ってるのでrubyのパスを変更
- ソースコードをUTF8で保存するのでMagic comment追加
- 入力ファイルのデフォルトをUTF8に(というかめんどいのでEUC-JP対応を消して入れかえ)
--- t2pdf.rb 2012-06-04 00:50:28.954321256 +0900 +++ t2pdf.rb.bak 2012-06-04 00:43:42.867116231 +0900 @@ -1,5 +1,4 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- +#! /usr/local/bin/ruby -Ke # /home/tetsu/src/ruby/pdf/t5pdf.rb # created: April 15,2007 Sunday 23:26:24 # author: tetsu(WATANABE Tetsuya) @@ -25,11 +24,11 @@ # Ruby 1.9 系なら不要ですが、文字化けを回避するために入力も固定 class String - def w2s - NKF.nkf('-Ws', self) + def e2s + NKF.nkf('-Es', self) end - def s2w - NKF.nkf('-Sw', self) + def s2e + NKF.nkf('-Se', self) end end @@ -175,7 +174,7 @@ @jp_font = @pdf.get_font('MS-PGothic', @encode) @font_h['MS-PGothic'] = @jp_font @encoder = @pdf.get_encoder(@encode) - @root = @pdf.create_outline(nil, '目次'.w2s, @encoder); + @root = @pdf.create_outline(nil, '目次'.e2s, @encoder); @page_size = HPDFDoc::HPDF_PAGE_SIZE_A4 @page_direction = HPDFDoc::HPDF_PAGE_LANDSCAPE @m = 20 @@ -253,7 +252,7 @@ break end end - @pdf.create_outline(@root, @pagenumber.to_s + ' ' + msg.w2s, @encoder).set_destination(page.create_destination) if msg + @pdf.create_outline(@root, @pagenumber.to_s + ' ' + msg.e2s, @encoder).set_destination(page.create_destination) if msg end def logo_load(filename) @@ -378,7 +377,7 @@ arr.each_index do |i| if arr[i] =~ /^\/\/h (.+)$/ - l = $1.w2s + l = $1.e2s x = (w - page.text_width(l)) / 2 page.set_rgb_fill(*color_make(@h_color)) page.begin_text @@ -397,7 +396,7 @@ page.set_font_and_size(@jp_font, size) y = 2 - l = a.w2s + l = a.e2s x = (w - page.text_width(l)) / 2 page.set_rgb_fill(*color_make(@h_color)) page.begin_text @@ -420,7 +419,7 @@ if l =~ /^(.+):(http:\/\/\S+)$/ l = $1 end - text_width = page.text_width(l.w2s) + text_width = page.text_width(l.e2s) len = text_width if text_width > len end @@ -449,7 +448,7 @@ l = $1 url = $2 end - l = l.w2s + l = l.e2s # 行頭が半角スペースの場合ソースコード用 x = if l[0, 1] == ' ' l[0] = '' @@ -571,7 +570,7 @@ while b = f.gets("\n\n") if opt_SJIS - b = b.s2w + b = b.s2e end b_arr.push(b) end
4. 動作確認
$ chmod a+x t2pdf.rb $ ./t2pdf.rb -p -n t5.txt
t5.pdfができてればOK。PDFの中身を確認して文字化けしてる場合は元ファイルがUTF-8になっているか確認を。