Wicked PDF
  • Introduction
Powered by GitBook
On this page
  • Wicked PDF
  • Cheats
  • Usar el mismo image_tag que para Rails
  • Known Bugs
  • Debbuggeo en el navegador y se ve distinto que en el PDF
  • Me tira: Undefined :find_asset for nil class
  • El PDF me está llevando la última palabra del texto hacia abajo

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:

module PdfImageTagHelper
  def image_tag *args, &block
    if request.format.pdf?
      super wicked_pdf_asset_path(args[0]), *args[1..-1], &block
    else
      super *args, &block
    end
  end
end

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

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:

.row
    .col-xs-5
        Hello World

se convierte en:

.row
    .col-xs-5
        %p Hello World

No están funcionando las media queries

Lamentablemente HtmlToPdf no soporta media queries.

Wicked me renderiza el modo Mobile de mi app

Last updated 7 years ago

Darnos el lujo de poner assets.compile = true .

Claro, no hay solución feliz, pero si la llega a haber en algún momento, seguro la van a informar aca:

Posta, te juro que esto pasa. Resulta que HTMLTOPDF registra un problema en el text wrapping y te puede tirar alguna parte del texto a la próxima línea sin mucha excusa. Al momento de escribir esto, todavía el bug no fué formalmente reconocido y tiene una label NeedToVerify, pueden revisarlo acá:

Tenés que agregarle la propiedad viewport_size: 'TEXT' a la hora de hacer el renderizado de tu web. Yo encontré que el valor '1280x1024' se adapta muy bien. Lo interesante es que muy probablmente te pida una versión de htmltopdf parcheada, que podés conseguir compilándola a mano o utilizando alguna gema que te proporcione el binario, como .

entendiendo muy bien a que nos estamos enfrentando
https://github.com/mileszs/wicked_pdf/issues/476#issuecomment-167814037
https://github.com/wkhtmltopdf/wkhtmltopdf/issues/2505#issuecomment-167863047
wkhtmltopdf-heroku