2014-08-29 21 views
5

benim pdf yazar olarak DOMPDF yapma Benim app laravel kullanılan ve DOMPDF bulunur: Ben .pdf benim .docx dosyası (Microsoft Word) dönüştürmek için olduğunu ulaşmak istediği nedirphpWord

../vendor/dompdf/dompdf

dosya. Docx dosyası, şablon dosyasını yükleyerek ve değerleri değiştirerek phpWord tarafından oluşturuldu.

İşte pasajı var: Bundan sonra

// 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); 

, bir .docx dosya oluşturulur. Bunun da bir PDF sürümünü yapmak istedim. bu yüzden arama ve bu kod parçacığını buldu ve benim kodunda eklendi:

   \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'); 

Ama bu hata var:

{"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}} 

nasıl PHPWord benim pdf yazar olarak DOMPDF yapacak? Başka seçenekler bulamıyorum, bu yüzden burada soruyorum. Umarım bana yardım edebilirsin. Teşekkürler!

+0

Dompdf kitaplığına mutlak bir yol denediniz mi? – BrianS

cevap

2

Mutlak yola ayarlamanız gerekir. Bunu bootstrap.php dosyanıza yerleştirin. Ben @Franz Holzingers cevap hakkı Bugün yüklü PHP kelimenin versiyonu DOMPDF olmasını işleyici adını gerektirir dışında noktada olduğunu düşünüyorum

$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__)); 

Bu çağrıdır. Gösterildiği gibi tüm kapaklar ise yöntem başarısız olur. Ayrıca, günlüğe yüklediğim sürüm bir yapılandırma dosyası kullanır, bu nedenle açık çağrılar çalışırken, yapılandırma dosyası yüklendikten sonra bunları yerleştirirseniz, yapılandırma yüklerinden önce bunları yerleştirirseniz üzerine yazılır. Ben phpword yükleme dizinlerinde "src" yukarıdaki dizinde bulunan "phpword.ini.dist" dosyasını bulmak için daha basit bir yanıt önermektir; DomPDF dizininin DomPDF'yi nereye yüklediğinizi göstermek ve daha sonra dosyayı aynı dizine ancak phpword.ini adı altında kaydetmek için satırı düzenleyin. Artık yapılandırma yükleyicisi, Frank'in sizin için belgelediği çağrıları gerçekleştirecektir. Yanlış bir şekilde DomPDF yolunu girerseniz, uyarı almazsınız, ancak bu yöntemi kullanarak doğru bir şekilde yüklendiğini test edebilirsiniz \ PhpOffice \ PhpWord \ Settings :: getPdfRendererPath (domPdfPath); Bu yöntemden dönüş boşsa, yapılandırma dosyasında belirttiğiniz yol adının mevcut olmadığı anlamına gelir. Yükleyicinin, yolun yalnızca yolun bulunduğu DomPDF içerdiğini kontrol etmediğini unutmayın.

Şu anda phpword, üç PDF işleme motorunu desteklemektedir. Üçünün herhangi biri, yukarıda belirtilen ini dosyasında, kurulumun yolunu sağlayarak ve PDF oluşturucunun adını bu değerlerden birine (büyük/küçük harf duyarlı) ayarlayarak yapılandırılabilir: DomPDF, TCPDF veya MPDF. DomPDF önerilir ve öntanımlıdır, ancak kodda, başka birine yatırım yaptığınız veya başka bir tercihiniz varsa, bunu phpword ile kullanabilirsiniz.

+1

"DomPDF" adıyla ilgili notunuz için çok teşekkür ederim - Bu yol hatasıyla uğraşmak için birkaç saat harcadım, cevabınızı okuyana ve yazım DOMPDF -> DomPDF düzeltilinceye kadar ve şimdi çalışıyor! – DaneSoul

+0

\ PhpOffice \ PhpWord \ Settings'ın şu sabitleri vardır: \ PhpOffice \ PhpWord \ Settings :: setPdfRendererName ile birlikte kullanılabilen PDF_RENDERER_DOMPDF, PDF_RENDERER_TCPDF, PDF_RENDERER_MPDF. Composer kullanıyorsanız, bu satırı da başlatma komut dosyasına ekleyin: define ('DOMPDF_ENABLE_AUTOLOAD', false); – Marcos