我使用比萨将HTML转换为PDF(在Django项目中)。 处理跨越多个页面的表格时速度很慢:比萨pdf转换器很慢,大表
一个200行的表格最多需要150秒才能转换,而如果将其分割为更小的表格,则需要15秒。
是否有构建HTML表格的技巧或最佳实践由比萨处理?
我使用比萨将HTML转换为PDF(在Django项目中)。 处理跨越多个页面的表格时速度很慢:比萨pdf转换器很慢,大表
一个200行的表格最多需要150秒才能转换,而如果将其分割为更小的表格,则需要15秒。
是否有构建HTML表格的技巧或最佳实践由比萨处理?
我有同样的问题。该文件只是一个头版和一张巨大的桌子。 PDF呈现时间随着我的内容表大小呈指数增长。
我做的事情的清单来看看这可能是问题的
我做了我的PDF渲染功能简单的计时(因为它可能是HTML的渲染,将它传递给StringIO的,或者创建HTTP响应),并注意到pisa.pisaDocument调用确实需要60秒才能返回。我做了一个可能是问题的清单,并且分别处理它们。清单包括图像,CSS,标记复杂性和框架。
图像几乎不影响渲染时间(我只有一个页面,所以YMMV)。框架也没有。
标记复杂性是我的模板的主要问题。显然比萨会在一张桌子上非常非常缓慢地渲染几列
该表需要花费太多时间进行渲染,但我注意到如果将表格拆分成更小的表格,渲染时间不会再呈指数级增长,把所有东西都花在了一半。我用下面的代码在我的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>
标签合并为一个标签也会减少渲染时间。
我也最终分裂了我的表格,但有些情况下,我无法事先告诉有多少行适合单个页面 – Don
对我而言,这并不重要,我只需要祈祷没有人告诉我重复表格标题,因为这个修正不适用于repeat =“1” –
分解表格给了我一个3倍速度我认为缓慢可能是由于Reportlab内的一个问题 - https://groups.google.com/forum/#!topic/xhtml2pdf/vUoq1IRauvg –
它可能不会帮助,但你有没有看过wkhtmltopdf? – Matt
也许我会看看它,如果没有其他解决方案是可能的:我选择了比萨,因为它与Django集成... – Don
FWIW我制作了一些基于表格的文档,但只包含一页内容,即时的,但我所做的接近1300行,跨度为50页的报告几乎需要30秒。你正在使用哪种分岔?我可以尝试[ChrisGlass/Xhtml2pdf](https://github.com/chrisglass/xhtml2pdf/tree/xhtml2pdf-refactor)查看它是否改进了非维护的[原始版本](https://github.com/ holtwick/xhtml2pdf) –