2015-02-02 8 views
5

में कनवर्ट करते समय अमान्य फ़ाइल नाम त्रुटि प्राप्त करना मैं एक पीडीएफ को एक स्क्रिप्ट में एक जेपीजी में परिवर्तित करने के लिए कल्पना का उपयोग कर रहा हूं ... यह ठीक काम करता है अगर मैं अपलोड किए गए पीडीएफ के लिए सीधे पथ देता हूं पेज निर्दिष्ट, लेकिन जब मैं फ़ाइल पथ के अंत पर [0] जोड़ने निर्दिष्ट करने के लिए है कि मैं केवल प्रथम पृष्ठ पढ़ना चाहते हैं, यह निम्न त्रुटि के साथ बाहर बम:पीडीएफ के पहले पृष्ठ को जेपीजी

"Fatal error: Uncaught exception 'ImagickException' with message 'Invalid filename provided' Imagick->readImage()"

मैं भी '/path/to/file.pdf[0]' का उपयोग कर की कोशिश की है बिना किस्मत के सीधे निर्माता में, लेकिन पेज विनिर्देशक के बिना, यह भी ठीक काम करता है।

दस्तावेज़ीकरण के अनुसार ... यह काम करना चाहिए। मुझसे यहां क्या गलत हो रहा है?

$doc_preview = new Imagick(); 
$doc_preview->setResolution(180,180); 
$doc_preview->readImage('/path/to/file.pdf[0]'); 
$doc_preview->setImageFormat('jpeg'); 
$doc_preview->writeImage('/path/to/file.jpg'); 
$doc_preview->clear(); 
$doc_preview->destroy(); 

अद्यतन: मुझे यह उल्लेख करना चाहिए था कि मैं एचएचवीएम का उपयोग कर रहा हूं। यकीन नहीं है कि इससे इस मामले में कोई फर्क पड़ता है ... लेकिन मैं हूं।

UPDATE2: मैंने HHVM github repo पर an issue खोला है। उम्मीद है कि वे इस बग को ठीक कर देंगे ... तब तक, जो उत्तर मैंने नीचे सही किया है वह एक सभ्य (यद्यपि हैकी) कामकाज है।

+0

यह एक बग है। सुविधा समर्थित नहीं है, लेकिन सभी PHP मैनुअल पर दोहराया। डुप्लिकेट: http://stackoverflow.com/q/11114747/1163786 setIteratorIndex() का उपयोग करके समाधान: http://stackoverflow.com/a/22673725/1163786 –

+0

अच्छा खोज ... मैंने इसे सभी के माध्यम से पढ़कर निकाला समर्थित तरीकों ... लेकिन फिर भी ... यह सबसे अच्छा है। मैं अपने समाधान को एक डुप्लिकेट समाधान पर भी विचार नहीं करता क्योंकि मैं पुन: प्रयास करने और कई छवियों का उत्पादन करने की कोशिश नहीं कर रहा हूं ... और इसलिए पहले खोज करते समय उस समाधान को खोजने में असमर्थ था। – kevindeleon

+0

क्षमा करें, केविन - मैंने यह नहीं देखा कि यह समस्या एचएचवीएम एक्सटेंशन से संबंधित है। –

उत्तर

3

ठीक है ... इसलिए मेरी स्थिति में इसे ठीक करने के लिए (हैकी) तरीका fopen() का उपयोग करना है और फिर setIteratorIndex(0) का उपयोग करना है जो बेहद अनजान है। लेकिन उन लोगों के लिए जो एक ही समस्या है ... वहां आप जाओ!

$pdf_handle = fopen('/path/to/file.pdf', 'rb'); 

$doc_preview = new Imagick(); 
$doc_preview->setResolution(180,180); 
$doc_preview->readImageFile($pdf_handle); 
$doc_preview->setIteratorIndex(0); 
$doc_preview->setImageFormat('jpeg'); 
$doc_preview->writeImage('/path/to/file.jpg'); 
$doc_preview->clear(); 
$doc_preview->destroy(); 
1

मेरे पास मेरे कंप्यूटर में कल्पना नहीं है लेकिन मुझे लगता है कि समस्या क्या है। समस्या यह है कि जब आप पृष्ठ भाग के साथ एक पीडीएफ फाइल खोलते हैं तो आप निर्देशिका पथ स्ट्रिंग को शामिल नहीं कर सकते जिसमें आगे स्लैश शामिल है। मुझे लगता है कि क्योंकि मैंने php.net से readImage फ़ंक्शन पेज को http://php.net/manual/en/imagick.readimage.php पर पढ़ा है और उनमें निर्देशिका पथ शामिल नहीं है, इसलिए मुझे लगता है कि यह एक चमक है लेकिन जारी है। आपको chdir() (http://php.net/manual/en/function.chdir.php) का उपयोग करके निर्देशिका को पीडीएफ फ़ाइल में बदलने की कोशिश करनी चाहिए और फिर निर्देशिका पथ के बिना $doc_preview->readImage('file.pdf[0]'); जैसे ही फ़ंक्शन को आजमाएं। शायद यह काम करेगा। कुछ एपीआई के पास ग्लिस हैं और आपको उनके आसपास काम करना है।

+0

मैं अनुमान की सराहना करता हूं, लेकिन मुझे यकीन नहीं है कि 'chdir() 'का उपयोग करना एक अच्छा विकल्प है। यदि यह वास्तव में मुद्दा है ... यह एक निराशाजनक बग है। – kevindeleon

1

readImage() की आवश्यकता है कि $ फ़ाइल नाम एक पूर्ण पथ है।

यदि आप किसी रिश्तेदार पथ का उपयोग करना चाहते हैं, तो उस पर realpath() का उपयोग करें, जो सापेक्ष पथ को एक पूर्ण फ़ाइल पथ में बदल देता है।

$imagick->readImage('/path/to/file.pdf[0]'); 

के बजाय

कोशिश

$imagick->readImage(realpath("/path/to/file.pdf")."[0]"); 
+0

सिवाय इसके कि मैं पहले से ही पूर्ण सर्वर पथ का उपयोग कर रहा हूं ... सापेक्ष पथ नहीं ... यही कारण है कि यह काम करता है अगर मैं अंत में पेज विनिर्देशक का उपयोग नहीं करता हूं।समस्या यह है कि PHP/Imagemagick एक पृष्ठ निर्दिष्टकर्ता के साथ फ़ाइल नाम स्वीकार नहीं कर रहा है यदि पथ भी दिया गया है ... जो एक बग प्रतीत होता है। इसे पृष्ठ विनिर्देशक के साथ फ़ाइल निर्दिष्टकर्ता या फाइल के साथ फ़ाइल के पूर्ण फ़ाइल के साथ फ़ाइल नाम स्वीकार करना चाहिए, लेकिन ऐसा नहीं है। हालांकि मैं निश्चित होने का परीक्षण करूंगा। – kevindeleon

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