Uso de Flex/CSS con wkhtmltopdf

2 minutos de lectura

Creé con éxito una lista usando la siguiente respuesta con flexbox en mi página HTML ¿Cómo mostrar 3 elementos por fila en flexbox?

Tengo la necesidad de crear un PDF con estos datos y estoy usando wkhtmltopdf (https://wkhtmltopdf.org/) que también funciona bien, sin embargo, el PDF generado tiene todos mis Elementos de lista en 1 columna larga en lugar de 3 por fila.

Parece que el CSS no se está procesando cuando se está generando el PDF. Se agradece cualquier información.

Esto funcionó para mí:

.row {
    display: -webkit-box; /* wkhtmltopdf uses this one */
    display: flex;
    -webkit-box-pack: center; /* wkhtmltopdf uses this one */
    justify-content: center;
}

.row > div {
    -webkit-box-flex: 1;
    -webkit-flex: 1;
    flex: 1;
}

.row > div:last-child {
    margin-right: 0;
}

Ver https://github.com/wkhtmltopdf/wkhtmltopdf/issues/1522 para más información

  • ¡Buena llamada! webkit-box era el componente faltante que no pude averiguar.

    – explosión

    7 de abril de 2020 a las 18:16

  • ¡Esto también funcionó para mí!

    –Agus Sapurta Sijabat

    15 de noviembre de 2021 a las 7:03

  • Si bien esta es una solución, no es de lejos la solución. webkit-box ni siquiera se acerca a flex. Espero que wkhtmltopdf acepte flex pronto, pero realmente lo dudo ya que flex estuvo fuera de servicio desde 2013 🙁

    – Bengala

    13 dic 2021 a las 23:40


  • @Bengala: wkhtmltopdf usa el QtWebKit original, que está abandonado. Los desarrolladores han pedido ayuda para pasar a algo más nuevo, pero no ha habido suficientes voluntarios. Consulte wkhtmltopdf.org/status.html para ver la historia completa.

    – Ben Scott

    5 oct a las 16:18

Resolví este problema usando:

equivalente de display:flex; ==> display: -webkit-box;

equivalente de justify-content: space-between; ==> -webkit-box-pack: justify;

Algunas informaciones útiles provenientes de:
https://github.com/wkhtmltopdf/wkhtmltopdf/issues/1522

avatar de usuario de saschanos
saschanos

Usé autoprefixer en mi aplicación para agregar prefijos automáticamente. Solo necesitas actualizar browsersList con ie >= 9.

Intente disminuir el ancho de las columnas flexibles. Por ejemplo cuando traté de hacer 50/50 columnas tuve que poner un ancho de 49.8% en vez de 50%. Espero eso ayude.

Avatar de usuario de Rohit Singh
Rohit Singh

Para usar flex o cajas al convertir a pdf, necesita webkit Ejemplo: –

display: flex;
display: -webkit-flex;

para justificar el contenido y alinear los elementos que debe usar

-webkit-align-self: flex-end;
 align-self: flex-end;
webkit-justify-content: space-between;
justify-content: space-between;

Como arreglo para Bootstrap 5, trabajando con wkhtmltopdf 0.12.*, encontré y completé el siguiente estilo

            <style>
                /* Fix wkhtmltopdf compatibility with BS flex features */

                .row {
                    display: -webkit-box;
                    display: flex;
                    -webkit-box-pack: center;
                    justify-content: center;
                }

                .row>div {
                    -webkit-box-flex: 1;
                    -webkit-flex: 1;
                    flex: 1;
                }

                .row>div:last-child {
                    margin-right: 0;
                }


                /* Fix wkhtmltopdf compatibility with BS tables borders */


                /* Requires cellspacing="0" on table to prevent spacing */

                table {
                    border-collapse: separate !important;
                }

                th,
                td {
                    border-top: none;
                    border-left: none;
                    border-right: none;
                }

            </style>

fuente me salvó el día al actualizar de bs 4 a bs 5.

¿Ha sido útil esta solución?