Pisa PDF-Konverter ist sehr langsam mit großen Tabellen

8

Ich benutze Pisa, um HTML in PDF zu konvertieren (in einem Django-Projekt). Es ist sehr langsam beim Umgang mit Tabellen, die sich über mehrere Seiten erstrecken:

Eine 200-Zeilen-Tabelle benötigt bis zu 150 Sekunden, um konvertiert zu werden, während es 15 Sekunden dauert, wenn ich sie in kleinere Tabellen aufteile.

Gibt es Tipps oder Best Practices zum Erstellen von HTML-Tabellen, die von Pisa bearbeitet werden?

    
Don 29.09.2011, 09:04
quelle

1 Antwort

7

Ich hatte das gleiche Problem. Das Dokument war nur eine Titelseite und ein riesiger Tisch. Die Zeit für das PDF-Rendering stieg exponentiell mit der Größe meiner Inhaltstabelle.

Ich habe eine Checkliste mit Dingen erstellt, um herauszufinden, welches das Problem sein könnte

Ich habe meine PDF-Renderfunktion einfach getaktet (da es sich um das HTML-Rendering handeln könnte, an StringIO übergeben oder die HTTP-Antwort erstellt) und festgestellt, dass der Aufruf von pisa.pisaDocument 60 Sekunden dauerte. Ich habe eine Checkliste von Dingen erstellt, die das Problem sein könnten, und habe jeweils an ihnen gearbeitet. Die Checkliste enthielt Bilder, CSS, Markup-Komplexität und Frames.

Bilder haben die Renderzeit kaum beeinflusst (ich hatte nur einen pro Seite, also YMMV). Auch Frames nicht.

Die Markup-Komplexität war das Hauptproblem meiner Vorlage. Anscheinend wird Pisa sehr, sehr langsam mehrere Spalten in einer Tabelle darstellen.

Die Tabelle brauchte zu viel Zeit zum Rendern, aber ich bemerkte, dass, wenn ich die Tabelle in kleinere Tabellen aufteilte, die Renderzeit nicht mehr exponentiell anstieg und die Zeit, die zum Rendern benötigt wurde, halbiert wurde. Ich habe den folgenden Code in meiner Django-Vorlage verwendet:

%Vor%

edit: Dieser Fix funktioniert nicht gut mit wiederholenden Tabellenköpfen. Wenn Sie also repeat="1" ausführen, müssen Sie genau wissen, wie viele Zeilen auf jede Seite passen.

Außerdem hatte ich dieses Monster eines Selektors in meinem CSS:

%Vor%

Durch die Änderung in * {...} wurde das Rendering etwas beschleunigt. Das war kontraintuitiv, da Browser deine Seite nicht so schnell rendern, wenn du den * Selektor benutzt, als wenn du das obige Monster benutzt.

Aus zwei Gründen hat das Zusammenführen von zwei in-page <style> -Tags zu einem Tag auch die Renderzeit verringert.

    
Fábio Santos 14.12.2012 16:17
quelle