Rails, Prawn - PDF отображаются в браузере и т. Д. - PullRequest
15 голосов
/ 03 сентября 2011

Я пытаюсь понять самоцвет prawn pdf.

Я смог заставить его сгенерировать pdf.Каждый драгоценный камень в файле включает:

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

Чем я звонюиндексная функция.Файл PDF с именем x.pdf создается в корне моего приложения.Среди гемфайлов, rakefile и config.ru.

Вопрос:

  1. Как заставить креветку сгенерировать файл в папке приложения / отчета (или любой другой выбранной)?
  2. Как я могу сделатьдействие, чтобы сгенерировать файл в окне браузера и не сохранять его?
  3. Как его сохранить и отобразить в окне браузера?

Ответы [ 3 ]

32 голосов
/ 03 сентября 2011

Как я могу заставить 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
17 голосов
/ 08 июня 2012

Ответ на вопрос 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 в текущем окне браузера

0 голосов
/ 03 сентября 2011

Попробуйте это:

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

Тем не менее, для всего, кроме тривиального PDF, вы, вероятно, захотите сгенерировать его где-нибудь вне контроллера.

...