wicked_pdf wicked rails generate from example español ruby-on-rails pdf

ruby-on-rails - rails - wicked pdf example



Rieles: ¿Convertir HTML a PDF? (15)

¿Cuál es la mejor y más fácil forma de tomar HTML y convertirlo a PDF, similar al uso de CFDOCUMENT en ColdFusion?

ACTUALIZACIÓN: Realmente aprecio todos los comentarios y sugerencias que la gente ha dado hasta ahora, sin embargo, siento que las personas que dejan sus respuestas no están entendiendo el punto.

1) la solución debe ser gratuita o de fuente abierta. una persona sugirió usar pricexml y el otro pd4ml. Ambas soluciones cuestan dinero (pricexml cuesta un brazo y una pierna) y no me refiero al tenedor.

2) deben poder tomar html (ya sea desde un archivo, url o una variable de cadena) y luego generar el pdf. bibliotecas como gamba, rprf, rtex se producen usando sus propios métodos y no tomando html.

por favor, no crean que soy desagradecido por las sugerencias, es solo que la generación de PDF parece ser un problema para las personas como yo que usan ColdFusion pero que quieren convertir a Rails.



Después Después de mucha sangre sudada y lágrimas, logré escribir una aplicación de rieles bastante simple que permite al usuario escribir plantillas de letras a través de TinyMce , estas se guardan y se pueden ver como documentos PDF.

Decidí restringir las opciones en el editor wysiwyg tanto como sea posible ya que algunas de las opciones no funcionan exactamente como se esperaba, pero eso no es nada que un poco de gsub-ing no podría resolver si fuera necesario.

Hay una gema de rubí que envuelve HTMLDOC que necesitará: PDF::HTMLDoc

Una vez que lo tienes, registra el tipo de mimo, entonces puedes hacer algo como:

@letter_template = LetterTemplate.find(params[:id]) respond_to do |format| format.html format.pdf { send_data render_to_pdf({:action => ''show.rpdf'', :layout => ''pdf_report''}), :filename => @letter_template.name + ".pdf", :disposition => ''inline'' } end

En el controlador de la aplicación agregué el método render_to_pdf como:

def render_to_pdf(options =nil) data = render_to_string(options) pdf = PDF::HTMLDoc.new pdf.set_option :bodycolor, :white pdf.set_option :toc, false pdf.set_option :portrait, true pdf.set_option :links, false pdf.set_option :webpage, true pdf.set_option :left, ''2cm'' pdf.set_option :right, ''2cm'' pdf.set_option :footer, "../" pdf.set_option :header, "..." pdf.set_option :bottom, ''2cm'' pdf.set_option :top, ''2cm'' pdf << data pdf.generate end

Encontrará más documentación en el sitio HTMLDOC con la que Travis Beale Linked. Espero que esto lo ayude a seguir su camino y, a menos que sus documentos sean realmente complicados, debería ser suficiente. Háganos saber cómo le va.


El proyecto puede haberse estancado, pero Pisa (también XHTML2PDF como XHTML2PDF ) es una lib de Python que hace CSS + HTML a PDF. lo usé en una aplicación de Rails (de poco tráfico) hace un tiempo al manejarlo como una herramienta de línea de comandos, funcionó bastante bien.


Estoy intentando la biblioteca de www.pd4ml.com

aquí hay un fragmento de código ...

Tomo el html en el contenido de String. Luego hago un par de cosas como reemplazar los botones de radio con casillas de verificación y luego ejecutarlo a través de la biblioteca pd4ml para procesar el pdf.
El resultado se parece mucho a la página original ...

String content = nextPage.generateResponse().contentString(); content = content.replace("Print", ""); content = content.replace("Back", ""); content = content.replace("border=/"1/"", "border=/"0/""); content = content.replace("radio", "checkbox"); java.net.InetAddress i = java.net.InetAddress.getLocalHost(); String address = i.getHostAddress()+":53000"; content = content.replace("img src=/"/cgi-bin", "img src=/"http://"+address+"/cgi-bin"); System.out.println(content); PD4ML html = new PD4ML(); html.setPageSize( new java.awt.Dimension(650, 700) ); html.setPageInsets( new java.awt.Insets(30, 30, 30, 30) ); html.setHtmlWidth( 750 ); html.enableImgSplit( false ); html.enableTableBreaks(true); StringReader isr = new StringReader(content); baos = new ByteArrayOutputStream(); html.render( isr, baos); PDFRegForm pdfForm = (PDFRegForm)pageWithName("PDFRegForm"); pdfForm.baos = baos; pdfForm.generateResponse();



