2014-09-16 8 views
9

इस समय मेरे पास एक बड़ी बाधा है जब हर कोई ऑर्डर देता है तो पीडीएफ पीढ़ी होती है। यह एक आदेश के लिए एक बड़ा सौदा नहीं है, लेकिन जब थोड़े समय के फ्रेम में बहुत कुछ होता है, तो यह प्रक्रिया बहुत धीमी होती है।छवियों के साथ पीडीएफ जेनरेट करना बहुत धीमा है

पीडीएफ को टेक्स्ट जानकारी, एक क्यूआर कोड, एक बार कोड, एक लोगो, और 1 या अधिक (20+ तक) 1/4-चौड़ाई वाली छवियों की आवश्यकता होती है।

w

वर्तमान प्रक्रिया/DOMPDF:

  1. QR कोड डब्ल्यू/पीएचपी बनाया है और PNG के रूप में सहेजी गई छवि
  2. बार कोड बनाया और PNG के रूप में सहेजा छवि
  3. DomPDF पीडीएफ
उत्पन्न करता है

नया विचार:

  1. html2pdf पीडीएफ बनाता है, और यह qr और बार कोड टैग है बार कोड

कि सैद्धांतिक रूप से QR और बारकोड छवियों का ख्याल रखना होगा उत्पन्न करने के लिए उपयोग करता है, लेकिन अभी भी, छवियों के बाकी यह भी कर धीमी गति से।

इस तरह से ऐसा करना, (क्यूआर और बार कोड) के अलावा किसी भी छवि के बिना, पीडीएफ ~ 500ms में उत्पन्न हो सकता है, लेकिन जैसे ही मैं छवियों को जोड़ना शुरू करता हूं, यह 2, 3, 4, 5 तक चला जाता है + सेकंड प्रत्येक।


जब परीक्षण चल रहा है, और प्रसंस्करण ~ 10k आदेश (कुछ ही मिनटों में), यह अभी भी लगभग 12 घंटे बाद पीडीएफ़ प्रसंस्करण गया था जब तक मैं सिर्फ यह हताशा में बंद कर दिया।

पीडीएफ एक अलग कतार प्रक्रिया में उत्पन्न होता है, इसलिए व्यक्ति को आदेश देने के दौरान इंतजार नहीं करना पड़ता है, लेकिन - अभी भी ... उच्च ट्रैफिक के दौरान उन्हें अपनी पुष्टि पीडीएफ प्राप्त करने में 5+ घंटे नहीं लग सकते ।


प्रश्न/TLDR:

मैं एक गतिशील QR कोड, एक गतिशील बार कोड, गतिशील पाठ के साथ पीडीएफ़ बनाने की मेरी प्रक्रिया कैसे कर सकते हैं, और 1-20 स्थिर चित्र (चित्र ही हैं सभी पीडीएफ में) तेजी से?

क्या ऐसी अन्य संभावित चीजें हैं जिनके बारे में मैंने नहीं सोचा है? शायद एक टेम्पलेट पीडीएफ बनाना और किसी भी तरह से गतिशील धब्बे भरने के लिए PHP का उपयोग करें?

+0

डीओएमपीडीएफ जीडी का उपयोग कर रहा है? एक अनुमान से मुझे लगता है कि कल्पना तेजी से हो सकती है। हालांकि, PHP में बहुत सी छवियों के साथ विशाल पीडीएफ को प्रोसेस करना धीमा और स्मृति उपभोग है। हमने एक समाधान लागू किया है जो लेटेक्स फाइलें उत्पन्न कर रहा है और फिर उन्हें पीडीएफ पर प्रिंट कर रहा है। आप भी कोशिश कर सकते हैं। छवि प्रसंस्करण के लिए आप जीडी के बजाय कल्पना का उपयोग करने का प्रयास कर सकते हैं। प्रश्न * व्यापक है, आपको विभिन्न समाधानों को आजमाने और बेंचमार्क करना होगा। मुझे संदेह है कि "सही" जवाब देना संभव है। अपने वर्तमान कोड को प्रोफ़ाइल के साथ-साथ यह देखने के लिए एक अच्छा विचार हो सकता है कि यह वास्तव में धीमा है। – burzum

+0

