忙しい人向けに
コントローラのRenderする箇所をこんな感じで書いてやれば良い
pdf = render_to_string pdf: "#{params[:id]}.pdf", #PDFファイル名
template: "xxx/show.pdf.erb", #ビューファイル
encoding: "UTF-8",
layout: "pdf.html" #レイアウトファイル
send_data(pdf) #ファイルのDL開始
詳しく
PDFを出力してくれるgemであるwicked_pdfは大変便利だ。
他のPrawnのように独自DSLを使うことなくErbやHamlでPDFを生成出来て非常に効率がよい
Railsのプロジェクトでwicked_pdfを使ってPDFを出力する場合は、普通にrenderしてしまうと
- フォームボタン押下
- PDFのページに遷移
- PDFをブラウザ操作で「ファイル名前をつけて保存」などしてPCに保存
と言う流れになる、これはこれで中身を確認してからDLできるのでよいが
- フォームのボタン押下
- PDFダウンロード開始
と言うように一段階ステップを少なくしたい
wicked pdf って何とか、環境構築する場合はこちらが参考にしてください
RailsアプリでPDFを出力する (Heroku対応)
対象のコード
PDF表示版(通常)
xxx_controller.rb
def show
@some_model = SomeModel.new(params)
respond_to do |format|
format.html { redirect_to xxx_path(format: :pdf, debug: 1) }
format.pdf do
render pdf: "#{params[:id]}",
encoding: "UTF-8",
layout: "pdf.html",
show_as_html: params[:debug].present? # デバッグ用 パラメタにdebug=1とあるとHTMLを開く
end
end
end
PDFダウンロード版
xxx_controller.rb
def show
@some_model = SomeModel.new(params)
respond_to do |format|
format.html { redirect_to xxx_path(format: :pdf, debug: 1) }
format.pdf do
# デバッグ用 パラメタにdebug=1とあるとHTMLを開く
if params[:debug].present?
render pdf: "#{params[:id]}",
encoding: "UTF-8",
layout: "pdf.html",
show_as_html: true
# ここで、PDFを生成してクライアントに送る
else
pdf = render_to_string pdf: "#{params[:id]}.pdf", #PDFファイル名
template: "xxx/show.pdf.erb", #ビューファイル
encoding: "UTF-8",
layout: "pdf.html" #レイアウトファイル
send_data(pdf) #ファイルのDL開始
end
end
end
end
refs: