Создание файлов PDF файлов в приложениях Ruby on Rails
Динамическая генерация PDF файлов очень полезна, когда нужно создать файл отчета илисохранить данные в удобном виде. Для этого существует такой плагин в Ruby on Rails «pdf-writer». Итак, разберемся как с ним работать. 1. Установим его в приложение. Для этого нужно ввести команду «gem install pdf-writer» C:\myproject>gem install pdf-writer Successfully installed pdf-writer-1.1.8 1 gem installed Installing ri documentation for pdf-writer-1.1.8... Installing RDoc documentation for pdf-writer-1.1.8... 2. После установки, необходимо отредактировать файл «environment.rb»
И поместить в него такие строки:
require 'pdf/writer'
Mime::Type.register 'application/pdf', :pdf
Первая подключает этот плагин к нашему приложению, а вторая устанавливает новый тип данных Mime, с которыми оно будет работать. 3. На конец, самое главное,- собственно генератор PDF файлов в приложении. В файле app/controllers/application.rb пишем вспомогательный метод:
def render_to_pdf(options = nil) data = render_to_string(options) pdf = PDF::HTMLDoc.new pdf.set_option :bodycolor, :white pdf.set_option :toc, false pdf.set_option :portrait, true pdf.set_option :links, false pdf.set_option :webpage, true pdf.set_option :left, '2cm' pdf.set_option :right, '2cm' pdf << data pdf.generate end
Этот метод будет использоваться при генерировании PDF файл. Он принимает данные и превращает их в файл.
4. Затем мы редактируем стандартный метод «index» нашего приложения:
def index @goods = Good.find(:all) respond_to do |format| format.html format.xml { head :ok } format.pdf { send_data render_to_pdf({ :action => 'index.rpdf', :layout => 'pdf_report' }) } end end
Здесь мы организуем форматирование данных, получаемых из базы и перенапрваляем выход во вновь созданный вспомогательный метод «render_to_pdf».
5. Далее изменим файл вида «index» и вставим в него следующее:
<%= link_to 'PDF', formatted_goods_path(:pdf) %>
Линк вызывает метод контроллера для генерирования PDF документа.
Это все. Теперь, когда пользователь нажмет на вышеуказанный линк, то он получит PDF файл.