Создать PDF из Rails 3 - какой инструмент выбрать? - PullRequest
11 голосов
/ 07 ноября 2010

Мне нужно иметь возможность отображать некоторые представления в виде PDF-файлов из проекта Rails 3 .Я никогда раньше не использовал методы генерации PDF с ruby ​​/ rails, поэтому я исследовал несколько популярных подходов, таких как Prawn и PDF :: Writer , но все примеры и статьи, которые я нашелпока что кажется устаревшим и применимо только к рельсам 2.x.Я еще не видел работающий пример Rails3;Я попытался установить креветки и самоцветы креветок и воспроизвести пример, описанный в этом эпизоде ​​Railscasts , но я получаю ошибку, так как метод prawnto не распознается.Я не уверен, было ли это ошибкой реализации или просто признаком несовместимости, но, видя, как другие люди делятся в сети, что prawn больше не работает для них в Rails3, я не стал отслеживать коддалее.

Кто-нибудь нашел работающее надежное решение для генерации PDF в Rails3?Не могли бы вы поделиться этим или указать мне на внешние ресурсы и документацию?Большое спасибо!

Ответы [ 5 ]

11 голосов
/ 08 ноября 2010

Креветка работает с Rails 3. Лично я использовал его без проблем.Вы должны получить последние версии гема и плагина prawnto для рельсов.

PDFkit имеет преимущество использованияДвижок рендеринга Webkit, так что вы можете использовать CSS для определения ваших макетов, и вы получаете бесплатные веб-страницы с Safari и Chrome.У него немного более приятная кривая обучения, чем у Prawn.

11 голосов
/ 09 июля 2011

Новый ответ на старый вопрос, на случай, если другие столкнутся с этим: WickedPDF (который использует wkhtmltopdf, как PDFkit) делает это несложно.

https://github.com/mileszs/wicked_pdf

7 голосов
/ 07 ноября 2010

Вы видели PDFkit ? Я уверен, что это работает с Rails 3, это часть промежуточного программного обеспечения Rack, которое может конвертировать любую HTML-страницу в PDF, которая соответствует маршруту, оканчивающемуся на .pdf

2 голосов
/ 25 августа 2013

Что касается креветок, вот бесшовная интеграция для Rails 3, которая, кажется, работает просто отлично: https://github.com/Whoops/prawn-rails

1 голос
/ 04 апреля 2013

Вы можете использовать гем Report , который генерирует PDF, а также XLSX и CSV.

# a fake Manufacturer class - you probably have an ActiveRecord model
Manufacturer = Struct.new(:name, :gsa)

require 'report'
class ManufacturerReport < Report
  table 'Manufacturers' do # you can have multiple tables, which translate into multiple sheets in XLSX
    head do
      row 'Manufacturer report'
    end
    body do
      rows :manufacturers
      column 'Name', :name
      column 'GSA?', :gsa
    end
  end
  # you would want this so that you can pass in an array
  # attr_reader :manufacturers
  # def initialize(manufacturers)
  #   @manufacturers = manufacturers
  # end
  def manufacturers
    [
      Manufacturer.new('Ford', true),
      Manufacturer.new('Fischer', false),
      Manufacturer.new('Tesla', nil),
    ]
  end
end

Когда вы звоните report.pdf.path, в каталоге tmp создается PDF:

report = ManufacturerReport.new
puts report.pdf.path #=> /tmp/185051406_Report__Pdf.pdf
puts report.xlsx.path #=> /tmp/185050541_Report__Xlsx.xlsx

Вы можете сделать это в вашем контроллере как:

@manufacturers = Manufacturer.all
respond_to do |format|
  format.html # index.html.erb
  format.json { render json: @manufacturers }
  format.pdf do
    report = ManufacturerReport.new(@manufacturers) # using the commented-out code
    send_file report.pdf.path, :type => 'application/pdf', :disposition => 'attachment', :filename => 'ManufacturersReport.pdf'
    # tmp files are periodically cleaned up by the operating system, but if you want to be extra clean you can call
    # report.cleanup
    # but this may remove the tmp files before apache/nginx/etc. finishes delivering the file
  end
end

Конечный результат:

PDF

the pdf

XLSX

the xlsx

Обратите внимание, что в XLSX автоматически добавлен автофильтр.

...