Railsでwickedpdfを用いてPDF出力する方法

More than 5 years have passed since last update.


はじめに

wickedpdfは、HTMLでレンダリングしたページをそのままpdf化することができるライブラリです。railsで使いやすい感じで設計されている印象を受けました。

デフォルトでは日本語が表示されない仕様となっているので、そこの部分も含め以下で使い方を書いていきます。


実行環境


  • CentOS 5.6

  • Ruby 2.1.0

  • Ruby on Rails 4.1.1


下準備


Gemインストール

はじめにGemfileに使用するgemを書いて、bundle installします。

~ vim Gemfile


Gemfile

# add 2 lines

gem 'wkhtmltopdf-binary'
gem 'wicked_pdf'

~ bundle install


パス設定

config/initializersにwicked_pdf.rbというファイルを作成し、パスを記述します。


wicked_pdf.rb

WickedPdf.config = {

:exe_path => "#{Gem.loaded_specs['wkhtmltopdf-binary'].full_gem_path}/bin/wkhtmltopdf"
}

以上で下準備は完了です。


使い方


controllerでの設定

基本的にはpdfを使用したいcontrollerにて.pdfでアクセスされた際の処理を書くだけです。また、出力の際の細かいオプションなどについてはこちらのAdvanced Usage with all available optionsを参考にしてください。

今回は最小限の設定だけ書きます。

respond_to do |format|

format.html
format.pdf do
render :pdf => 'file_name', # 出力される際のファイル名
:template => 'manuals/show.pdf.erb', # どのViewファイルを使用するか
:layout => 'pdf.html.erb', # どのレイアウトファイルを使用するか
:encoding => 'UTF-8' # 日本語を使う場合は指定してください
end
end

これで必要なViewとレイアウトを作成し、.pdfでアクセスするとPDF形式で表示されるはずです。

なお、ViewやレイアウトではRailsのタグが使用できないため、ここは置き換える必要があります。

主要なタグに関しては以下で詳しく書きます。


タグについて

wickedpdfではrailsでよく使うタグを使用することができません。出力の際にjs, css, imageを使用する場合は以下のタグで置き換えて記述する必要があります。

# js

<%= wicked_pdf_javascript_include_tag "filename" %>

# css
<%= wicked_pdf_stylesheet_link_tag "filename" %>

# image
<%= wicked_pdf_image_tag 'filename' %>


日本語対応

このままではおそらく日本語のみ表示がされないかと思います。原因はLinuxに日本語が入っていないことです。日本語フォントをインストールします。

~ yum install -y ipa-gothic-fonts

~ yum install -y ipa-mincho-fonts

これで日本語も問題なく表示されるようになったかと思います。


参考