Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Rbpdf gem library

23,167 views

Published on

Ruby Hiroba 2014 LTthon で発表した内容です。

Published in: Software
  • Be the first to comment

Rbpdf gem library

  1. 1. RBPDF GEMライブラリ ~TCPDF(PHP)をRUBYに移植した話~ NAITOH Jun twitter: @naitoh 14年9月21日日曜日
  2. 2. 移植の背景 社内の開発管理にRedmineを使用していたが、PDF 出力が文字化けするなど使い物にならなかった。 2011.03.11の東日本大震災の後、時間があったので何 かできることをやりたかった。 大昔、BePDF(XpdfのBeOS移植版)の日本語表示がで きない問題を修正したことがあり、PDFの日本語処 理の仕組みを少し知っていた。 14年9月21日日曜日
  3. 3. Redmine https://bugs.ruby-lang.org/ で使用されています。 http://www.redmine.org/ で開発されている 14年9月21日日曜日
  4. 4. Redmine PDF出力機能 14年9月21日日曜日
  5. 5. RubyのPDFライブラリ PureRuby HTML対応備考 Prawn ○ × Pdfkit × ○ wkhtmltopdf使用 Wicked PDF × ○ wkhtmltopdf使用 Wkhtmltopdf × ○ Webkit使用 rfpdf ○ △ Redmineで使用 14年9月21日日曜日
  6. 6. Redmine の事情 Rails アプリを配布してインストールする形式 Windows/Linux で動作しないといけない → PureRuby 以外を使用するのはハードルが高い 14年9月21日日曜日
  7. 7. 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日日曜日
  8. 8. PDFライブラリ変更 rfpdf のfork 版(PHPで書かれたTCPDF 1.53.0.TC031 ベースの移植版) https://github.com/edwinmoss/rfpdf/ TCPDFの機能でキリル語フォント問題を解決 日中韓言語使用時はrfpdfを使用するように修正 Windowsで動かなかったので修正。 14年9月21日日曜日
  9. 9. Redmine 1.3で修正対応 Feature #69 Textilized description in PDF Wiki記法がPDF出力で反映されない問題の議論 Feature #3261 support attachment images in PDF export 添付画像がPDFに表示されない問題の議論 14年9月21日日曜日
  10. 10. HTMLパース対応 TCPDFのHTML出力機能を使用。 Tableタグに未対応だったので自前で実装 画像タグに対応 14年9月21日日曜日
  11. 11. 気づいた問題 ベースのTCPDFのバージョンが古すぎる。 fork した edwinmoss さんが Prawn を使うようにな ったのでメンテナンスされなくなっていた。 自前で実装したTableタグの対応が、Table内の HTMLタグを処理できていなかった。 RTL(右から左に記述)言語などに未対応 14年9月21日日曜日
  12. 12. どうしよう… ベースのTCPDFのバージョンを上げる移植をすれば いいのでは? →TCPDF 5.2.0 をベースに移植を試みる。 14年9月21日日曜日
  13. 13. 移植してみた PHPのメソッドをひとつひとつRubyのメッソッドに 変換する作業。(手作業) 半年頑張って、基本部分を変換できた。 (2012初頭~ 2012/夏) → 動かそうとしても、いつまでたってもRails/Ruby のエラーが無くならない。 → エラーが出なくなったとしてもテストが無いの で、正しく処理できているかわからない。 14年9月21日日曜日
  14. 14. どうしよう…(再) いっきに目的のバージョンを移植しようとしたから まずかったのでは? 段階的にバージョンを上げて動くのを確認しながら 次へ進むのは? 14年9月21日日曜日
  15. 15. 移植してみた(再) 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日日曜日
  16. 16. 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日日曜日
  17. 17. おしまい Redmine 2.6 (次期リリース)で取込まれます。 3年ぐらいかかりましたが、とりあえず完了。 14年9月21日日曜日

×