Wednesday 18 October 2017

Gem Wkhtmltopdf Binary Options


Este artículo fue publicado originalmente en el blog de Shelly Cloud, nuestra plataforma Ruby como un servicio que hemos decidido cerrar en octubre de 2017. Generar archivos PDF con fuentes personalizadas puede ser complicado. En este tutorial crearemos una sencilla aplicación Rails y abordaremos este problema con dos herramientas: wickedpdf y wkhtmltopdf. Ejemplo de aplicación El código para una aplicación de ejemplo con la que debemos trabajar puede encontrarse en Github. Se trata de una aplicación minimalista para crear órdenes de venta. Fue creado con Rails Composer. Para empezar rápido. Después de importar algunos pedidos y artículos con rastrillo db: semilla. Podemos revisarlos: Generación de archivos PDF Vamos a utilizar wickedpdf para generar archivos PDF. Wicketdpdf es una envoltura alrededor de la utilidad de shell wkhtmltopdf, que sirve archivos PDF desde HTML sin formato. Wickedpdf no requiere que usemos ningún DSL específico para crear archivos PDF. En su lugar, utiliza vistas HTML que nosotros, los desarrolladores de Rails, estamos acostumbrados a. Wickedpdf requiere instalado wkhtmltopdf, por suerte hay una versión binaria lanzada como una joya, que funciona en Linux, Mac OS X y Windows. Podemos comenzar agregando wickedpdf y wkhtmltopdf-binario a Gemfile: Después de ejecutar el paquete de instalación. Podemos pasar a añadir soporte para el formato PDF en OrdersController: Wickedpdf soporta muchas más opciones. Podemos comenzar fácilmente con estos tres. Vamos a crear un diseño para nuestros archivos PDF: Todavía tenemos que crear una vista de muestra para el formato PDF (copiado de la versión HTML de andamio): Si navegamos a nuestra primera orden y agregamos la extensión. pdf a la URL, veremos la primera generada PDF: Genial, no hemos añadido tanto código y somos capaces de generar archivos PDF. ¿Qué pasa si queremos usar fuentes personalizadas? Agregar fuentes personalizadas Para usarlas en nuestro PDF tenemos que crear un archivo CSS: Incluirlo en nuestro diseño PDF con wickedpdfstylesheetlinktag. Los ayudantes de wickedpdf integran CSS o Javascript en la salida HTML, que luego se utiliza para generar PDF con wkhtmltopdf. Todavía necesitamos agregar estas fuentes en nuestro sistema operativo, puede variar dependiendo del sistema operativo que esté utilizando. En el caso de Mac OS X, puede agregarlos a través de la aplicación nativa del Libro de fuentes. En Ubuntu, la instalación de fuentes se realiza haciendo doble clic o añadiéndolas a /.fonts o los directorios / usr / share / fonts y reconstruyendo la caché de fuentes con fc-cache. Vamos a tratar de generar el PDF de nuevo: Las fuentes se representan correctamente Podemos desplegar nuestra aplicación a la producción. Implementación en Shelly Cloud Hemos instalado fuentes en nuestra máquina local. Si implementamos nuestra aplicación en Shelly Cloud. Nos daremos cuenta de que nuestras fuentes limpias se han ido. Esto se debe a que faltan en los servidores virtuales de Shelly Cloud. Para mantener nuestras fuentes en un solo lugar, podemos agregarlas al directorio app / assets / fonts. Para asegurarse de que estén siempre presentes en nuestros servidores virtuales, crearemos un gancho beforerestart con el siguiente contenido: enlaza el directorio app / assets / fonts con /.fonts y escanea los directorios de fuentes del sistema para reconstruir archivos de caché de información de fuentes. Ahora nuestro PDF se generará con las fuentes adecuadas. Hemos terminado. Otras soluciones Hice algunas investigaciones sobre la adición de fuentes a wkhtmltopdf generado PDF. He encontrado algunas otras posibles soluciones a este problema, sin embargo ninguno de ellos funcionó o tuve diferentes resultados en los entornos de desarrollo y producción. El primero era agregar rutas absolutas a fuentes o URL a fuentes externas. Traté de ambos pero sin suerte. El HTML se ha procesado correctamente, pero los PDF generados estaban en realidad en blanco. La otra solución era codificar fuentes con base64 y usar la regla font-face en CSS. La única restricción era utilizar fuentes Truetype. Funcionó, sin embargo hubo problemas cuando se especificaron varias reglas font-face para fuentes normales y en negrita. También prestados fuentes se veía diferente, no estaban limpios y crujientes. Descubrí, en wkhtmltopdf issue tracker, que este es en realidad un error qt-webkit. He creado una rama separada de github con el último commit mostrando esta técnica. Enviar adjuntos PDF de Rails con WickedPdf y ActionMailer En casi cualquier aplicación web que creas, la cuestión de generar archivos PDF aparecerá muy pronto. Hay un par de opciones mientras utiliza Ruby on Rails. El primero es Gambas, que es una biblioteca generadora de PDF pura, y las otras opciones son en su mayoría envolturas alrededor de la muy popular biblioteca wkhtmltopdf unix que convierte páginas html a pdf. También hay una opción que utiliza PrinceXML pero inicialmente lo excluiría porque es bastante caro para una PYME. Mientras que el uso de camarón le da todo el poder de formato al crear archivos PDF, su curva de aprendizaje es bastante empinada, y la opción de convertir HTML a un PDF parece bastante bueno. Esto es especialmente el caso cuando ya tiene plantillas html que sólo necesitan algunas pequeñas modificaciones para poder convertirlas en PDF. Hay un par de gemas que rodean la biblioteca wkhtmltopdf, y la sección de generación de pdf ruby-toolbox muestra algunas opciones más viables que se pueden utilizar al generar archivos PDF desde ruby. Ill estar utilizando WickedPdf en este ejemplo, ya que es el que he configurado este sistema con un par de veces ya, así que Im bastante seguro de que funcionará en cualquier otra aplicación de Rails. Configuración Como siempre, usar una gema de rubí en los rieles es bastante simple, sólo agrega un par de líneas al uso de Gemfile Esta configuración funcionará bastante sencillo en los controladores, porque WickedPdf registra: formato de solicitud de pdf, y puede responder a él en De la misma manera que html o js en un bloque de responder. El código a continuación se copia desde la página Léame de WickedPdf. Esa parte fue bastante fácil, y puede configurar el procesamiento de PDF con un montón de opciones que se mencionan en la sección de configuración avanzada de la WickedPdf Readme Generación de PDF de ActionMailer El problema al tratar de generar el PDF de ActionMailer es que no hay solicitud , Por lo que tiene que hacer el html de una manera diferente. En pocas palabras, desea convertir la plantilla en una cadena, y luego reenviar esa cadena (html) a la wkhtmltopdf. Esta es la misma manera que el trabajo de la gema al procesar pdf desde el controlador, pero vale la pena mencionar una vez más. Vamos a utilizar un método que existe en el AbstractController :: Rendering y se llama rendertostring Así que podemos hacer algo como esto en el mailer: Mediante este enfoque, podemos enviar fácilmente un archivo adjunto PDF de un método ActionMailer. Puede hacerlo para cualquier plantilla de Rails que desee, pero asegúrese de probar todo antes de ponerlo en producción. RelacionadoSi necesita versiones anteriores a 0.12.0. Usted puede mirar las descargas obsoletas. Preguntas frecuentes ¿Dónde están todos los binarios específicos de distro? Los binarios de linux genéricos deben funcionar en todas las distribuciones, ya que se basan en CentOS 6 con libpng vinculados estáticamente y libjpeg. Sin embargo, en caso de vulnerabilidades en cualquier biblioteca, una nueva versión tendrá que ser similar a lo que se requería para Windows antes. El soporte para los binarios específicos de distro sigue estando presente en el script de compilación pero es probable que se elimine en el futuro. Mi plataforma no es compatible ¿Qué debo hacer Compile el código fuente con las instrucciones dadas anteriormente. Existen instrucciones de compilación no oficiales para SmartOS y OpenBSD. Pero todavía son un trabajo en progreso. Symantec informa de un virus WS. Reputation.1 para las versiones de Windows Este es un falso positivo reportado porque Symantec no ha visto este archivo antes de ver esta aclaración para más detalles.

No comments:

Post a Comment