2
votes

I am using prawn gem to generate PDF and i have this link in my app show page show.html.slim = link_to "PDF", post_path(@post, :format => 'pdf'), :target => "_blank

My post controller show method

def show
@post = post.find(params[:id])
respond_to do |format|
    format.html # show.html.erb
    format.pdf { render :layout => false}
end

end

My show.pdf.prawn page has:

font("app/assets/fonts/DejaVuSans.ttf") do

table [["Title \n #{@post.title}"], [''], ['Summary']], cell_style: {  size: 14, bold: :true }, row_colors: ['F0F0F0'], column_widths: [540] do
row(0).align = :center
row(0).size = 16
row(0).background_color = '93AAD9'
self.header = true

row(2).align = :center
row(2).background_color = 'DEB8A5'

end

......

I want the pdf to be saved automatically to app/assets/pdf folder in my app when i go to show page.

Please suggest.

2

2 Answers

0
votes

Add prawn save after respond_to block:

filename = File.join(Rails.root, "app/assets/pdf_folder", "x.pdf")
send_file filename, :filename => "x.pdf", :type => "application/pdf" 
0
votes

It seems that you can use render_to_string for a minimal modifications to your architecture:

# controller code
format.pdf do
  filename = Rails.root + "app/assets/posts/#{params[:id].to_i}.pdf"
  unless File.exists?(filename)
    File.write(filename, render_to_string)
  end

  send_file filename, :filename => "post_#{params[:id].to_i}.pdf", :type => "application/pdf"
end