【Rails4】【heroku】PDFを生成する
目的
Railsで画面をPDFで出力できるようにする
herokuでも上記のことができる
1. PDF出力Gemの選定
いくつかあるが、今回は画面をそのままPDF出力できればよいのでPDFkitかWicked PDFの二択だった。
PDFkitの方がPDFを保存する方法が簡単そうだったのと、比較的開発が活発だったため。
2. Gemfile に以下を追記して、bundle installする
gem 'wkhtmltopdf-binary' gem 'pdfkit'
3. ViewをPDFで出力する
ほとんど他のサイトの通り。1点bootstrapを当てたい場合だけ補足。
# stylesheetはcssにコンパイルされたものしか反映されないよう(scssもダメだった)。bootstrapをgemでインストールしている場合の指定方法。 html = render_to_string template: "sample/show" pdf = PDFKit.new(html, encoding: "UTF-8") pdf.stylesheets << "#{Gem.loaded_specs['twitter-bootstrap-rails'].full_gem_path}/app/assets/stylesheets/twitter-bootstrap-static/bootstrap.css.erb" pdf.to_pdf # gemはvendor配下に入っているため、そのパスまで辿って指定した。herokuでも効いている。
4. エラーの対処
to_pdf したところで下記のエラーが出たので、その対応。
error while loading shared libraries: libfontconfig.so.1: cannot open shared object file: No such file or directory
ローカルの開発環境にライブラリが足りないらしいのでインストールした
yum install libXext libXrender fontconfig libfontconfig.so.1
5. 文字化けの対応
4まででPDFが出るようになったが、日本語が文字化けしているのでその対応
こちらのサイトのIPAフォントを入れる箇所をそのまま実行
6. Herokuでの文字化け対応
もちろん5は開発環境のみ有効。アプリのルート直下に.fontsディレクトリを作成して、5でインストールしたttfファイル2つをコピー
mkdir .fonts cp /usr/share/fonts/japanese/TrueType/*.ttf .fonts/
7. 以上をコミットしてheroku にpushすればherokuでもPDFが出力される
番外. ここまでたどり着くのに紆余曲折あったので、失敗した方法も記載する
herokuでもPDFが使えるようにするために、PDFkitのGithub wikiにある方法を実施したが、apt−getがどうのこうのでpush失敗。
次にgem wkhtmltopdf-heroku を使ったところ、herokuへのpushは成功したがherokuのDynoが消えた…
焦って、wkhtmltopdf-heroku 関連のコミットを削除したところheroku復活し事なきを得る。具体的に何が悪かったかは不明。
参考にしたサイトによるとbuildpack を使うとアプリが最悪壊れることもあるらしい。
後に6番の手法に辿り着いた。
Ruby/RailsでPDF作成Gemのまとめ - Rails Webook
GitHub - pdfkit/pdfkit: A Ruby gem to transform HTML + CSS into PDFs using the command-line utility wkhtmltopdf
http://d.hatena.ne.jp/deeeki/20120902/heroku_wkhtmltopdf_fonts
herokuで日本語フォントを奇麗に使うには? - Qiita