Lo más parecido que encontré como una "solución" a esto es usar JRuby y luego usar The Flying Saucer Project . Solo desearía que se transfiera a Ruby para que sea una solución nativa. Dios, desearía ser mejor en Java.



Me gustaría sugerirle la solución de HTML a PDF por https://grabz.it .

Tienen una API de captura de pantalla muy flexible y fácil de usar que puede ser utilizada por cualquier tipo de aplicación Ruby.

Si quieres probarlo, al principio deberías obtener la clave de la aplicación de autorización + secreto y el SDK gratis de desarrollo.

Luego, en su aplicación, los pasos de implementación serían:

//initialization require ''grabzit'' grabzItClient = GrabzIt::Client.new("APPLICATION KEY", "APPLICATION SECRET") //capturing the url to PDF grabzItClient.url_to_pdf("http://www.google.com")

El siguiente es el ahorro. Puede usar uno de los dos métodos de save , save si está disponible el manejador de devolución de llamada accesible:

grabzItClient.save("http://www.example.com/handler/index")

Y save_to si necesita guardar de forma síncrona (lo que obligará a su aplicación a esperar mientras se crea la captura de pantalla):

filepath = "images/result.jpg" grabzItClient.save_to(filepath)

Consulte la documentación para details sobre el guardado.

Eso es todo. También es posible obtener otros tipos de capturas de pantalla, como capturas de pantalla de imágenes.


No es específico de Ruby, pero la mejor solución que he encontrado para esto es el HTMLDOC código HTMLDOC .



Seguro que no hay una manera directa de hacer esto en Ruby (al menos no cuando estaba tratando de hacerlo hace unos meses). Si realmente no puede evitar generar sus pdfs desde html, probablemente deba buscar algunas herramientas o servicios externos para este fin.

¡Buena suerte!


Si desea tener una calidad realmente buena (piense, diseño adecuado / CSS, etc.), necesita crear un proceso que incruste un navegador web real dejándolo fuera de pantalla e imprimiéndolo a través de un controlador de impresora PDF.


WickedPDF , generador de PDF (desde HTML).

Aquí hay un ejemplo

gem ''wicked_pdf'' gem ''wkhtmltopdf-binary'' #wicked_pdf is a wrapper for wkhtmltopdf, you''ll need to install that, too

En tu controlador (supongo que estás en el método de mostrar):

respond_to do |format| format.html format.pdf do pdf = render_to_string :pdf => ''test'', layout: ''pdf.html.erb'', template: ''show.pdf.slim'', header: { :right => ''[page] of [topage]''}, margin: {top: 0, bottom: 0, left: 0, right: 0}, outline: {outline: true, outline_depth: 2} end end

En su vista para el enlace PDF

= link_to ''Download Pdf'', you_show_path(@uour_object, format: :pdf)

Si desea enviar un archivo PDF por correo electrónico adjunto, primero guarde su archivo PDF en una carpeta pública o temporal y luego en la clase de correo (por ejemplo, en mailers / e_mailer.rb)

attachments["test.pdf"] = File.read(Rails.root.join(''public'',"test.pdf")) mail(:to => to, :cc => cc , :subject => "subject")

Después de enviar un correo electrónico, puede eliminar el archivo

File.delete(Rails.root.join("public", "test.pdf"))


HTMLDOC ?

  • convierte HTML a PDF;
  • Libre y de código abierto (soporte comercial disponible);
  • se puede usar como ...
    • ...aplicación independiente,
    • ... para el procesamiento de documentos por lotes,
    • ... o ejecutar como un servicio basado en la web;
  • la interfaz es CLI o GUI.

  • Hay una RPDF en la que describes tus PDF como una vista.
  • También existe RTEX que usa (La) TeX para generar RTEX PDF.