2014-08-29 11 views
5

के लिए मेरे पीडीएफ लेखक के रूप में DomPDF बनाना मैं अपने अनुप्रयोग के लिए laravel का इस्तेमाल किया और dompdf में पाया जाता है:phpWord

../vendor/dompdf/dompdf

मैं क्या हासिल करने के लिए .pdf को मेरी .docx फ़ाइल (माइक्रोसॉफ्ट वर्ड) कन्वर्ट करने के लिए है चाहता था फ़ाइल। Docx फ़ाइल को phpWord द्वारा टेम्पलेट फ़ाइल लोड करके और मानों को प्रतिस्थापित करके उत्पन्न किया गया था।

यहाँ टुकड़ा है:

// Get the absolute path of the template file 
$wordTemplatePath = $this->getDocumentTemplatePath('resignation.docx'); 

// Load the template file 
    $document = $this->phpWord->loadTemplate($wordTemplatePath); 

// This will be filled with data 
$wordData = [] 

.... Process to fill the data ..... 

// Replace value to actual word document 
    $this->setTemplateValues($wordData, $document); 


// Generate its filename 
    $file = $this->generateFileName('Retirement-Certificate.docx', $id); 

     // Fetch the absolute path to save the document 
     $filepath = $this->getSavePath($file); 

     // Save the word document 
     $document->saveAs($filepath); 

उसके बाद, एक .docx फ़ाइल उत्पन्न हो जाएगा। मैं इसके पीडीएफ संस्करण भी बनाना चाहता था। तो मैं खोज और इस कोड स्निपेट पाया और मेरे कोड में कहा:

   \PhpOffice\PhpWord\Settings::setPdfRendererPath('../vendor/dompdf/dompdf'); 
\PhpOffice\PhpWord\Settings::setPdfRendererName('DOMPDF'); 

//Load temp file 
$phpWord = \PhpOffice\PhpWord\IOFactory::load($filepath); 

//Save it 
$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord , 'PDF'); 
$xmlWriter->save('result.pdf'); 

लेकिन मैं यह त्रुटि आई:

{"error": 
{"type":"PhpOffice\\PhpWord\\Exception\\Exception","message":"PDF rendering library or library path has not been defined.", 
"file":"C:\\xampp\\htdocs\\vagrant\\vendor\\phpoffice\\phpword\\src\\PhpWord\\Writer\\PDF.php", 
"line":49}} 

मैं कैसे PHPWord के लिए मेरे पीडीएफ लेखक के रूप में DomPDF होगा? मुझे कोई अन्य विकल्प नहीं मिल रहा है इसलिए मैं यहां पूछता हूं। मुझे आशा है आप मेरी मदद कर सकते हैं। धन्यवाद!

+0

क्या आपने dompdf लाइब्रेरी के लिए एक पूर्ण पथ की कोशिश की है? – BrianS

उत्तर

2

आपको इसे पूर्ण पथ पर सेट करना होगा। इसे अपनी bootstrap.php फ़ाइल में रखें। मुझे लगता है कि @Franz Holzingers जवाब सही सिवाय इसके कि मैं आज PHP स्थापन शब्द के संस्करण DomPDF होने के लिए रेंडरर नाम की आवश्यकता है कि बिंदु पर है

$domPdfPath = realpath(PHPWORD_BASE_DIR . '/../vendor/dompdf/dompdf'); 
\PhpOffice\PhpWord\Settings::setPdfRendererPath($domPdfPath); 
\PhpOffice\PhpWord\Settings::setPdfRendererName('DomPDF'); 

//Load temp file 
$phpWord = \PhpOffice\PhpWord\IOFactory::load($filepath); 

//Save it 
$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord , 'PDF'); 
$xmlWriter->save('result.pdf'); 
3

:

define('PHPWORD_BASE_DIR', realpath(__DIR__)); 

यह आपके कॉल है। विधि दिखाया गया है कि यह सभी कैप्स दिखाया गया है। साथ ही संस्करण जो मैंने दिन में स्थापित किया है, एक कॉन्फ़िगरेशन फ़ाइल का उपयोग करता है, जबकि स्पष्ट कॉल काम करते हैं, यदि आप कॉन्फ़िगरेशन फ़ाइल लोड के बाद उन्हें रखते हैं, तो वे कॉन्फ़िगरेशन लोड से पहले उन्हें ओवरराइट करते हैं। मैं phpword इंस्टॉल निर्देशिकाओं में "src" उपरोक्त निर्देशिका में स्थित "phpword.ini.dist" फ़ाइल का पता लगाने का एक सरल उत्तर प्रस्तावित करता हूं; DomPDF निर्देशिका के लिए लाइन को संपादित करें, यह दिखाने के लिए कि आपने DomPDF को इंस्टॉल किया था और फिर फ़ाइल को उसी निर्देशिका में सहेज लिया लेकिन नाम phpword.ini के अंतर्गत। अब विन्यास लोडर उन फ्रैंक को कॉल करेगा जो फ्रैंक ने आपके लिए दस्तावेज किया था। यदि आप डोमपीडीएफ के पथ को गलत तरीके से दर्ज करते हैं, तो आपको कोई चेतावनी नहीं मिलती है लेकिन आप परीक्षण कर सकते हैं कि यह विधि \ phpOffice \ PhpWord \ सेटिंग्स :: getPdfRendererPath (domPdfPath) का उपयोग करके सही ढंग से स्थापित किया गया है; अगर उस विधि से वापसी खाली है, तो इसका मतलब है कि कॉन्फ़िगरेशन फ़ाइल में निर्दिष्ट पथ नाम मौजूद नहीं था। ध्यान दें कि लोडर यह जांच नहीं करता है कि पथ में डोमपीडीएफ है, केवल पथ मौजूद है।

यह ध्यान देने योग्य है कि इस समय, phpword तीन पीडीएफ प्रतिपादन इंजन का समर्थन करता है। इन तीनों में से किसी एक को स्थापना के पथ प्रदान करके उपरोक्त वर्णित आईएनआई फ़ाइल में कॉन्फ़िगर किया जा सकता है और इन मानों में से किसी एक को पीडीएफ रेंडरर का नाम सेट करना (केस संवेदनशील): डोमपीडीएफ, टीसीपीडीएफ या एमपीडीएफ। डोमपीडीएफ की सिफारिश की जाती है और डिफ़ॉल्ट लेकिन यह कोड में दिखाई देता है कि यदि आपके पास निवेश में कोई अन्य निवेश है या किसी अन्य के लिए प्राथमिकता है, तो आप इसे phpword के साथ उपयोग कर सकते हैं।

+1

"डोमपीडीएफ" नाम के बारे में नोट के लिए आपको बहुत बहुत धन्यवाद - मैंने इस पथ त्रुटि के साथ कई घंटों तक संघर्ष किया है, जब तक कि यह आपका उत्तर न पढ़े और वर्तनी को ठीक करें DOMPDF -> DomPDF और अब यह काम करता है! – DaneSoul

+0

\ PhpOffice \ PhpWord \ सेटिंग्स में इन स्थिरांक हैं: PDF_RENDERER_DOMPDF, PDF_RENDERER_TCPDF, PDF_RENDERER_MPDF जिसका उपयोग \ PhpOffice \ PhpWord \ सेटिंग्स :: setPdfRendererName के साथ किया जा सकता है। यदि आप संगीतकार का उपयोग कर रहे हैं, तो स्टार्टअप स्क्रिप्ट पर भी यह लाइन जोड़ें: परिभाषित करें ('DOMPDF_ENABLE_AUTOLOAD', झूठा); – Marcos