【问题标题】:Pisa pdf converter is very slow with large tablesPisa pdf转换器对于大表非常慢
【发布时间】:2011-11-27 12:55:10
【问题描述】:

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

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

是否有构建由 Pisa 处理的 HTML 表格的提示或最佳实践?

【问题讨论】:

  • 它可能没有帮助,但你看过 wkhtmltopdf 吗?
  • 如果没有其他解决方案,也许我会看看它:我选择了 Pisa,因为它与 Django 集成......
  • FWIW 我制作了一些基于表格的文档,但只有一页内容几乎可以立即加载,但我制作的报告有接近 1300 行和 50 页需要将近 30 秒。你用的是哪个叉子?我可以试试ChrisGlass/Xhtml2pdf 看看它是否比未维护的original version 有所改进
  • 谢谢,我想我正在使用最新版本,但我会检查您的链接。我的 200 行表需要大约 150 秒才能转换。如果我把它分成小表格,同一个文档需要 15 秒。
  • 我知道这个线程现在有点老了,但如果你还在寻找某种改进,我开始使用django-webodt,提供的链接直接指向他们的表格语法。与 pisa 提供的有限 css 支持相比,使用开放式办公室模板在格式化方面也被证明更容易且更强大。我之前提到的相同的约 50 页文档现在需要 1 分钟

标签: django pdf-generation html-table pisa xhtml2pdf


【解决方案1】:

我遇到了同样的问题。这份文件只是一个首页和一张巨大的桌子。 PDF 渲染时间随着内容表的大小呈指数增长。

我做了一个清单来检查可能是什么问题

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

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

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

渲染表格花费了太多时间,但我注意到,如果我将表格拆分为更小的表格,渲染时间不再呈指数增长,渲染所有内容所需的时间减少了一半。我在我的 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{
        ...
    }

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

此外,出于某种原因,将两个页内 &lt;style&gt; 标签合并为一个标签也会减少渲染时间。

【讨论】:

  • 我也最终拆分了我的表格,但在某些情况下我无法提前知道一个页面可以容纳多少行。
  • 就我而言,没关系。我只需要祈祷没有人告诉我重复表格标题,因为此修复不适用于 repeat="1"
  • 拆表让我的速度提高了约 3 倍。我认为速度缓慢可能是由于 Reportlab 中的问题 - groups.google.com/forum/#!topic/xhtml2pdf/vUoq1IRauvg
  • 是的,我敢打赌这是 Reportlab 的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 2011-08-25
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
相关资源
最近更新 更多