【Rails4】【heroku】PDFを生成する

環境

Rails 4.1.8
CentOS(開発環境)
heroku

目的

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