比萨pdf转换器使用大型表格非常慢

Don*_*Don 8 django pdf-generation html-table pisa xhtml2pdf

我正在使用Pisa将HTML转换为PDF(在Django项目中).处理跨越多个页面的表时,它非常慢:

一个200行的表需要150秒才能转换,而如果我把它分成更小的表需要15秒.

是否有建议由比萨处理的HTML表的提示或最佳实践?

Fáb*_*tos 7

我有同样的问题.该文件只是一个头版和一张巨大的桌子.PDF渲染时间随着我的内容表的大小呈指数级增长.

我制作了一份清单,列出了哪些可能是问题所在

我在PDF渲染功能上做了简单的计时(因为它可能是HTML渲染,将其传递给StringIO,或者创建HTTP响应),并注意到pisa.pisaDocument调用确实需要60秒才能返回.我做了一个可能是问题的清单,并对每个问题进行了研究.清单包括图像,CSS,标记复杂性和帧.

图像几乎不影响渲染时间(我每页只有一个,所以YMMV).Frames也没有.

标记复杂性是我的模板的主要问题.显然,pisa会非常非常缓慢地在表格中呈现几列

该表花费了太多时间来渲染,但我注意到如果我将表拆分成较小的表,渲染时间不再呈指数级增长,并且渲染所有内容所花费的时间减少了一半.我在Django模板中使用了以下代码:

    {% if forloop.counter|divisibleby:20 %}</table><table>{% endif %}
Run Code Online (Sandbox Code Playgroud)

编辑:此修复程序不能很好地重复表头,所以如果你正在做,repeat="1"你必须确切知道每页中适合的行数.

另外,我在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{
        ...
    }
Run Code Online (Sandbox Code Playgroud)

通过将其更改为* {...}渲染速度加快了一点.这是违反直觉的,因为当您使用*选择器时,浏览器不会像使用上述怪物时那样快速渲染页面.

此外,由于某种原因,将两个页内<style>标签合并到一个标签中也减少了渲染时间.