web-dev-qa-db-fra.com

Comment convertir un document Word en PDF en utilisant PHPWord

Je crée un rapport Microsoft Word en utilisant PHPWord. Je commence par un modèle, puis je remplis les champs et les enregistre en tant que rapport Word. 

Je voudrais convertir ce rapport en fichier pdf. J'ai essayé de charger le fichier doc généré via PHPWord. Cependant, lorsque je sauvegarde le fichier pdf, le formatage est entièrement perdu. 

Voici le code que j'utilise: 

       require_once DOC_ROOT . '/vendor/phpoffice/phpword/bootstrap.php';

$path_to_tcpdf = DOC_ROOT . '/includes/plugins/TCPDF/'; // C:\xampp\htdocs\clients\corporate\includes\plugins\TCPDF
\PhpOffice\PhpWord\Settings::setPdfRendererPath($path_to_tcpdf);
\PhpOffice\PhpWord\Settings::setPdfRendererName('TCPDF');

$report_file_doc = DOC_ROOT . '/reports/business_report_U72900GJ2002PTC040573_68628.docx';
$report_file_pdf = DOC_ROOT . '/reports/business_report_U72900GJ2002PTC040573_68628.pdf';



$phpWord = \PhpOffice\PhpWord\IOFactory::load($report_file_doc); 
$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord , 'PDF');

$xmlWriter->save($report_file_pdf);  

Une idée de ce qui pourrait manquer? 

Merci

5
Kiran

Pour PHPWord v0.14

Voici un exemple de rendu TCPDF ( deprecared in v0.13 ):

// Require composer autoloder.
require __DIR__.'/vendor/autoload.php';

use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\Settings;

// Set PDF renderer.
// Make sure you have `tecnickcom/tcpdf` in your composer dependencies.
Settings::setPdfRendererName(Settings::PDF_RENDERER_TCPDF);
// Path to directory with tcpdf.php file.
// Rigth now `TCPDF` writer is depreacted. Consider to use `DomPDF` or `MPDF` instead.
Settings::setPdfRendererPath('vendor/tecnickcom/tcpdf');

$phpWord = IOFactory::load('document.docx', 'Word2007');
$phpWord->save('document.pdf', 'PDF');

Voici un exemple de rendu DomPDF:

// Require composer autoloder.
require __DIR__.'/vendor/autoload.php';

use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\Settings;

// Make sure you have `dompdf/dompdf` in your composer dependencies.
Settings::setPdfRendererName(Settings::PDF_RENDERER_DOMPDF);
// Any writable directory here. It will be ignored.
Settings::setPdfRendererPath('.');

$phpWord = IOFactory::load('document.docx', 'Word2007');
$phpWord->save('document.pdf', 'PDF');
3
Anton Pelykh

Je ne sais pas si j'ai raison, mais vous enregistrez le document en tant que contenu HTML. Après avoir lu le contenu du fichier HTML, vous écrivez le contenu en tant que fichier PDF à l'aide de mPDF, tcPdf ou fpdf.

 $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'HTML'); 

Plus à ce sujet ici

0
Neha