SlideShare a Scribd company logo
1 of 17
Download to read offline
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日日曜日

More Related Content

What's hot

20101211 gunma.web#3 LanguaGegenerationLoss
20101211 gunma.web#3 LanguaGegenerationLoss20101211 gunma.web#3 LanguaGegenerationLoss
20101211 gunma.web#3 LanguaGegenerationLossivoryworks .
 
私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46civicpg
 
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情PHP7の拡張モジュール事情
PHP7の拡張モジュール事情Yoshio Hanawa
 
Laravelのeloquent だけ入れた話
Laravelのeloquent だけ入れた話Laravelのeloquent だけ入れた話
Laravelのeloquent だけ入れた話Masataka Kono
 
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6健太 田上
 
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話 10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話 Masataka Kono
 
PyPy 紹介
PyPy 紹介PyPy 紹介
PyPy 紹介shoma h
 
組み込みプログラマとテスト駆動開発
組み込みプログラマとテスト駆動開発組み込みプログラマとテスト駆動開発
組み込みプログラマとテスト駆動開発bei_kan
 
歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事Masataka Kono
 
Pythonでラズパイのgpio制御
Pythonでラズパイのgpio制御Pythonでラズパイのgpio制御
Pythonでラズパイのgpio制御artk saga
 
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)parrotstudio
 
opencocon を使って RaspberryPi で艦これ
opencocon を使って RaspberryPi で艦これopencocon を使って RaspberryPi で艦これ
opencocon を使って RaspberryPi で艦これKenichiro MATOHARA
 
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49shoma h
 
Pythonで業務改善をしたときにあった問題(ライト版)
Pythonで業務改善をしたときにあった問題(ライト版)Pythonで業務改善をしたときにあった問題(ライト版)
Pythonで業務改善をしたときにあった問題(ライト版)Satoshi Yamada
 
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRubyKanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRubyShinichi Okada
 
Rubykaigi09 Webでるりまを検索するn個の方法
Rubykaigi09 Webでるりまを検索するn個の方法Rubykaigi09 Webでるりまを検索するn個の方法
Rubykaigi09 Webでるりまを検索するn個の方法Hiroaki NAKADA
 

What's hot (20)

Goをえらんだ理由
Goをえらんだ理由Goをえらんだ理由
Goをえらんだ理由
 
20101211 gunma.web#3 LanguaGegenerationLoss
20101211 gunma.web#3 LanguaGegenerationLoss20101211 gunma.web#3 LanguaGegenerationLoss
20101211 gunma.web#3 LanguaGegenerationLoss
 
私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46
 
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情PHP7の拡張モジュール事情
PHP7の拡張モジュール事情
 
Laravelのeloquent だけ入れた話
Laravelのeloquent だけ入れた話Laravelのeloquent だけ入れた話
Laravelのeloquent だけ入れた話
 
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
 
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話 10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
 
CakePHPとYii_エンジニア勉強会20130820
CakePHPとYii_エンジニア勉強会20130820CakePHPとYii_エンジニア勉強会20130820
CakePHPとYii_エンジニア勉強会20130820
 
PyPy 紹介
PyPy 紹介PyPy 紹介
PyPy 紹介
 
組み込みプログラマとテスト駆動開発
組み込みプログラマとテスト駆動開発組み込みプログラマとテスト駆動開発
組み込みプログラマとテスト駆動開発
 
歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事
 
Pythonでラズパイのgpio制御
Pythonでラズパイのgpio制御Pythonでラズパイのgpio制御
Pythonでラズパイのgpio制御
 
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
 
20130120cacoo
20130120cacoo20130120cacoo
20130120cacoo
 
opencocon を使って RaspberryPi で艦これ
opencocon を使って RaspberryPi で艦これopencocon を使って RaspberryPi で艦これ
opencocon を使って RaspberryPi で艦これ
 
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
 
Pythonで業務改善をしたときにあった問題(ライト版)
Pythonで業務改善をしたときにあった問題(ライト版)Pythonで業務改善をしたときにあった問題(ライト版)
Pythonで業務改善をしたときにあった問題(ライト版)
 
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRubyKanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
 
Rubykaigi09 Webでるりまを検索するn個の方法
Rubykaigi09 Webでるりまを検索するn個の方法Rubykaigi09 Webでるりまを検索するn個の方法
Rubykaigi09 Webでるりまを検索するn個の方法
 
