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