【问题标题】:Save prawn pdf in rails app在 Rails 应用程序中保存虾 pdf
【发布时间】:2015-08-28 07:20:46
【问题描述】:

我正在使用 prawn gem 生成 PDF,我的应用程序显示页面中有此链接 show.html.slim = link_to "PDF", post_path(@post, :format => 'pdf'), :target => "_blank

我的后期控制器显示方法

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

结束

我的show.pdf.prawn 页面有:

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

......

当我转到显示页面时,我希望 pdf 自动保存到我的应用程序中的 app/assets/pdf folder

请提出建议。

【问题讨论】:

    标签: ruby-on-rails prawn


    【解决方案1】:

    respond_to块后添加虾保存:

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

    【讨论】:

      【解决方案2】:

      您似乎可以使用render_to_string 对您的架构进行最小的修改:

      # 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
      

      【讨论】:

        【解决方案3】:

        按照 prawn-rails 文档中的建议(也适用于 prawn_plus)。

        #controller
        format.pdf do
          headers["Content-Disposition"] = "attachment; filename=\"charts-#{Time.now.to_i}.pdf\""
        end
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-05
          相关资源
          最近更新 更多