【问题标题】:Rails, Prawn - PDF show up in browser & etcRails, Prawn - PDF 显示在浏览器等中
【发布时间】:2011-09-03 10:40:40
【问题描述】:

我正在尝试理解 Prawn pdf gem。

我能够让它生成一个 pdf。 gemfile 中的每个 gem 包括:

gem 'mysql', '~> 2.8.1'
gem 'prawn', '~> 0.12.0'
gem 'pdf-reader', '~> 0.10.0'
gem 'Ascii85', '~> 1.0.1'

在 config/application.rb 中:

config.autoload_paths << "#{Rails.root}/app/reports"

然后在控制器中:

 require 'prawn'

 def index
  pdf = Prawn::Document.new
  pdf.text "Hello World"
  pdf.render_file "x.pdf"
 end

比我调用索引函数。在我的应用程序的根目录中创建了一个名为 x.pdf 的 PDF。在 gemfile、rakefile 和 config.ru 中。

问题:

  1. 如何强制 prawn 在 app/report(或任何其他选定的)文件夹中生成文件?
  2. 如何在浏览器窗口中生成文件而不保存?
  3. 如何让它保存并显示在浏览器窗口中?

【问题讨论】:

    标签: ruby-on-rails-3 pdf prawn


    【解决方案1】:

    如何强制 prawn 在 app/report(或任何其他选定的)文件夹中生成文件?

    def index
      pdf = Prawn::Document.new
      pdf.text "Hello World"
      pdf.render_file File.join(Rails.root, "app/report", "x.pdf")
    end
    

    如何在浏览器窗口中生成文件而不保存?

    def index
      pdf = Prawn::Document.new
      pdf.text "Hello World"
      send_data pdf.render, :filename => "x.pdf", :type => "application/pdf"
    end
    

    如何让它保存并显示在浏览器窗口中?

    def index
      pdf = Prawn::Document.new
      pdf.text "Hello World"
      filename = File.join(Rails.root, "app/report", "x.pdf")
      pdf.render_file filename
      send_file filename, :filename => "x.pdf", :type => "application/pdf"
    end
    

    【讨论】:

    • 嗨,对我来说,它不会保存在那个文件夹中。但它去那里找到那个pdf是否存在?有什么解决方案可以将 pdf 存储在公用文件夹中?
    • 在 send_data 你应该添加选项 :disposition => 'inline'
    【解决方案2】:

    回答问题 3:“我怎样才能让它保存并显示在浏览器窗口中?”

    def index
      pdf = Prawn::Document.new
      pdf.text 'Hello World'
      send_data pdf.render, filename: 'x.pdf', type: 'application/pdf', disposition: 'inline'
    end
    

    disposition: 'inline' 将强制浏览器(如果可以的话)在当前浏览器窗口中显示您的 PDF

    【讨论】:

      【解决方案3】:

      试试这个:

       def index
        pdf = Prawn::Document.new
        pdf.text "Hello World"
        send_data pdf.render, :filename => "x.pdf", :type => "application/pdf"
       end
      

      也就是说,除了简单的 PDF 之外,您可能希望在控制器之外的某个地方生成它。

      【讨论】:

        猜你喜欢
        • 2014-06-18
        • 1970-01-01
        • 1970-01-01
        • 2012-04-11
        • 1970-01-01
        • 1970-01-01
        • 2014-06-25
        • 2011-06-18
        • 2017-12-28
        相关资源
        最近更新 更多