2012-08-29 24 views
7

का उपयोग कर मैं टेम्पलेट्स के आधार पर पीडीएफ फाइलों की एक बड़ी पीढ़ी कर रहा हूं और मैं बड़े प्रदर्शन मुद्दों में तेजी से भाग गया। मेरे वर्तमान परिदृश्य इस प्रकार है:PHP में थोक टेम्पलेट आधारित पीडीएफ पीढ़ी पीडीएफटी

  1. प्राप्त डेटा से db
  2. एकल डेटा पंक्ति और पीडीएफ प्रपत्र
  3. लिखने .fdf डिस्क
  4. करने के लिए फ़ाइल के आधार पर fdf बनाने भरे जाने fdf साथ पीडीएफ विलय pdftk (समतल कमांड के साथ fill_form)
  5. सभी .pdf के
  6. सब उत्पन्न फ़ाइलों उत्पन्न कर रहे हैं जब तक पंक्तियों पर पुनरावृत्ति जारी रखने का उपयोग कर एक साथ में विलय कर रहे हैं अंत और एकल पीडीएफ ग्राहक

मैं passthru का उपयोग ग्राहक के लिए कच्चे उत्पादन देने के लिए (बचाता फ़ाइल लेखन समय), लेकिन यह सिर्फ एक छोटे से प्रदर्शन में सुधार है को दिया जाता है। 200 ऑपरेशन के लिए कुल ऑपरेशन समय लगभग 50 सेकंड है और मैं कम से कम 10 सेकंड तक नीचे उतरना चाहता हूं।

आदर्श परिदृश्य इन सभी पीडीएफ को स्मृति में संचालित करेगा और उनमें से प्रत्येक को फ़ाइल को अलग करने के लिए नहीं लिख रहा है, लेकिन आउटपुट करना असंभव होगा क्योंकि मैं बाहरी उपकरण जैसे पीडीएफटीके को उस प्रकार का डेटा नहीं पारित कर सकता । एक अन्य विचार उन सभी पंक्तियों के साथ एक बड़ी .fdf फ़ाइल उत्पन्न करना था, लेकिन ऐसा लगता है कि इसकी अनुमति नहीं है।

क्या मुझे यहां कुछ बहुत छोटा लगता है?

मैं किसी भी सलाह के लिए धन्यवादपूर्ण हूं।

पीएस। मुझे पता है कि मैं कुछ अच्छी लाइब्रेरी का उपयोग कर सकता हूं जैसे कि पीडीएफएलआईबी लेकिन मैं अब केवल खुले लाइसेंस प्राप्त पुस्तकालयों पर विचार कर रहा हूं।

संपादित करें:

मैं वाक्य रचना एक टेम्पलेट के रूप में एक ही पीडीएफ का उपयोग कर एकाधिक पृष्ठों के साथ एक .fdf फ़ाइल का निर्माण करने के पता लगाना करने के लिए कर रहा हूँ, कुछ घंटे बिताए और किसी भी अच्छा प्रलेखन नहीं मिल सका।

+0

क्या आप वेबफिंड के साथ xdebug जैसे कुछ प्रोफाइलिंग टूल का उपयोग कर सकते हैं और देख सकते हैं कि वास्तव में समय क्या है (और फिर आप इसे हल कर सकते हैं), मैं कुछ दिनों पहले उसी स्थिति में गिर गया था, जो ओपन सोर्स क्यूइंग सिस्टम का उपयोग कर रहा था मेरे मामले में समय लेना मैं dompdf का उपयोग कर रहा था जो फिर से खुला स्रोत समाधान है। – amitchhajer

+0

मैंने प्रोफाइलिंग और मुख्य चीज जो बहुत समय लेती है वह अलग-अलग पीडीएफ लिख रही है। –

+0

समानांतर में केवल 6 या 7 पीडीएफटीके रूपांतरण क्यों न चलाएं जो आपके कुल समय को आपके 10 सेकंड थ्रेसशोल्ड में ले जाएं। –

उत्तर

1

