django - online - el mejor convertidor de pdf a excel
El convertidor pdf de Pisa es muy lento con tablas grandes (1)
Yo tuve el mismo problema. El documento era solo una página principal y una gran mesa. El tiempo de procesamiento de PDF aumentaba exponencialmente con el tamaño de mi tabla de contenido.
Hice una lista de verificación de cosas para ver cuál podría ser el problema
Hice cronometraje simple en mi función de procesamiento de PDF (ya que podría ser la representación HTML, pasándola a StringIO, o creando la respuesta HTTP), y noté que la llamada pisa.pisaDocument tomó 60 segundos para regresar. Hice una lista de verificación de las cosas que podrían ser el problema y trabajé en cada una de ellas. La lista de verificación incluía Imágenes, CSS, Complejidad de marcado y Marcos.
Las imágenes apenas afectaron el tiempo de renderización (solo tuve una por página, por lo que YMMV). Tampoco lo hizo Marcos.
La complejidad del marcado fue el principal problema de mi plantilla. Aparentemente, pisa renderizará varias columnas en una tabla muy, muy lentamente
La tabla tardaba demasiado tiempo en renderizarse, pero noté que si dividía la tabla en tablas más pequeñas, el tiempo de renderización ya no aumentaba exponencialmente, y el tiempo que se tardó en procesar todo se redujo a la mitad. Utilicé el siguiente código en mi plantilla de Django:
{% if forloop.counter|divisibleby:20 %}</table><table>{% endif %}
editar: esta corrección no funciona bien con la repetición de encabezados de tabla, por lo que si está repeat="1"
, debe saber exactamente cuántas filas debe caber en cada página.
Además, tenía este monstruo de un selector en mi CSS:
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video{
...
}
Al cambiarlo a * {...}
la representación se aceleró un poco. Esto no fue intuitivo ya que los navegadores no mostrarán tu página tan rápido cuando utilizas el selector *
que cuando estás usando el monstruo anterior.
Además, por alguna razón, la fusión de dos etiquetas <style>
in-page en una etiqueta también disminuyó el tiempo de renderizado.
Estoy usando Pisa para convertir HTML a PDF (en un proyecto de Django). Es muy lento cuando se manejan tablas que abarcan varias páginas:
una tabla de 200 filas requiere hasta 150 segundos para convertirse, mientras que se tardan 15 segundos si la divido en tablas más pequeñas.
¿Hay consejos o mejores prácticas para construir tablas HTML para que sean manejadas por Pisa?