rbpdf gem library

17
RBPDF GEM ライブラリ TCPDF(PHP) RUBY に移植した話~ NAITOH Jun twitter: @naitoh 14921日日曜日

Upload: jun-naitoh

Post on 26-May-2015

5.580 views

Category:

Software


2 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Rbpdf gem library

RBPDF GEMライブラリ~TCPDF(PHP)をRUBYに移植した話~

NAITOH Juntwitter: @naitoh

14年9月21日日曜日

Page 2: Rbpdf gem library

社内の開発管理にRedmineを使用していたが、PDF出力が文字化けするなど使い物にならなかった。

2011.03.11の東日本大震災の後、時間があったので何かできることをやりたかった。

大昔、BePDF(XpdfのBeOS移植版)の日本語表示ができない問題を修正したことがあり、PDFの日本語処理の仕組みを少し知っていた。

移植の背景

14年9月21日日曜日

Page 3: Rbpdf gem library

https://bugs.ruby-lang.org/ で使用されています。

http://www.redmine.org/ で開発されている

Redmine

14年9月21日日曜日

Page 4: Rbpdf gem library

Redmine PDF出力機能

14年9月21日日曜日

Page 5: Rbpdf gem library

RubyのPDFライブラリPureRuby HTML対応 備考

Prawn ○ ×Pdfkit × ○ wkhtmltopdf使用

Wicked PDF × ○ wkhtmltopdf使用

Wkhtmltopdf × ○ Webkit使用rfpdf ○ △ Redmineで使用

14年9月21日日曜日

Page 6: Rbpdf gem library

Rails アプリを配布してインストールする形式

Windows/Linux で動作しないといけない

→ PureRuby 以外を使用するのはハードルが高い

Redmine の事情

14年9月21日日曜日

Page 7: Rbpdf gem library

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日日曜日

Page 8: Rbpdf gem library

rfpdf のfork 版(PHPで書かれたTCPDF 1.53.0.TC031ベースの移植版) https://github.com/edwinmoss/rfpdf/

TCPDFの機能でキリル語フォント問題を解決

日中韓言語使用時はrfpdfを使用するように修正

Windowsで動かなかったので修正。

PDFライブラリ変更

14年9月21日日曜日

Page 9: Rbpdf gem library

Redmine 1.3で修正対応Feature #69 Textilized description in PDF

Wiki記法がPDF出力で反映されない問題の議論

Feature #3261 support attachment images in PDF export

添付画像がPDFに表示されない問題の議論

14年9月21日日曜日

Page 10: Rbpdf gem library

TCPDFのHTML出力機能を使用。

Tableタグに未対応だったので自前で実装

画像タグに対応

HTMLパース対応

14年9月21日日曜日

Page 11: Rbpdf gem library

ベースのTCPDFのバージョンが古すぎる。

fork した edwinmoss さんが Prawn を使うようになったのでメンテナンスされなくなっていた。

自前で実装したTableタグの対応が、Table内のHTMLタグを処理できていなかった。

RTL(右から左に記述)言語などに未対応

気づいた問題

14年9月21日日曜日

Page 12: Rbpdf gem library

ベースのTCPDFのバージョンを上げる移植をすればいいのでは?

→TCPDF 5.2.0 をベースに移植を試みる。

どうしよう…

14年9月21日日曜日

Page 13: Rbpdf gem library

PHPのメソッドをひとつひとつRubyのメッソッドに変換する作業。(手作業)

半年頑張って、基本部分を変換できた。 (2012初頭~2012/夏)

移植してみた

→ 動かそうとしても、いつまでたってもRails/Rubyのエラーが無くならない。

→ エラーが出なくなったとしてもテストが無いので、正しく処理できているかわからない。

14年9月21日日曜日

Page 14: Rbpdf gem library

いっきに目的のバージョンを移植しようとしたからまずかったのでは?

段階的にバージョンを上げて動くのを確認しながら次へ進むのは?

どうしよう…(再)

14年9月21日日曜日

Page 15: Rbpdf gem library

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日日曜日

Page 16: Rbpdf gem library

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日日曜日

Page 17: Rbpdf gem library

Redmine 2.6 (次期リリース)で取込まれます。

3年ぐらいかかりましたが、とりあえず完了。

おしまい

14年9月21日日曜日