एक लंबे समय के लिए एक ही समस्या का सामना करना पड़ beeing के बाद (LaTeX के आधार पर मेरे pdfs उत्पन्न करने के लिए चाहता था) मैं अंत में एक और कच्चे तेल की लेकिन प्रभावी तकनीक करने के लिए स्विच करने का फैसला किया:

मैं दो चरणों में मेरी PDFs उत्पन्न: पहले मैं एक टेम्पलेट इंजन के साथ एचटीएमएल उत्पन्न करता हूं जैसे twig या smarty। दूसरा मैं पीडीएफ उत्पन्न करने के लिए mpdf का उपयोग करता हूं। मैंने कई अन्य html2pdf ढांचे का प्रयास किया और एमपीडीएफ का उपयोग करके समाप्त हो गया, यह बहुत परिपक्व है और लंबे समय से विकसित होता है (लगातार अद्यतन, समृद्ध कार्यक्षमता)। इस तकनीक का उपयोग करने का लाभ: आप अपने दस्तावेज़ों को डिजाइन करने के लिए सीएसएस का उपयोग कर सकते हैं (एमपीडीएफ पूरी तरह से सीएसएस की विशेषताएं) - जो सीएसएस लाभ (http://www.csszengarden.com) के साथ आता है और गतिशील तालिकाओं को बहुत आसान बनाता है।

एमपीडीएफ एचटीएमएल टेबल को पार करता है और थैडर, टफटर तत्व की तलाश करता है और यदि आपकी टेबल एक पेज आकार से बड़ी है तो इसे प्रत्येक पृष्ठ पर रखता है। इसके अलावा आपको पृष्ठ शीर्षलेख और पेज फूटर तत्वों को पृष्ठ एनआर जैसे गतिशील इकाइयों के साथ परिभाषित करने की संभावना है।

मुझे पता है, इस चक्कर का उपयोग एक कामकाज प्रतीत होता है, लेकिन ईमानदार होने के लिए, कोई लेटेक्स नहीं है, पीडीएफ जो भी इंजन एचटीएमएल जितना मजबूत और सरल है!

0

fpdf (http://www.fpdf.org/)

की तरह एक अलग कम जटिल पुस्तकालय का प्रयास करें मैं इसे काफी अच्छा और लाइट पाते हैं।

हमेशा पुस्तकालयों को ढूंढें जो छोटे होते हैं और केवल वही करते हैं जो आपको करने की आवश्यकता होती है।

लाइब्रेरी जितना अधिक संसाधन उपभोग करता है उतना बड़ा होता है।

+0

हाँ, मैंने उन पुस्तकालयों (fpdf, tcpdf, dompdf) को देखा और उपयोग किया है, लेकिन वे ऐसा नहीं करते हैं जो मुझे चाहिए। मुझे एक पीडीएफ टेम्पलेट के आधार पर एक बड़ा पीडीएफ उत्पन्न करना है और इसे डेटा से भरना है। इनमें से कोई भी पुस्तकालय ऐसा नहीं करता है। वे खरोंच से अपने पीडीएफ बनाने के लिए अच्छे हैं, लेकिन templating के लिए नहीं। –

+0

फिर आपको प्रत्येक पीढ़ी के बाद स्मृति को मंजूरी मिलने के लिए अलग-अलग PHP कॉलों में एक-एक करके उत्पन्न करने पर विचार करना चाहिए। सुनिश्चित करें कि जब भी आप उत्पन्न करते हैं तो आप किसी भी बड़े चर को साफ़ करते हैं। शायद एक गैर PHP समाधान भी। – transilvlad

0

यह आपकी एकाधिक-पेज समस्या की सहायता नहीं करेगा, लेकिन मुझे लगता है कि पीडीएफटीके - चरित्र को 'मानक इनपुट से पढ़ने' के लिए स्वीकार करता है।

डिस्क पर लिखने से बचने के लिए, आप अपने stdin के माध्यम से .fdf को पीडीएफटीके प्रक्रिया में भेज सकते हैं।