2012-05-07 14 views
7

मैं एक PHP पाश करता है निम्नलिखित है: कर्ल के माध्यम से एक वेब पेज मेंपीडीएफ उत्पन्न करने से पहले छवियों को कैसे लोड किया जाए?

  1. लॉग
  2. कैद और आंतरिक पृष्ठ है कि एक लॉगिन
  3. सहेजें एक स्थानीय फाइल करने के लिए पृष्ठ के HTML की आवश्यकता है
  4. WKHTMLTOPDF का उपयोग करना, एक पीडीएफ के रूप में प्रस्तुत करना पेज

मुद्दा मैं आ रही है कि हर एक बार थोड़ी देर में (शायद ~ समय का 30%), छवियों पीडीएफ में से नहीं चल पाएगी । अगर मैं सहेजी गई HTML फ़ाइलों में से एक खोलता हूं, तो मुझे पता चलेगा कि मुझे छवियों को दिखाने के लिए पृष्ठ में मैन्युअल रूप से रीफ्रेश करना होगा।

छवियों को लोड करने के व्यावहारिक रूप से सुनिश्चित करने के तरीके पर कोई विचार? बातें जो मैंने कोशिश की है:

  1. हर लाइन
  2. मेरी WKHTMLTOPDF कॉल करने के लिए --javascript-delay 30000 जोड़ा जा रहा है के बीच sleep(n) सुनिश्चित करने के लिए यह किसी भी छवियों को लोड करने के लिए पर्याप्त समय है।

# 1 ने इसे काफी खराब बना दिया, और # 2 ने कुछ भी नहीं किया।

धन्यवाद!

+1

क्या स्थानीय HTML में छवि संदर्भ अभी भी मान्य हैं? तो, आपको रिमोट सर्वर से हर छवि को पकड़ना होगा और इसे स्थानीय रूप से सही जगह पर कॉपी करना होगा।मैं सोच रहा हूं कि वैध कुकी (CURL आदि के माध्यम से) प्राप्त करना आसान होगा और फिर इसे wkhtmltopdf पर आपूर्ति करें, जो तब सीधे दूरस्थ प्रमाणीकृत पृष्ठ पर जाती है? – halfer

+0

wkhtmltopdf वास्तव में कुकी बनाने के लिए एक विधि है, लेकिन यह इस विशेष स्थिति (इसलिए कर्ल रूट) में काम करने के लिए एक दुःस्वप्न था। जब मैं एचटीएमएल में पढ़ता हूं तो मैं सभी पथों को दूरस्थ छवि पथ में बदल रहा हूं, जो निश्चित रूप से काम करता है क्योंकि मैं HTML फ़ाइल खोल सकता हूं और छवियों को देखने के लिए कड़ी मेहनत कर सकता हूं, ऐसा लगता है कि छवि प्राप्त करने के लिए पर्याप्त ओम्फ नहीं है हर बार। सबसे खराब मामला मुझे लगता है कि मैं उस कुकी को wkhtmltopdf के साथ काम करने की कोशिश कर सकता हूं। – Chords

+2

वैकल्पिक दृष्टिकोण के लिए, आप एचटीएमएल/सीएसएस/छवियों को स्थानीय स्थान पर डाउनलोड करने के लिए 'wget'' के साथ 'wget'' और '--convert-links' विकल्पों के साथ' wget' का उपयोग करने का प्रयास कर सकते हैं, एक ही समय में लिंक बदलना । फिर स्थानीय प्रतिलिपि के खिलाफ पीडीएफ रेंडरर चलाएं। – Darien

उत्तर

1

चरण 3 & 4 के बीच आपके उदाहरण के 4 आप सभी छवि लिंक के लिए HTML फ़ाइल को पार्स करने और उन्हें व्यक्तिगत रूप से कर्ल का उपयोग करके व्यक्तिगत रूप से डाउनलोड करने, स्थानीय रूप से उन्हें सहेजने और फिर सहेजे गए HTML फ़ाइल में लिंक को अपडेट करने पर विचार करना चाहेंगे रिमोट के बजाय नए स्थानीय छवि संसाधन।

एचटीएमएल को पीडीएफ के रूप में प्रस्तुत करते समय यह छवियों के लोड समय में काफी सुधार करना चाहिए।

+0

धन्यवाद, स्टीव - यही वह है जो मैं कर रहा था और यह पूरी तरह से काम करता है। – Chords

0

मैंने कभी ऐसा नहीं किया है, लेकिन शायद आप यह पता लगा सकते हैं कि डाउनलोड curl_getinfo() पर कॉल करके और फिर CURLINFO_SIZE_DOWNLOAD के मानों को पढ़कर किया जाता है - जब तक कि मूल्य अब और नहीं बदलेगा?

0

क्या होगा यदि आप cURL साथ एचटीएमएल स्क्रैप के बाद, प्रत्येक img तत्व के माध्यम से php पाश है और छवि फ़ाइल बाइनरी डेटा में पढ़ सकते हैं और तरह खोला छवि फ़ाइल का बेस 64 एन्कोड मूल्य के साथ छवि src यूआरएल विशेषता बदल देते हैं:

'<img src="data:image/jpg;base64,'. base64_encode($imagedata) . '"/>'

अगर base64 छवि डेटा पेज में hardcoded है की तुलना में है कि आप सत्यापित करने के लिए सभी चित्रों "लोडेड" कर रहे हैं और पीडीएफ रूपांतरण से पहले सभी चित्रों को डाउनलोड किया था शुरू करने की समस्या से बचने के लिए एक कार्यक्रम संबंधी रास्ता देना होगा ...

+0

इसे दृश्यों का उपयोग करके पीडीएफ प्रतिपादन के लिए केवल एक नया लेआउट की आवश्यकता है। ज्यादा अभ्यास नहीं। कई छवियों के साथ, PHP mem सीमा को हिट करना भी आसान है। – thevikas

0

क्या आप छवियों पर ऑनलोड नहीं जोड़ सका यह जानने की जरूरत है कि लोड हो रहे हैं? जैसे

<img src='foo.jpg' onLoad='callbackFuncion();'/> 
0

कुछ शायद आप डाउनलोड की एचटीएमएल संसाधित कर सकते हैं, img टैग के लिए खोज, तो एक स्थानीय भंडारण के लिए छवियों को dowloading और src विशेषता का स्थान लिया। इस तरह, सभी छवियों के उपलब्ध होने के बाद, आपको पीडीएफ उत्पन्न करना चाहिए।