我使用比薩將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) –