Introduction
Wicked PDF
Wicked PDF es una gema que nos permite transformar nuestras vistas html a un PDF de una forma bastante mágica. Es bastante simple de instalar y muy fácil de usar, siguiendo la información en la documentación de la gema, ya tenemos una funcionalidad operativa y feliz.
Pero como todas las cosas mágicas, nos encontramos con que tiene también algunos bugs que son super oscuros y misteriosos...
Cheats
Usar el mismo image_tag que para Rails
Si hacemos lo que nos recomienda Wicked y tenemos un mime type PDF registrado, podríamos muy facilmente evitar usar el helper de imágenes de wicked con un helper de vista:
Known Bugs
Debbuggeo en el navegador y se ve distinto que en el PDF
Wicked PDF usa su propio engine para poder renderizar las webs, al momento de redactar esto está usando QTWebKit 4.8, y resulta que muchas de las cosas que ya son estándar de CSS todavía no están del todo implementadas para esa versión.
Probá usando las vendor specific properties de webkit
.
Me tira: Undefined :find_asset for nil class
Undefined :find_asset for nil class
A veces nos sucede que estamos trabajando con Rails 4, subimos la app a producción y de repente, nos encontramos con que wicked no puede encontrar los assets...
Resulta que Rails carga los assets cada vez que los compila en Rails.assets
, y este objeto responde a :find_asset
para que alguien pueda encontrar un asset en particular. Lo interesante es que a partir de Sprockets 3 ya no se cargan los assets cuando usamos assets.compile = false
.
Si, un bajón porque eso lo usamos para que Rails no tenga que compilar los assets para cada request, una cosa esencial en producción... ¿Qué hacemos?
Retrotraer la versión de Sprockets a una menor a la 3.
El PDF me está llevando la última palabra del texto hacia abajo
¿Y entonces? Bueno, resulta que el bug es aislado y sabemos que esto pasa cuando nuestro contenedor tiene un float: left|right
en sus propiedades -ojo que también puede ser heredado-. Hablando de herencia de properties, quien hereda el float también es el texto y por eso es que se está wrappeando mal. Una solución que encontré yo es usar algún contenedor como un %p
o un %span
y en el peor de los casos, especificarle un float: none
ubicado dentro del contenedor que si esta flotado.
Un dato interesante es que Bootstrap flota las columnas para poder alinearlas:
se convierte en:
No están funcionando las media queries
Lamentablemente HtmlToPdf no soporta media queries.
Wicked me renderiza el modo Mobile de mi app
Last updated