ruby-on-rails - rails - wicked_pdf_image_tag
Generar PDF desde Rails (10)
Aunque no es completamente rubí, puede usar .odt de OpenOffice para generar archivos PDF combinando serenidad y docsplit.
http://github.com/kremso/serenity
http://documentcloud.github.com/docsplit/
O puede usar la gema clamsy que usa odt y cups-pdf para generar el PDF.
La Wiki de Ruby On Rails incluye un par de bibliotecas que facilitan la generación de PDF en Rails . Necesito imprimir etiquetas de dirección (en formato de carta, por lo tanto 12-15 direcciones por página) y no puedo decidir cuál usar. ¿Alguna recomendación?
Gambas con Prawnto seguro. El DSL es un verdadero placer, así como la simplicidad de poder tratar el PDF como cualquier otro formato en un bloque de formato responder_:
respond_to do |format|
format.pdf { render :layout => false }
Hay un video tutorial sobre gambas here :
He usado tanto PDF :: Writer como gambas y encuentro que el gambón es mucho más agradable de usar. Eche un vistazo a Ruby Mendicant para una comparison que demuestra las alegrías de Prawn w / r / t PDF :: Writer.
De hecho, solo echa un vistazo a Ruby Mendicant de todos modos por un excelente patrón de diseño para un sustento correcto como desarrollador.
La gamba es el camino a seguir. Ahora con etiquetas de gambas que es realmente fácil de hacer.
Echa un vistazo al LÉAME del proyecto aquí:
https://github.com/jordanbyron/prawn-labels#readme
Este es un ejemplo super simple que se usa en un controlador de Rails. No te olvides de agregar gem ''prawn-labels''
a tu 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"
Lo mejor que he visto hasta ahora es Gamba:
Para su caso de uso, estoy de acuerdo con la mayoría de las otras respuestas en que la http://prawn.majesticseacreature.com/ es la elección correcta porque necesita control a nivel de píxel sobre la salida.
Para generar informes en PDF con un estilo de tabla incorporado (obstinado), encabezados, etc., puede usar la gema del report
- consulte Generar PDF desde Rails 3 - ¿Qué herramienta elegir? para un ejemplo de cómo usar.
Si no está haciendo algo demasiado complejo, también puede usar HTMLDOC, que convierte HTML básico a PDF. Esto evita tener que aprender una sintaxis de diseño más patentada (como en el caso de Gamba). Podría ahorrarle algunos dolores de cabeza :)
Aquí hay un enlace a la gema ruby para HTMLDOC:
Además, aquí hay una buena guía para visualizar en rieles PDF utilizando HTMLDOC:
También hay RTeX . Eso funciona bien si está dispuesto a traducir a LaTeX primero. LaTeX es una muy buena manera de almacenar documentos marcados. Solo depende de qué tan estático es cada documento. Si la mayoría del documento es dinámico, es posible que lo haga mejor con Prawn o PDF :: Writer. Si la mayor parte es estática, con solo un par de reemplazos de texto para cada uno, LaTeX podría ser una mejor opción.
También hay PDFKit . Es bastante interesante también.
Utilicé el platillo volante para la generación de PDF desde html. Es una biblioteca de Java pero puede usar la gema Ruby-Java Bridge para acceder a ella en su aplicación de rieles. Cumple con css 2.1 y tiene algunas adiciones de css3 para permitir un control adicional sobre la paginación. Lo recomendaría, ya que no requiere que pongas ''código pdf'' en tu html, puedes usar las mismas vistas y parciales para mostrar al navegador que para generar archivos PDF.
Flying Saucer: https://github.com/flyingsaucerproject/flyingsaucer
Ruby Java Bridge: http://rjb.rubyforge.org/
Yo uso este código de módulo para generar los pdfs
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
Llamarlo con un código como este:
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