1

这可能更多是设计或使用问题,但主要问题是在 Rails 2.3.4 中使用 Prawn 插件并访问生成的 PDF 对象以将其呈现为文件。

场景基本上是;

  • 具有 respond_to 块设置的控制器
  • 带有代码的视图,用于将文本、图形等呈现为 PDF

它看起来像:
来自客户控制器

def show    
    @customer = Customer.find(params[:id])  

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @customer }
      format.pdf  { render :layout => false  }
end

从客户角度

  pdf.text "Hello World"  
  pdf.text "Customer is #{@customer.name}"

这工作正常,生成一个响应 /customers/1.pdf 的 PDF 文件,正如预期的那样,生成了一个 PDF 文件。

其他要求之一是将 pdf 呈现为文件并将副本存储在服务器上。大虾提供的方法: pdf.render_file {path_tofile}

所以现在如果我将它包含在查看代码中,我当然可以将文件保存在服务器上。但我想在控制器中管理它,因为它与逻辑有关,而不是视图本身。

第一次尝试是:

def show    
   @customer = Customer.find(params[:id])
   @pdf = Prawn::Document.new()  

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @customer }
      format.pdf  { render :layout => false  }
      pdf.render_file {path_to_file}
end

从客户角度

  pdf.text "Hello World"  
  pdf.text "Customer is #{@customer.name}"

问题 此尝试的问题是未呈现 PDF。我怀疑 Controller 实例变量与 Prawnto Pluginpdf变量发生冲突。但即使更改 PDF 变量也不起作用。有什么建议么 ?

4

1 回答 1

3

这就是我在 Rails 应用程序中使用虾的方式:http: //yob.id.au/2009/05/30/prawn-and-x-accel-redirect.html - 它根本不使用 prawnto。

除非您使用 nginx,否则您可以忽略 X-Accel-Redirect 的内容。

或者,另一位对虾核心开发人员整理了本指南:http ://wiki.github.com/sandal/prawn/using-prawn-in-rails

于 2009-12-17T10:06:07.600 回答