rbpdf gem library
DESCRIPTION
Ruby Hiroba 2014 LTthon で発表した内容です。TRANSCRIPT
RBPDF GEMライブラリ~TCPDF(PHP)をRUBYに移植した話~
NAITOH Juntwitter: @naitoh
14年9月21日日曜日
社内の開発管理にRedmineを使用していたが、PDF出力が文字化けするなど使い物にならなかった。
2011.03.11の東日本大震災の後、時間があったので何かできることをやりたかった。
大昔、BePDF(XpdfのBeOS移植版)の日本語表示ができない問題を修正したことがあり、PDFの日本語処理の仕組みを少し知っていた。
移植の背景
14年9月21日日曜日
https://bugs.ruby-lang.org/ で使用されています。
http://www.redmine.org/ で開発されている
Redmine
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日日曜日
Rails アプリを配布してインストールする形式
Windows/Linux で動作しないといけない
→ PureRuby 以外を使用するのはハードルが高い
Redmine の事情
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日日曜日
rfpdf のfork 版(PHPで書かれたTCPDF 1.53.0.TC031ベースの移植版) https://github.com/edwinmoss/rfpdf/
TCPDFの機能でキリル語フォント問題を解決
日中韓言語使用時はrfpdfを使用するように修正
Windowsで動かなかったので修正。
PDFライブラリ変更
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日日曜日
TCPDFのHTML出力機能を使用。
Tableタグに未対応だったので自前で実装
画像タグに対応
HTMLパース対応
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日日曜日
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
rbpdf gem 公開
14年9月21日日曜日
Redmine 2.6 (次期リリース)で取込まれます。
3年ぐらいかかりましたが、とりあえず完了。
おしまい
14年9月21日日曜日