gpt4 book ai didi

django - 比萨pdf转换器在使用大表时非常慢

转载 作者:行者123 更新时间:2023-12-04 07:58:04 25 4
gpt4 key购买 nike

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

一个200行的表最多需要150秒才能转换,而如果我将其拆分成较小的表则需要15秒。

是否有技巧或最佳实践来构建由比萨处理的HTML表?

最佳答案

我有同样的问题。该文件只是头版和一张大 table 。 PDF呈现时间随着内容表的大小呈指数增长。

我列出了要检查的东西的 list ,这可能是问题所在

我对PDF呈现功能进行了简单的计时(因为它可能是HTML呈现,将其传递给StringIO或创建HTTP响应),并且注意到pisa.pisaDocument调用确实需要60秒才能返回。我对可能是问题的事情做了 list ,并逐一进行了研究。 list 包括图像,CSS,标记复杂度和框架。

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

标记的复杂性是我模板的主要问题。显然,比萨将非常非常缓慢地渲染表格中的几列

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

    {% if forloop.counter|divisibleby:20 %}</table><table>{% endif %}

编辑:此修复不适用于重复表头,因此,如果要执行 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{
...
}

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

同样,由于某种原因,将两个页内 <style>标签合并为一个标签也减少了渲染时间。

关于django - 比萨pdf转换器在使用大表时非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7594922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com