Использование Prawn & Prawnto для Rails генерация PDF - PullRequest
1 голос
/ 17 декабря 2009

Вероятно, это скорее вопрос дизайна или использования, но основная проблема заключается в использовании плагина Prawn с Rails 2.3.4 и доступе к полученному объекту PDF для его рендеринга в файл.

Сценарий в основном;

  • контроллер с настройкой ответа_блока
  • представление с кодом для рендеринга текста, графики и т. Д. В 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 не сработало. Есть предложения?

1 Ответ

3 голосов
/ 17 декабря 2009

Вот как я использую креветки в моем приложении 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

...