Rails, креветка - PDF отображается в браузере и т.д.

Феллас, я пытаюсь овладеть креветкой pdf gem.

Хорошо, я далек от мастера lvl. Мне удалось создать PDF файл. Каждый драгоценный камень в gemfile включал:

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 создается в корне моего приложения. Среди gemfile, rakefile и config.ru.

Вопрос:

  • Как заставить креветку генерировать файл в папке приложения/отчета (или любой другой)?
  • Как я могу сделать действие для создания файла в окне браузера и не сохранять его?
  • Как я могу сделать это для сохранения и отображения в окне браузера?

Твой, Каэль

Ответы

Ответ 1

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

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

Ответ 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, вы, вероятно, захотите создать его вне контроллера где-нибудь.