Shizuoka go lang csp
Shizuoka go lang cspShizuoka go lang csp
Shizuoka go lang csp
 

Viewers also liked

情報システム部門のタスク管理とIT全般統制 ~ Excel管理からの脱却 ~ (ITS Redmine #RxTstudy #5)
情報システム部門のタスク管理とIT全般統制 ~ Excel管理からの脱却 ~ (ITS Redmine #RxTstudy #5)情報システム部門のタスク管理とIT全般統制 ~ Excel管理からの脱却 ~ (ITS Redmine #RxTstudy #5)
情報システム部門のタスク管理とIT全般統制 ~ Excel管理からの脱却 ~ (ITS Redmine #RxTstudy #5)Kuniharu(州晴) AKAHANE(赤羽根)
 
Redmineチューニングの実際と限界(旧資料) - Redmine performance tuning(old), See Below.
Redmineチューニングの実際と限界(旧資料) - Redmine performance tuning(old), See Below.Redmineチューニングの実際と限界(旧資料) - Redmine performance tuning(old), See Below.
Redmineチューニングの実際と限界(旧資料) - Redmine performance tuning(old), See Below.Kuniharu(州晴) AKAHANE(赤羽根)
 
講演1 Redmine導入のアンチパターン
講演1 Redmine導入のアンチパターン講演1 Redmine導入のアンチパターン
講演1 Redmine導入のアンチパターンHidehisa Matsutani
 
Redmine.tokyo 第7回勉強会 ディスカッション
Redmine.tokyo 第7回勉強会 ディスカッションRedmine.tokyo 第7回勉強会 ディスカッション
Redmine.tokyo 第7回勉強会 ディスカッションTomohisa Kusukawa
 
Redmine 260 300_new_feature
Redmine 260 300_new_featureRedmine 260 300_new_feature
Redmine 260 300_new_featureJun Naitoh
 
Redmine.tokyo 07 open_discussion
Redmine.tokyo 07 open_discussionRedmine.tokyo 07 open_discussion
Redmine.tokyo 07 open_discussionJun Naitoh
 
Redmineはキャズムを超える -日経SYSTEMS寄稿の思い-
Redmineはキャズムを超える -日経SYSTEMS寄稿の思い- Redmineはキャズムを超える -日経SYSTEMS寄稿の思い-
Redmineはキャズムを超える -日経SYSTEMS寄稿の思い- Makoto SAKAI
 
Redmineのスマホアプリ RedminePM
Redmineのスマホアプリ RedminePMRedmineのスマホアプリ RedminePM
Redmineのスマホアプリ RedminePMproject mode, Inc.
 
Redmine.tokyo 07 questionnaire
Redmine.tokyo 07 questionnaireRedmine.tokyo 07 questionnaire
Redmine.tokyo 07 questionnaireJun Naitoh
 
Redmine + gitlab: merge base development
Redmine + gitlab: merge base developmentRedmine + gitlab: merge base development
Redmine + gitlab: merge base developmentsmdkk
 
【第7回redmine.tokyo勉強会】RedmineのFAQとアンチパターン集~WBS駆動からチケット駆動へ
【第7回redmine.tokyo勉強会】RedmineのFAQとアンチパターン集~WBS駆動からチケット駆動へ【第7回redmine.tokyo勉強会】RedmineのFAQとアンチパターン集~WBS駆動からチケット駆動へ
【第7回redmine.tokyo勉強会】RedmineのFAQとアンチパターン集~WBS駆動からチケット駆動へakipii Oga
 
Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13Sho Douhashi
 
灰かぶりチケットはシンデレラに成り得るか?
灰かぶりチケットはシンデレラに成り得るか?灰かぶりチケットはシンデレラに成り得るか?
灰かぶりチケットはシンデレラに成り得るか?ishikawa_mizuki
 
Gitはじめの一歩
Gitはじめの一歩Gitはじめの一歩
Gitはじめの一歩Ayana Yokota
 
ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理H2O Space. Co., Ltd.
 
チケットの利用による経験を活かした開発の可能性
チケットの利用による経験を活かした開発の可能性 チケットの利用による経験を活かした開発の可能性
チケットの利用による経験を活かした開発の可能性 Makoto SAKAI
 
OpenAPI development with Python
OpenAPI development with PythonOpenAPI development with Python
OpenAPI development with PythonTakuro Wada
 
怖くない? オープンソースへの貢献
怖くない? オープンソースへの貢献怖くない? オープンソースへの貢献
怖くない? オープンソースへの貢献ishikawa_mizuki
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
Redmine tokyo #13 LT
Redmine tokyo #13 LT Redmine tokyo #13 LT
Redmine tokyo #13 LT Asako Yanuki
 

Viewers also liked (20)

情報システム部門のタスク管理とIT全般統制 ~ Excel管理からの脱却 ~ (ITS Redmine #RxTstudy #5)
情報システム部門のタスク管理とIT全般統制 ~ Excel管理からの脱却 ~ (ITS Redmine #RxTstudy #5)情報システム部門のタスク管理とIT全般統制 ~ Excel管理からの脱却 ~ (ITS Redmine #RxTstudy #5)
情報システム部門のタスク管理とIT全般統制 ~ Excel管理からの脱却 ~ (ITS Redmine #RxTstudy #5)
 
Redmineチューニングの実際と限界(旧資料) - Redmine performance tuning(old), See Below.
Redmineチューニングの実際と限界(旧資料) - Redmine performance tuning(old), See Below.Redmineチューニングの実際と限界(旧資料) - Redmine performance tuning(old), See Below.
Redmineチューニングの実際と限界(旧資料) - Redmine performance tuning(old), See Below.
 
講演1 Redmine導入のアンチパターン
講演1 Redmine導入のアンチパターン講演1 Redmine導入のアンチパターン
講演1 Redmine導入のアンチパターン
 
Redmine.tokyo 第7回勉強会 ディスカッション
Redmine.tokyo 第7回勉強会 ディスカッションRedmine.tokyo 第7回勉強会 ディスカッション
Redmine.tokyo 第7回勉強会 ディスカッション
 
Redmine 260 300_new_feature
Redmine 260 300_new_featureRedmine 260 300_new_feature
Redmine 260 300_new_feature
 
Redmine.tokyo 07 open_discussion
Redmine.tokyo 07 open_discussionRedmine.tokyo 07 open_discussion
Redmine.tokyo 07 open_discussion
 
Redmineはキャズムを超える -日経SYSTEMS寄稿の思い-
Redmineはキャズムを超える -日経SYSTEMS寄稿の思い- Redmineはキャズムを超える -日経SYSTEMS寄稿の思い-
Redmineはキャズムを超える -日経SYSTEMS寄稿の思い-
 
Redmineのスマホアプリ RedminePM
Redmineのスマホアプリ RedminePMRedmineのスマホアプリ RedminePM
Redmineのスマホアプリ RedminePM
 
Redmine.tokyo 07 questionnaire
Redmine.tokyo 07 questionnaireRedmine.tokyo 07 questionnaire
Redmine.tokyo 07 questionnaire
 
Redmine + gitlab: merge base development
Redmine + gitlab: merge base developmentRedmine + gitlab: merge base development
Redmine + gitlab: merge base development
 
【第7回redmine.tokyo勉強会】RedmineのFAQとアンチパターン集~WBS駆動からチケット駆動へ
【第7回redmine.tokyo勉強会】RedmineのFAQとアンチパターン集~WBS駆動からチケット駆動へ【第7回redmine.tokyo勉強会】RedmineのFAQとアンチパターン集~WBS駆動からチケット駆動へ
【第7回redmine.tokyo勉強会】RedmineのFAQとアンチパターン集~WBS駆動からチケット駆動へ
 
Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13
 
灰かぶりチケットはシンデレラに成り得るか?
灰かぶりチケットはシンデレラに成り得るか?灰かぶりチケットはシンデレラに成り得るか?
灰かぶりチケットはシンデレラに成り得るか?
 
Gitはじめの一歩
Gitはじめの一歩Gitはじめの一歩
Gitはじめの一歩
 
ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理
 
チケットの利用による経験を活かした開発の可能性
チケットの利用による経験を活かした開発の可能性 チケットの利用による経験を活かした開発の可能性
チケットの利用による経験を活かした開発の可能性
 
OpenAPI development with Python
OpenAPI development with PythonOpenAPI development with Python
OpenAPI development with Python
 
怖くない? オープンソースへの貢献
怖くない? オープンソースへの貢献怖くない? オープンソースへの貢献
怖くない? オープンソースへの貢献
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
Redmine tokyo #13 LT
Redmine tokyo #13 LT Redmine tokyo #13 LT
Redmine tokyo #13 LT
 

Similar to Rbpdf gem library

2011年10月21日
2011年10月21日2011年10月21日
2011年10月21日nukaemon
 
Perl (OSC2011 Tokyo/Spring, Doc-ja)
Perl (OSC2011 Tokyo/Spring, Doc-ja)Perl (OSC2011 Tokyo/Spring, Doc-ja)
Perl (OSC2011 Tokyo/Spring, Doc-ja)Masaharu IWAI
 
Building document with the Sphinx public edtion
Building document with the Sphinx public edtionBuilding document with the Sphinx public edtion
Building document with the Sphinx public edtionYukihiko SAWANOBORI
 
エンジニア×デザイナー GitHubで変わるコミュニケーション(PHPカンファレンス2014 P4Dセッション)
エンジニア×デザイナー GitHubで変わるコミュニケーション(PHPカンファレンス2014 P4Dセッション)エンジニア×デザイナー GitHubで変わるコミュニケーション(PHPカンファレンス2014 P4Dセッション)
エンジニア×デザイナー GitHubで変わるコミュニケーション(PHPカンファレンス2014 P4Dセッション)Hiroyuki Yamaoka
 
Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Ouka Yuka
 
Phpでアプリケーションサーバー
PhpでアプリケーションサーバーPhpでアプリケーションサーバー
Phpでアプリケーションサーバーk-motoyan
 
Sphinxを使って本を書こう #pyconjp 2012
Sphinxを使って本を書こう #pyconjp 2012Sphinxを使って本を書こう #pyconjp 2012
Sphinxを使って本を書こう #pyconjp 2012Takayuki Shimizukawa
 
App Engine と いまどきのPHP
App Engine と いまどきのPHPApp Engine と いまどきのPHP
App Engine と いまどきのPHPsokamo1975
 
次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発shoma h
 
ReVIEWを用いたPDFとEPUBへの変換について
ReVIEWを用いたPDFとEPUBへの変換についてReVIEWを用いたPDFとEPUBへの変換について
ReVIEWを用いたPDFとEPUBへの変換についてmasayoshi takahashi
 
Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介Shinya Okano
 
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイドYAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイドkeroyonn
 
PHP 8 で Web 以外の世界の扉を叩く
PHP 8 で Web 以外の世界の扉を叩くPHP 8 で Web 以外の世界の扉を叩く
PHP 8 で Web 以外の世界の扉を叩くshinjiigarashi
 
PHPカンファレンス2015
PHPカンファレンス2015PHPカンファレンス2015
PHPカンファレンス2015Daisuke Kasuya
 
Linux で写真を操作 - 写真の管理、現像、投稿 -
Linux で写真を操作 - 写真の管理、現像、投稿 -Linux で写真を操作 - 写真の管理、現像、投稿 -
Linux で写真を操作 - 写真の管理、現像、投稿 -Kenichiro MATOHARA
 
PHPとJavaScriptの噺
PHPとJavaScriptの噺PHPとJavaScriptの噺
PHPとJavaScriptの噺Shogo Kawahara
 
爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話Shohei Tai
 
Google IO 2012 つまみ食い(1) ADT r20 の新機能
Google IO 2012 つまみ食い(1) ADT r20 の新機能Google IO 2012 つまみ食い(1) ADT r20 の新機能
Google IO 2012 つまみ食い(1) ADT r20 の新機能Takuya Fujimura
 

Similar to Rbpdf gem library (19)

2011年10月21日
2011年10月21日2011年10月21日
2011年10月21日
 
Perl (OSC2011 Tokyo/Spring, Doc-ja)
Perl (OSC2011 Tokyo/Spring, Doc-ja)Perl (OSC2011 Tokyo/Spring, Doc-ja)
Perl (OSC2011 Tokyo/Spring, Doc-ja)
 
Building document with the Sphinx public edtion
Building document with the Sphinx public edtionBuilding document with the Sphinx public edtion
Building document with the Sphinx public edtion
 
エンジニア×デザイナー GitHubで変わるコミュニケーション(PHPカンファレンス2014 P4Dセッション)
エンジニア×デザイナー GitHubで変わるコミュニケーション(PHPカンファレンス2014 P4Dセッション)エンジニア×デザイナー GitHubで変わるコミュニケーション(PHPカンファレンス2014 P4Dセッション)
エンジニア×デザイナー GitHubで変わるコミュニケーション(PHPカンファレンス2014 P4Dセッション)
 
Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!
 
Phpでアプリケーションサーバー
PhpでアプリケーションサーバーPhpでアプリケーションサーバー
Phpでアプリケーションサーバー
 
Sphinxを使って本を書こう #pyconjp 2012
Sphinxを使って本を書こう #pyconjp 2012Sphinxを使って本を書こう #pyconjp 2012
Sphinxを使って本を書こう #pyconjp 2012
 
App Engine と いまどきのPHP
App Engine と いまどきのPHPApp Engine と いまどきのPHP
App Engine と いまどきのPHP
 
次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発
 
ReVIEWを用いたPDFとEPUBへの変換について
ReVIEWを用いたPDFとEPUBへの変換についてReVIEWを用いたPDFとEPUBへの変換について
ReVIEWを用いたPDFとEPUBへの変換について
 
Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介
 
OSC福岡 20111203
OSC福岡 20111203OSC福岡 20111203
OSC福岡 20111203
 
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイドYAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
 
PHP 8 で Web 以外の世界の扉を叩く
PHP 8 で Web 以外の世界の扉を叩くPHP 8 で Web 以外の世界の扉を叩く
PHP 8 で Web 以外の世界の扉を叩く
 
PHPカンファレンス2015
PHPカンファレンス2015PHPカンファレンス2015
PHPカンファレンス2015
 
Linux で写真を操作 - 写真の管理、現像、投稿 -
Linux で写真を操作 - 写真の管理、現像、投稿 -Linux で写真を操作 - 写真の管理、現像、投稿 -
Linux で写真を操作 - 写真の管理、現像、投稿 -
 
PHPとJavaScriptの噺
PHPとJavaScriptの噺PHPとJavaScriptの噺
PHPとJavaScriptの噺
 
爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話
 
Google IO 2012 つまみ食い(1) ADT r20 の新機能
Google IO 2012 つまみ食い(1) ADT r20 の新機能Google IO 2012 つまみ食い(1) ADT r20 の新機能
Google IO 2012 つまみ食い(1) ADT r20 の新機能
 

More from Jun Naitoh

Redmine.tokyo23 questionnaire
Redmine.tokyo23 questionnaireRedmine.tokyo23 questionnaire
Redmine.tokyo23 questionnaireJun Naitoh
 
Redmine.tokyo22 questionnaire
Redmine.tokyo22 questionnaireRedmine.tokyo22 questionnaire
Redmine.tokyo22 questionnaireJun Naitoh
 
Redmine.tokyo21 questionnaire
Redmine.tokyo21 questionnaireRedmine.tokyo21 questionnaire
Redmine.tokyo21 questionnaireJun Naitoh
 
Redmine.tokyo 20 questionnaire
Redmine.tokyo 20 questionnaireRedmine.tokyo 20 questionnaire
Redmine.tokyo 20 questionnaireJun Naitoh
 
Redmine.tokyo 19 questionnaire
 Redmine.tokyo 19 questionnaire Redmine.tokyo 19 questionnaire
Redmine.tokyo 19 questionnaireJun Naitoh
 
Redmine.tokyo 18 questionnaire
 Redmine.tokyo 18 questionnaire Redmine.tokyo 18 questionnaire
Redmine.tokyo 18 questionnaireJun Naitoh
 
Redmine.tokyo 17 questionnaire
Redmine.tokyo 17 questionnaireRedmine.tokyo 17 questionnaire
Redmine.tokyo 17 questionnaireJun Naitoh
 
Redmine.tokyo 16 questionnaire
Redmine.tokyo 16 questionnaireRedmine.tokyo 16 questionnaire
Redmine.tokyo 16 questionnaireJun Naitoh
 
RubyData Tokyo Meetup 2018 naitoh
RubyData Tokyo Meetup 2018 naitohRubyData Tokyo Meetup 2018 naitoh
RubyData Tokyo Meetup 2018 naitohJun Naitoh
 
Redmine.tokyo 15 questionnaire
 Redmine.tokyo 15 questionnaire Redmine.tokyo 15 questionnaire
Redmine.tokyo 15 questionnaireJun Naitoh
 
Redmine.tokyo 14 questionnaire
 Redmine.tokyo 14 questionnaire Redmine.tokyo 14 questionnaire
Redmine.tokyo 14 questionnaireJun Naitoh
 
Redmine.tokyo 13 questionnaire
Redmine.tokyo 13 questionnaireRedmine.tokyo 13 questionnaire
Redmine.tokyo 13 questionnaireJun Naitoh
 
Reject kaigi2017 naitoh
Reject kaigi2017 naitohReject kaigi2017 naitoh
Reject kaigi2017 naitohJun Naitoh
 
Redmine 310 320_new_feature
Redmine 310 320_new_featureRedmine 310 320_new_feature
Redmine 310 320_new_featureJun Naitoh
 
Redmine.tokyo 09 questionnaire
Redmine.tokyo 09 questionnaireRedmine.tokyo 09 questionnaire
Redmine.tokyo 09 questionnaireJun Naitoh
 
Redmine 300 310_new_feature
Redmine 300 310_new_featureRedmine 300 310_new_feature
Redmine 300 310_new_featureJun Naitoh
 
Redmine.tokyo 08 questionnaire
Redmine.tokyo 08 questionnaireRedmine.tokyo 08 questionnaire
Redmine.tokyo 08 questionnaireJun Naitoh
 

More from Jun Naitoh (18)

Redmine.tokyo23 questionnaire
Redmine.tokyo23 questionnaireRedmine.tokyo23 questionnaire
Redmine.tokyo23 questionnaire
 
Redmine.tokyo22 questionnaire
Redmine.tokyo22 questionnaireRedmine.tokyo22 questionnaire
Redmine.tokyo22 questionnaire
 
Redmine.tokyo21 questionnaire
Redmine.tokyo21 questionnaireRedmine.tokyo21 questionnaire
Redmine.tokyo21 questionnaire
 
Redmine.tokyo 20 questionnaire
Redmine.tokyo 20 questionnaireRedmine.tokyo 20 questionnaire
Redmine.tokyo 20 questionnaire
 
Redmine.tokyo 19 questionnaire
 Redmine.tokyo 19 questionnaire Redmine.tokyo 19 questionnaire
Redmine.tokyo 19 questionnaire
 
Redmine.tokyo 18 questionnaire
 Redmine.tokyo 18 questionnaire Redmine.tokyo 18 questionnaire
Redmine.tokyo 18 questionnaire
 
Redmine.tokyo 17 questionnaire
Redmine.tokyo 17 questionnaireRedmine.tokyo 17 questionnaire
Redmine.tokyo 17 questionnaire
 
Redmine.tokyo 16 questionnaire
Redmine.tokyo 16 questionnaireRedmine.tokyo 16 questionnaire
Redmine.tokyo 16 questionnaire
 
RubyData Tokyo Meetup 2018 naitoh
RubyData Tokyo Meetup 2018 naitohRubyData Tokyo Meetup 2018 naitoh
RubyData Tokyo Meetup 2018 naitoh
 
Redmine.tokyo 15 questionnaire
 Redmine.tokyo 15 questionnaire Redmine.tokyo 15 questionnaire
Redmine.tokyo 15 questionnaire
 
Redmine.tokyo 14 questionnaire
 Redmine.tokyo 14 questionnaire Redmine.tokyo 14 questionnaire
Redmine.tokyo 14 questionnaire
 
Redmine.tokyo 13 questionnaire
Redmine.tokyo 13 questionnaireRedmine.tokyo 13 questionnaire
Redmine.tokyo 13 questionnaire
 
Reject kaigi2017 naitoh
Reject kaigi2017 naitohReject kaigi2017 naitoh
Reject kaigi2017 naitoh
 
Redmine 310 320_new_feature
Redmine 310 320_new_featureRedmine 310 320_new_feature
Redmine 310 320_new_feature
 
Redmine.tokyo 09 questionnaire
Redmine.tokyo 09 questionnaireRedmine.tokyo 09 questionnaire
Redmine.tokyo 09 questionnaire
 
Redmine 300 310_new_feature
Redmine 300 310_new_featureRedmine 300 310_new_feature
Redmine 300 310_new_feature
 
Redmine.tokyo 08 questionnaire
Redmine.tokyo 08 questionnaireRedmine.tokyo 08 questionnaire
Redmine.tokyo 08 questionnaire
 
Redmine admin
Redmine adminRedmine admin
Redmine admin
 

Rbpdf gem library