कैसे अधिक विशिष्ट होने के बारे में कोई सुझाव निश्चित रूप से स्वागत है। मैं निश्चित रूप से "आप अर्ध-कॉलन" प्रकार का उत्तर नहीं ढूंढ रहा हूं, लेकिन - मैंने प्रक्रिया और समस्या का विस्तार से वर्णन किया है और किसी भी सुझाव, विचार ... आदि से प्यार होगा। मुझे नुकसान हुआ है और मेरे सभी अन्य संसाधनों का खर्च किया है। यह सुनिश्चित नहीं है कि यहां पूछने के अलावा और कहां जाना है। :(छवियों के साथ पीडीएफ बनाने के लिए कुछ रास्ता होना चाहिए। Html2PDF और DomPDF दोनों छवियों को जोड़ने के मिनट में घोंघे के रूप में धीमे होते हैं। मैंने सोचा था कि शायद टेम्पलेट विचार में कुछ योग्यता थी, लेकिन - वहां कुछ भी नहीं मिला। – Dave

+0

अपनी स्क्रिप्ट को प्रोफाइल करें और देखें कि यह कहां धीमा है, मैं इसके छवि मैनिप्ल्यूशन भाग पर शर्त लगाता हूं। फिर इसे सुधारने का प्रयास करें। यह सबसे अच्छा है कि मैं अभी सोच सकता हूं। आप लेटेक्स समाधान को भी आजमा सकते हैं, यह मुश्किल नहीं है कार्यान्वित करने के लिए। उदाहरण: https://www.sharelatex.com/learn/Inserting_Images हालांकि मैंने 7 साल पहले फोटो प्रलेखन के साथ एक 21 पेज की मरम्मत रिपोर्ट तैयार की है और यह इस समय ठीक काम कर रहा था टीसीपीडीएफ (या कुछ और) तो आज भी ऐसा करना संभव होना चाहिए। लेकिन मुझे दिन में 10k रिपोर्टों को संसाधित नहीं करना पड़ता है। – burzum

उत्तर

4

मैं दृढ़ता से सलाह देता हूं कि आप टीसीपीडीएफ लाइब्रेरी का उपयोग करें। यह काफी तेज़ है और आसानी से केकेपीएचपी में एकीकृत किया जा सकता है। आप टीसीपीडीएफ उदाहरण page पर पीडीएफ में छवियों, बारकोड और क्यूआर कोड को शामिल करने के कई उदाहरण पा सकते हैं।

आगे this पेज से प्रदर्शन उपयोग सुझावों में सुधार करने के लिए:

  • स्थापित करें और XCache की तरह एक PHP opcode cacher कॉन्फ़िगर;
  • php.ini फ़ाइल संपादित करें और अधिकतम स्क्रिप्ट मेमोरी का उपयोग कर सकते हैं (memory_limit);
  • PHP संपादित करें।आईएनआई फ़ाइल और प्रत्येक स्क्रिप्ट का अधिकतम निष्पादन समय बढ़ाएं (max_execution_time);
  • कॉन्फ़िगर/tcpdf_config.php फ़ाइल संपादित करें: मैन्युअल रूप से $ _SERVER ['DOCUMENT_ROOT'], K_PATH_MAIN और K_PATH_URL स्थिरांक सेट करें, और स्वचालित गणना भाग को हटा दें;
  • यदि आप थाई भाषा का उपयोग नहीं कर रहे हैं, तो config/tcpdf_config.php फ़ाइल संपादित करें और K_THAI_TOPCHARS को झूठी पर सेट करें;
  • यदि आपको विस्तारित वर्णों की आवश्यकता नहीं है, तो config/tcpdf_config.php फ़ाइल संपादित करें और डिफ़ॉल्ट फोंट को मूल फोंट पर सेट करें;
  • यदि आपको यूटीएफ -8 यूनिकोड की आवश्यकता नहीं है, तो टीसीपीडीएफ कन्स्ट्रक्टर पर $ यूनिकोड पैरामीटर को गलत और $ आईएसओ -885 9 -1 'या अन्य वर्ण मानचित्र पर $ एन्कोडिंग पैरामीटर सेट करें।
  • डिफ़ॉल्ट रूप से टीसीपीडीएफ एम्बेडेड यूनिकोड टीटीएफ फोंट के आकार को कम करने के लिए फ़ॉन्ट सबसेटिंग को सक्षम बनाता है, यह प्रक्रिया बहुत धीमी है और बहुत सारी मेमोरी की आवश्यकता है, सेटफॉन्टसब्सेटिंग (झूठी) विधि का उपयोग करके बंद कर दिया जा सकता है;
  • जब भी संभव हो एम्बेडेड फ़ॉन्ट्स के बजाय कोर फोंट का उपयोग करें;
  • यदि सख्ती से आवश्यक नहीं है तो HTML वाक्यविन्यास (लिखें HTML और writeHTMLCell विधियों) का उपयोग करने से बचें;
  • छोटे टुकड़ों में बड़े HTML ब्लॉक विभाजित करें;
  • सख्ती से आवश्यक नहीं होने पर लेनदेन का उपयोग करने से बचें;
  • परिवर्तन के बाद वेबसर्वर को पुनरारंभ करें।

कि स्वीकार्य स्तर तक के प्रदर्शन में सुधार नहीं करता है तो आप अपने CakePHP आवेदन (या बस स्क्रिप्ट पीडीएफ़ की पीढ़ी चलता है, तो यह CakePHP प्रयोग नहीं करते) अधिक उपलब्ध संसाधनों के साथ एक दूसरे सर्वर पर स्थापित कर सकते हैं और केवल पीडीएफ पीढ़ी के लिए उस सर्वर का उपयोग करें।

+1

विवरण के लिए बहुत बहुत धन्यवाद। मैंने सुना है कि कुछ लोगों ने इसका उल्लेख "तेज़" किया है, लेकिन क्या आपको इसे वापस करने के लिए कोई डेटा मिला है? टीसीपीडीएफ एएसएपी का प्रयास करेगा और जवाब के रूप में चिह्नित होगा अगर यह काम करता है! :) – Dave

0

टीसीपीडीएफ छवियों के साथ भी बहुत धीमी है

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