wicked_pdf_image_tag wicked rails generate español ruby-on-rails pdf pdf-generation

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.

http://github.com/ngty/clamsy

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"




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