2011-09-29 13 views
8

के साथ बहुत धीमी है I HTML को पीडीएफ में परिवर्तित करने के लिए पीसा का उपयोग कर रहा हूं (एक Django प्रोजेक्ट में)। एकाधिक पृष्ठों पर फैले टेबलों को संभालने में यह बहुत धीमी है:पिसा पीडीएफ कनवर्टर बड़ी टेबल

200-पंक्ति तालिका में परिवर्तित होने के लिए 150 सेकंड तक लगते हैं, जबकि इसे 15 सेकंड लगते हैं यदि मैं इसे छोटी तालिकाओं में विभाजित करता हूं।

क्या पीसा द्वारा संभाले जाने वाले HTML टेबल बनाने के लिए युक्तियां या सर्वोत्तम प्रथाएं हैं?

+0

यह मदद नहीं कर सकता है लेकिन क्या आपने wkhtmltopdf को देखा है? – Matt

+0

यदि कोई अन्य समाधान संभव नहीं है तो शायद मैं इसे देख लूंगा: मैंने पीजा को Django के साथ इसके एकीकरण के कारण चुना है ... – Don

+2

FWIW मैं कुछ दस्तावेज़ बनाते हैं जो तालिका आधारित हैं लेकिन केवल सामग्री के एक पृष्ठ के बारे में जो लोड करते हैं तत्काल लेकिन रिपोर्ट जो मैं करता हूं उसके करीब 1300 पंक्तियां होती हैं और 50 पृष्ठों का विस्तार लगभग 30sec लगता है। आप किस फोर्क का उपयोग कर रहे हैं? मैं यह देखने के लिए [ChrisGlass/Xhtml2pdf] (https://github.com/chrisglass/xhtml2pdf/tree/xhtml2pdf-refactor) देख सकता हूं कि यह गैर-बनाए रखा [मूल संस्करण] (https://github.com/ होल्टविक/xhtml2pdf) –

उत्तर

7

मुझे एक ही समस्या थी। दस्तावेज़ सिर्फ एक फ्रंट पेज और एक विशाल टेबल था। पीडीएफ प्रतिपादन समय मेरी सामग्री तालिका के आकार के साथ तेजी से बढ़ रहा था।

मैं बाहर की जाँच करने के लिए समस्या हो सकती है जो चीजों की एक सूची बना

मैं अपनी पीडीएफ प्रतिपादन समारोह पर सरल समय (क्योंकि यह HTML प्रतिपादन, यह StringIO को गुजर, या HTTP प्रतिक्रिया बनाने हो सकता है), और ध्यान दिया कि pisa.pisaDocument कॉल को वापस करने के लिए 60 सेकंड लग गए। मैंने चीजों की एक चेकलिस्ट की जो समस्या हो सकती है, और उन पर काम किया। चेकलिस्ट में छवियां, सीएसएस, मार्कअप जटिलता, और फ्रेम्स शामिल थे।

छवियों ने प्रतिपादन समय को मुश्किल से प्रभावित किया (मेरे पास केवल एक पृष्ठ था, इसलिए वाईएमएमवी)। फ्रेम्स भी नहीं था।

मार्कअप जटिलता मेरे टेम्पलेट की मुख्य समस्या थी। जाहिर है, पीसा बहुत ही धीरे-धीरे

तालिका को प्रस्तुत करने में बहुत अधिक समय लग रहा था, लेकिन मैंने देखा कि यदि मैं तालिका को छोटी तालिकाओं में विभाजित करता हूं, तो प्रतिपादन समय तेजी से बढ़ता नहीं है, और सबकुछ प्रस्तुत करने में लगने वाला समय आधे में कट गया था। मैं अपने Django टेम्पलेट में नीचे दिए गए कोड का प्रयोग किया:

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

संपादित करें: इस सुधार में तालिका हेडर दोहरा साथ अच्छी तरह से काम नहीं करता है, इसलिए यदि आप repeat="1" कर रहे हैं आप को पता है कि उनकी संख्या कितनी पंक्तियाँ प्रत्येक में फिट करने के लिए है पृष्ठ।

इसके अलावा, मैं अपने सीएसएस में एक चयनकर्ता के इस राक्षस था: प्रतिपादन थोड़ा तेज

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> टैग को एक टैग में विलय करने से प्रतिपादन समय भी कम हो गया।

+0

की कोशिश की, मैं भी अपनी टेबलों को विभाजित करने में समाप्त हुआ, लेकिन ऐसे मामले हैं जिनमें मैं पहले से नहीं बता सकता कि कितनी पंक्तियां एक ही पृष्ठ में फिट होती हैं – Don

+1

मेरे मामले के लिए, इससे कोई फर्क नहीं पड़ता। मुझे सिर्फ प्रार्थना करना है कि कोई भी मुझे टेबल हेडर दोहराने के लिए नहीं कहता है, क्योंकि यह फिक्स दोहराने के साथ काम नहीं करता है = "1" –

+0

तालिका को तोड़ने से मुझे ~ 3x गति मिली मुझे लगता है कि धीमापन रिपोर्टलाब के भीतर किसी समस्या के कारण हो सकता है - https://groups.google.com/forum/#!topic/xhtml2pdf/vUoq1IRauvg –

संबंधित मुद्दे