RBPDF GEMライブラリ 
~TCPDF(PHP)をRUBYに移植した話~ 
NAITOH Jun 
twitter: @naitoh 
14年9月21日日曜日
移植の背景 
社内の開発管理にRedmineを使用していたが、PDF 
出力が文字化けするなど使い物にならなかった。 
2011.03.11の東日本大震災の後、時間があったので何 
かできることをやりたかった。 
大昔、BePDF(XpdfのBeOS移植版)の日本語表示がで 
きない問題を修正したことがあり、PDFの日本語処 
理の仕組みを少し知っていた。 
14年9月21日日曜日
Redmine 
https://bugs.ruby-lang.org/ で使用されています。 
http://www.redmine.org/ で開発されている 
14年9月21日日曜日
Redmine PDF出力機能 
14年9月21日日曜日
RubyのPDFライブラリ 
PureRuby HTML対応備考 
Prawn ○ × 
Pdfkit × ○ wkhtmltopdf使用 
Wicked PDF × ○ wkhtmltopdf使用 
Wkhtmltopdf × ○ Webkit使用 
rfpdf ○ △ Redmineで使用 
14年9月21日日曜日
Redmine の事情 
Rails アプリを配布してインストールする形式 
Windows/Linux で動作しないといけない 
→ PureRuby 以外を使用するのはハードルが高い 
14年9月21日日曜日
Redmine 1.2で修正対応 
Defect #61 Broken character encoding in pdf export 
キリル語フォントなどの文字化けの問題を修正するため 
Redmineで使用しているPDFライブラリ変更についての 
議論 
Defect #6506 PDF export broken with Japanese 
(Gannt and Issue Tracking) 
日本語文字化け問題の議論 
14年9月21日日曜日
PDFライブラリ変更 
rfpdf のfork 版(PHPで書かれたTCPDF 1.53.0.TC031 
ベースの移植版) https://github.com/edwinmoss/rfpdf/ 
TCPDFの機能でキリル語フォント問題を解決 
日中韓言語使用時はrfpdfを使用するように修正 
Windowsで動かなかったので修正。 
14年9月21日日曜日
Redmine 1.3で修正対応 
Feature #69 Textilized description in PDF 
Wiki記法がPDF出力で反映されない問題の議論 
Feature #3261 support attachment images in PDF 
export 
添付画像がPDFに表示されない問題の議論 
14年9月21日日曜日
HTMLパース対応 
TCPDFのHTML出力機能を使用。 
Tableタグに未対応だったので自前で実装 
画像タグに対応 
14年9月21日日曜日
気づいた問題 
ベースのTCPDFのバージョンが古すぎる。 
fork した edwinmoss さんが Prawn を使うようにな 
ったのでメンテナンスされなくなっていた。 
自前で実装したTableタグの対応が、Table内の 
HTMLタグを処理できていなかった。 
RTL(右から左に記述)言語などに未対応 
14年9月21日日曜日
どうしよう… 
ベースのTCPDFのバージョンを上げる移植をすれば 
いいのでは? 
→TCPDF 5.2.0 をベースに移植を試みる。 
14年9月21日日曜日
移植してみた 
PHPのメソッドをひとつひとつRubyのメッソッドに 
変換する作業。(手作業) 
半年頑張って、基本部分を変換できた。 (2012初頭~ 
2012/夏) 
→ 動かそうとしても、いつまでたってもRails/Ruby 
のエラーが無くならない。 
→ エラーが出なくなったとしてもテストが無いの 
で、正しく処理できているかわからない。 
14年9月21日日曜日
どうしよう…(再) 
いっきに目的のバージョンを移植しようとしたから 
まずかったのでは? 
段階的にバージョンを上げて動くのを確認しながら 
次へ進むのは? 
14年9月21日日曜日
移植してみた(再) 
TCPDFのソースコードがバージョン管理されている 
のは 4.5.032以降。(それ以前のバージョンをネット 
にちらばっているのを頑張って捜索。) 
TCPDF 2.2を移植してうまく動いたのでedwinmossさ 
んから開発を引き継ぐ。 
1.53.0.TC031 → 2.2 → 2.5 → 2.7 → 3.0 → 3.1 → 3.2 → 
4.0 → 4.5.032 
4.5.032→ 4.6 → 4.7 → 4.8 → 4.9 → 5.0 → 5.1 
(4.5.032以降はコミット単位にバージョンアップ) 
14年9月21日日曜日
rbpdf gem 公開 
https://rubygems.org/gems/rbpdf 
https://github.com/naitoh/rbpdf 
TCPDF 5.1.002 ベース 
Pure Ruby 
HTMLタグサポート (CSS一部サポート) 
RTLサポート 
PNG/JPEG/GIF画像サポート(一部要RMagick) 
ライセンスはLGPL 2.1 or later 
14年9月21日日曜日
おしまい 
Redmine 2.6 (次期リリース)で取込まれます。 
3年ぐらいかかりましたが、とりあえず完了。 
14年9月21日日曜日

Rbpdf gem library