Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
41
Help us understand the problem. What is going on with this article?
@yupsy

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

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

参考

41
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
41
Help us understand the problem. What is going on with this article?