【问题标题】:Using Prawn & Prawnto for Rails PDF generation使用 Prawn & Prawnto 生成 Rails PDF
【发布时间】:2010-12-27 12:47:06
【问题描述】:

这可能更多是设计或使用问题,但主要问题是在 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 Plugin pdf 变量发生冲突。但即使更改 PDF 变量也不起作用。 有什么建议吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-plugins prawn prawnto


    【解决方案1】:

    这就是我在 Rails 应用程序中使用 prawn 的方式: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

    【讨论】:

    • 詹姆斯,感谢您提供的信息。两篇文章都对替代方法进行了很好的平衡。
    猜你喜欢
    • 2011-01-07
    • 2010-11-18
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多