Rails,Prawn - PDF显示在浏览器和放大器中等等

时间:2011-09-03 10:40:40

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

我正在尝试了解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. 如何保存并显示在浏览器窗口中?

3 个答案:

答案 0 :(得分:32)

如何强制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

答案 1 :(得分:16)

回答问题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

答案 2 :(得分:0)

试试这个:

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

那就是说,除了一个微不足道的PDF之外,你可能想要在某个地方的控制器之外生成它。