4

我所拥有的是响应 html 和 pdf 文件格式的控制器操作,如下所示:

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

但是当我得到文件时它带有名称:1.pdf 2.pdf取决于params[:id]我如何将文件名设置为myfile.pdf

- 更新 -

detail.pdf.prawn我的文件示例


pdf.font "Helvetica"
pdf.image open("http://localhost:3000/images/myImage.png"),:position => :left,:width=>100
pdf.text "some text"
pdf.table(someData,:cell_style => { :border_width => 0.1,:border_color=> 'C1C1C1' }) do |table|
    table.row(0).style :background_color => 'D3D3D3'
    table.column(0..1).style(:align => :left)
    table.column(2..4).style(:align => :center)
    table.column(0).width = 100
    table.column(1).width = 250
    table.column(3..4).width = 68
    table.row(2).column(0..2).borders = []
    table.row(2).column(3).style(:font_style => :bold, :align => :right)
end

并且format.pdf { render :layout => false }在控制器中呈现 de pdf 文件,其中包含以下说明detail.pdf.prawn

4

4 回答 4

5

要详细说明 fl00r 的答案,如果您使用 prawnto,pdf 设置参数可以进入您的控制器,包括文件名。

def detail
 @record = Model.find(params[:id])
 prawnto :prawn => { :page_size => 'A4', 
                     :left_margin => 50,    
                     :right_margin => 50,   
                     :top_margin => 80,    
                     :bottom_margin => 50}, 
             :filename => @record.name, :inline => true #or false


      respond_to do |format|
         format.html # detail.html.erb
         format.pdf { render :layout => false } #detail.pdf.prawn
      end
   end

如果您正在使用 prawnto 创建大量不同的 pdf,您可能会将配置移到它自己的方法中。但如果你只做一个,在控制器中就可以了。

注意:PDF url 仍将显示例如 1.pdf 但是当他们保存 PDF 时,文件名参数将显示在保存框对话框中。

于 2011-04-20T14:11:58.243 回答
0

真的很感谢,这篇文章对我以前的pdf 方式很有帮助。还有另一种使用prawnRails 的方法。你可以检查哦这个链接。不是我的,但是制作它的好教程。只是说可能对那些仍然混淆如何制作它的人来说。

我之前使用过这种方法,然后我从那个链接继续使用方法。对它进行一些研究真的很有趣。

于 2013-10-29T08:20:17.720 回答
0
prawnto :filename => "myfile", :prawn => {
  ...
}
于 2011-04-18T20:35:10.580 回答
0

如果是 prawn-rails 或 prawn_plus,您可以在控制器中执行以下操作。

headers["Content-Disposition"] = "attachment; filename=\"myfile.pdf\""
于 2021-11-14T08:14:41.430 回答