2014-08-29 17 views
5

benutzte ich Laravel für meine App und die dompdf ist gefunden:machen dompdf als mein PDF Writer für phpWord

../vendor/dompdf/dompdf

Was ich wollte, zu erreichen, ist meiner DOCX-Datei (Microsoft Word) zu konvertieren .pdf Datei. Die docx-Datei wurde von phpWord generiert, indem die Vorlagendatei geladen und die Werte ersetzt wurden.

Hier ist der Code-Schnipsel:

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

Danach wird eine DOCX-Datei generiert. Ich wollte auch eine PDF-Version davon machen. so dass ich die Suche und fand diesen Code-Schnipsel und hinzugefügt in meinem Code:

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

Aber ich habe diesen Fehler:

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

Wie würde ich dompdf als mein PDF Writer für PHPWord machen? Ich kann keine anderen Optionen finden, also frage ich hier. Ich hoffe ihr könnt mir helfen. Vielen Dank!

+0

Haben Sie einen absoluten Pfad zur dompdf-Bibliothek ausprobiert? – BrianS

Antwort

2

Sie müssen es auf den absoluten Pfad festlegen. Setzen Sie dies in Ihre bootstrap.php-Datei.

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

Das ist Ihr Anruf:

$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

denke ich @Franz Holzingers Antwort außer direkt am Punkt ist, dass die Version von PHP Wort, das ich heute erfordert die Renderer Namen dompdf installiert werden. Die Methode schlägt fehl, wenn alle Großbuchstaben angezeigt werden. Auch die Version, die ich heute installiert habe, verwendet eine Konfigurationsdatei. Wenn die expliziten Aufrufe funktionieren, werden sie überschrieben, wenn Sie sie nach dem Laden der Konfigurationsdatei platzieren, bevor Sie die Konfiguration laden. Ich schlage eine einfachere Antwort vor, um die Datei "phpword.ini.dist" zu finden, die sich im Verzeichnis über "src" in den phpword Installationsverzeichnissen befindet; Bearbeiten Sie die Zeile für das DomPDF-Verzeichnis, um anzuzeigen, wo Sie DomPDF installiert haben, und speichern Sie die Datei dann im selben Verzeichnis, aber unter dem Namen phpword.ini. Jetzt führt der Konfigurationslader die von Frank für Sie dokumentierten Aufrufe durch. Wenn Sie den Pfad zu DomPDF falsch eingeben, erhalten Sie keine Warnung, aber Sie können mit der Methode \ PhpOffice \ PhpWord \ Settings :: getPdfRendererPath (domPdfPath) testen, ob sie korrekt installiert wurde. Wenn der Rückgabewert dieser Methode leer ist, bedeutet dies, dass der in der Konfigurationsdatei angegebene Pfadname nicht existiert. Beachten Sie, dass das Ladeprogramm nicht überprüft, dass der Pfad DomPDF enthält, nur dass der Pfad vorhanden ist.

Es ist erwähnenswert, dass zu diesem Zeitpunkt phpword drei PDF-Rendering-Engines unterstützt. Jeder der drei kann in der oben genannten ini-Datei konfiguriert werden, indem der Pfad zur Installation angegeben und der Name des PDF-Renderers auf einen dieser Werte gesetzt wird (Groß-/Kleinschreibung beachten): DomPDF, TCPDF oder MPDF. DomPDF wird empfohlen und die Standardeinstellung, aber es erscheint im Code, dass wenn Sie eine Investition in oder eine Präferenz für eine der anderen haben, können Sie es mit phpword verwenden.

+1

Vielen Dank für den Hinweis auf "DomPDF" Name - Ich habe mehrere Stunden mit diesem Pfadfehler zu kämpfen, bis dies Ihre Antwort gelesen und die Rechtschreibung DOMPDF -> DomPDF korrigiert und jetzt funktioniert es! – DaneSoul

+0

\ PhpOffice \ PhpWord \ Settings hat diese Konstanten: PDF_RENDERER_DOMPDF, PDF_RENDERER_TCPDF, PDF_RENDERER_MPDF, die mit \ PhpOffice \ PhpWord \ Settings :: setPdfRendererName verwendet werden können. Wenn Sie Composer verwenden, fügen Sie diese Zeile auch im Startskript hinzu: define ('DOMPDF_ENABLE_AUTOLOAD', false); – Marcos