11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Rails】wicked pdfの導入方法、ハマったところと対応

Last updated at Posted at 2020-02-14

##導入方法

Gemfile
gem 'wicked_pdf'
gem 'wkhtmltopdf-binary'
$ bundle install
$ rails g wicked_pdf
config/initializers/wicked_pdf.rb
WickedPdf.config = {
  :exe_path => "#{Gem.loaded_specs['wkhtmltopdf-binary'].full_gem_path}/bin/wkhtmltopdf"
}

ここで一度サーバーを再起動

pdfs_controller.rb
def bill
  respond_to do |format|
    format.pdf do
      render pdf: '請求書', # 出力されるpdfのファイル名
             layout: 'application', # レイアウトファイル
             encording: 'UTF-8',
             show_as_html: params[:debug].present? # デバッグ用。url末尾に`debug=1`をつけるとHTMLで表示できる
    end
  end
end
views/layouts/application.pdf.erb
<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8' />
  </head>
  <body>
    <div id="content">
      <%= yield %>
    </div>
  </body>
</html>
views/pdfs/bill.pdf.erb
<p>請求書</p>

<style>
p { font-size: 20px; }
</style>
routes.rb
get 'pdf/bill' #pdf/bill.pdfにアクセスすると動く

##ハマったところと対応
###フォントサイズが全部小さい
普段のノリでフォントサイズを指定すると、全部小さく表示されます。
フォントサイズを大きい数値に変更して対応。

###本番環境のみ、AssetPilelineのコンパイルエラー
レイアウト内のCSS、JS、mysite.jpg読み込み部分を全て削除。
CSSは全部インラインで記述。(別プロジェクトを作り、Sassで書き、コンパイルしたものをコピペする)

Docker環境で日本語が表示されない

Dockerfileを編集して、日本語フォントをインストール

Dockerfile
RUN apt-get install -y fonts-ipafont-mincho

###本番環境で日本語が表示されない
本番のサーバーに日本語フォントをインストールして対応

$ yum install -y ipa-gothic-fonts
$ yum install -y ipa-mincho-fonts

##その他注意点

  • flexboxが使えない
  • 画像、CSS、JS等のパスの指定方法が特殊
通常 wicked_pdf
cssファイル stylesheet_link_tag wicked_pdf_stylesheet_link_tag
jsファイル javascript_include_tag wicked_pdf_javascript_include_tag
imageファイル image_tag wicked_pdf_image_tag

##参考

11
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?