Подтвердить что ты не робот

Создание PDF из Rails

Ruby On Rails Wiki перечисляет пару файлов librarie, которые облегчают создание PDF в Rails. Мне нужно распечатать адресные метки (в формате письма, таким образом, 12-15 адресов на странице) и не может решить, какой из них использовать. Любые рекомендации?

4b9b3361

Ответ 2

Креветка с Праунто наверняка. DSL - это настоящее удовольствие, так же как и простота обработки PDF как любого другого формата в блоке формата reply_to:

respond_to do |format|
format.pdf { render :layout => false }

Здесь есть учебное видео о кревете здесь:

Ответ 3

Там также RTeX. Это хорошо работает, если вы сначала перейдете на LaTeX. LaTeX - очень хороший способ хранения отмеченных документов. Это зависит от того, насколько статичен каждый документ. Если большая часть документа динамична, вы можете сделать лучше с помощью Prawn или PDF:: Writer. Если большинство из них является статичным, с несколькими парами текстовых замен для каждого, LaTeX может быть лучшим выбором.

Ответ 4

Если вы не делаете ничего сложного, вы также можете использовать HTMLDOC, который преобразует базовый HTML в PDF. Это не позволяет вам узнать больше проприетарного синтаксиса раскладки (например, в случае с креветкой). Это может сэкономить вам несколько головных болей:)

Здесь ссылка на рубиновый камень для HTMLDOC:

Кроме того, здесь хорошее руководство для рендеринга представления в рельсах в pdf с помощью HTMLDOC:

Ответ 5

Существует также PDFKit. Это тоже очень интересно.

Ответ 6

Я использовал и PDF:: Writer, и креветку, и нашел креветку гораздо приятнее в использовании. Проверьте Ruby Mendicant для сравнение, которое демонстрирует радости креветки w/r/t PDF:: Writer.

Собственно, просто проверьте Ruby Mendicant в любом случае для отличного шаблона проектирования для правильного существования в качестве разработчика.

Ответ 7

Креветка - это путь. Теперь с креветками, которые действительно легко сделать.

Проверьте проект README здесь:

https://github.com/jordanbyron/prawn-labels#readme

Это супер простой пример, используемый в контроллере Rails. Не забудьте добавить gem 'prawn-labels' в свой Gemfile.

names = %w{Jordan Kelly Greg Bob}

labels = Prawn::Labels.render(names, :type => "Avery5160") do |pdf, name|
  pdf.text name
end

send_data labels, :filename => "names.pdf", :type => "application/pdf"

Ответ 9

В вашем случае использования я согласен с большинством других ответов, что prawn является правильным выбором, потому что вам нужен контроль уровня на пикселях выход.

Для создания отчетов в формате PDF со встроенным (упрямым) стилем таблицы, заголовками и т.д. вы можете использовать report gem - проверить Создать pdf файл из Rails 3 - какой инструмент выбрать? для примера использования.

Ответ 10

Я использовал летающую тарелку для создания pdf файлов из html. Это java-библиотека, но вы можете использовать жемчужину Ruby-Java Bridge для доступа к ней в вашем приложении rails. Он css 2.1 совместим и имеет несколько дополнений из css3, чтобы обеспечить дополнительный контроль над поисковым вызовом. Я бы рекомендовал его, так как он не требует, чтобы вы вставляли "pdf-код" в свой html, вы можете использовать одни и те же представления и частичные изображения для отображения в браузере, как и для создания PDF файлов.

Летающий тарелка: https://github.com/flyingsaucerproject/flyingsaucer

Ruby Java Bridge: http://rjb.rubyforge.org/

Я использую этот код модуля для создания PDF файлов

require 'rubygems'
require 'rjb'

module Html2Pdf

  def self.included(controller)
      controller.send :helper_method, :create_pdf
  end

  def create_pdf(options = {})
      itext = "#{RAILS_ROOT}/lib/html2pdf/jars/iText-2.0.8.jar"
      core_renderer = "#{RAILS_ROOT}/lib/html2pdf/jars/core-renderer.jar"
      xerces = "#{RAILS_ROOT}/lib/html2pdf/jars/xml-apis-xerces-2.9.1.jar" 
      joinchar = (RUBY_PLATFORM.include? 'mswin') ? ';' : ':'
          classpath = [itext, core_renderer, xerces].join(joinchar)
      Rjb::load(classpath, jvmargs=['-Djava.awt.headless=true'])
      if options[:htmlstring].nil?
      options[:layout] ||= false
          options[:template] ||= File.join(controller_path,action_name+".pdf.erb")
          html_string = render_to_string(:template => options[:template], :layout => options[:layout])
    else
          html_string = options[:htmlstring]
    end
    # Make all paths relative, on disk paths...
    html_string.gsub!(".com:/",".com/") # strip out bad attachment_fu URLs
    html_string.gsub!( /src=["']+([^:]+?)["']/i ) { |m| "src=\"file:///#{RAILS_ROOT}/public/" + $1 + '"' } # re-route absolute paths
    html_string.gsub!( /url\(["']+([^:]+?)["']/i ) { |m| "url\(\"file:///#{RAILS_ROOT}/public/" + $1 + '"' } # re-route absolute paths
    # Remove asset ids on images with a regex // tbh i can't remember what this line is for but i'm sure it did something awesome
    html_string.gsub!( /src=["'](\S+\?\d*)["']/i ) { |m| 'src="' + $1.split('?').first + '"' } 
    filename = "#{RAILS_ROOT}/public/pdfs/"+options[:filename]+".pdf"
    fileOutputStream = Rjb::import('java.io.FileOutputStream')
      iTextRenderer = Rjb::import('org.xhtmlrenderer.pdf.ITextRenderer')
      renderer = iTextRenderer.new
      renderer.setDocumentFromString(html_string)
      os = fileOutputStream.new(filename)
      renderer.layout()
      renderer.createPDF(os)
      os.close()
  end

end

Вызов с помощью кода следующим образом:

def generate_pdf  
  htmlsrc = render_to_string(:partial => 'invoice', :layout => false)
  rnd = Time.now.to_s(:datentime).gsub!(/[\/ \.:]/,'')
  filename = "docstore/tmp_#{rnd}"
  create_pdf(:htmlstring => htmlsrc, :filename => filename)
  contents = open("#{RAILS_ROOT}/public/pdfs/#{filename}.pdf", "rb") { |io| io.read }
  File.delete("#{RAILS_ROOT}/public/pdfs/#{filename}.pdf")
  respond_to do | wants |
    wants.html { render :text => contents, :content_type => 'application/pdf' }
  end    
end