Ruby On Rails Wiki перечисляет пару файлов librarie, которые облегчают создание PDF в Rails. Мне нужно распечатать адресные метки (в формате письма, таким образом, 12-15 адресов на странице) и не может решить, какой из них использовать. Любые рекомендации?
Создание PDF из Rails
Ответ 1
Лучшее, что я видел до сих пор, это креветка:
Ответ 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"
Ответ 8
Хотя и не полностью рубиновый, вы можете использовать OpenOffice.odt для создания PDF файлов, объединяя безмятежность и docsplit.
http://github.com/kremso/serenity
http://documentcloud.github.com/docsplit/
Или вы можете использовать clamsy gem, который использует odt и cups-pdf для создания 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