如何使用PHPWord将Word文档转换为PDF

13

我正在使用 PHPWord 创建 Microsoft Word 报告。基本上,我使用模板来填充字段并将其保存为 Word 报告。

我想将此报告转换为 PDF 文件。我尝试通过 PHPWord 加载生成的 doc 文件。但是,当我保存 PDF 文件时,格式全部丢失。

以下是我正在使用的代码:

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

有什么遗漏的想法吗?

谢谢


你是在哪里/如何定义$xmlWriter的? - Mark Baker
如果您同时创建两者,可以使用相同的HTML而不是Word文档... 这可能会减少工作量... - K.B
@kranthi,我正在使用模板文件而不是HTML准备报告。你知道我们是否可以将模板文件保存为PDF吗? - Kiran
为什么不直接生成PDF文件,而非从Word转换呢? - Praneeth Nidarshan
Phpword对PDF的转换效果很差,它使用HTML来生成PDF,因此几乎丢失了所有格式,您可以从头开始生成PDF,或者寻找将Word转换为PDF的替代方案。 - ShiftyThomas
显示剩余2条评论
2个回答

15

对于 PHPWord v0.14 版本:

这里是 TCPDF 渲染器的示例(在 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');

这里是使用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');

1
它确实将 docx 转换为 PDF,但没有保留样式。 - hassanrazadev

2

我不确定是否正确,但是您将文档保存为HTML内容。之后,您可以使用mPDF或tcPdf或fpdf的帮助读取HTML文件内容并将其写入PDF文件。

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

More about it here


1
发现这个解决方法更好。但仍然无法呈现来自Word文件的样式和格式。 - Yogesh Mistry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接