Использование Prawn & Prawnto для генерации PDF-файлов Rails
-
20-09-2019 - |
Вопрос
Вероятно, это больше вопрос дизайна или использования, но основная проблема заключается в использовании плагина Prawn с Rails 2.3.4 и доступе к полученному объекту PDF для его рендеринга в файл.
Сценарий в основном;
- контроллер с настройкой блока response_to
- представление с кодом для рендеринга текста, графики и т. д. в PDF
Это выглядит как:
От контролера клиентов
def show
@customer = Customer.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @customer }
format.pdf { render :layout => false }
end
С точки зрения клиента
pdf.text "Hello World"
pdf.text "Customer is #{@customer.name}"
Это работает нормально, создавая PDF-файл в ответ на /customers/1.pdf, как и ожидалось, при создании PDF-файла.
Одним из других требований является преобразование PDF-файла в файл и сохранение копии на сервере.Креветка предоставляет метод:pdf.render_file {path_tofile}
Итак, теперь, если я включу это в код View, я, конечно, смогу сохранить файл на сервере.Но я бы хотел управлять этим в контроллере, поскольку это связано с логикой, а не с просмотром как таковым.
Первая попытка была:
def show
@customer = Customer.find(params[:id])
@pdf = Prawn::Document.new()
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @customer }
format.pdf { render :layout => false }
pdf.render_file {path_to_file}
end
С точки зрения клиента
pdf.text "Hello World"
pdf.text "Customer is #{@customer.name}"
ПРОБЛЕМАПроблема с этой попыткой заключается в том, что PDF-файл не отображается.Я подозревал, что переменная экземпляра контроллера конфликтует с плагином Prawnto. pdf
переменная.Но даже изменение переменной PDF не помогло.Какие-либо предложения ?
Решение
Вот как я использую креветки в своем приложении Rails: http://yob.id.au/2009/05/30/prawn-and-x-accel-redirect.html - здесь вообще не используются креветки.
Вы можете игнорировать X-Accel-Redirect, если не используете nginx.
В качестве альтернативы, другой из разработчиков ядра креветок составил это руководство: http://wiki.github.com/sandal/prawn/using-prawn-in-rails