前提 需要引入 两个包
phpoffice/phpword
mpdf/mpdf
目前大部分php教程都是利用软件 使 word 转pdf
偶然间了解 有第二种办法
word转html
html转pdf
成功绕开了office 软件包
但是有两个缺点就是
1 经过两步操作 略麻烦
2 html 转pdf 的样式问题
在浏览phpoffice/word 包时偶然发现如下代码
public static function createWriter(PhpWord $phpWord, $name = 'Word2007')
{
if ($name !== 'WriterInterface' && !in_array($name, array('ODText', 'RTF', 'Word2007', 'HTML', 'PDF'), true)) {
throw new Exception("\"{$name}\" is not a valid writer.");
}
$fqName = "PhpOffice\\PhpWord\\Writer\\{$name}";
return new $fqName($phpWord);
}
顿时来了兴趣 难道 可以直接 word 转PDF
当尝试 如下代码时
$obj->createWriter($phpWord, 'PDF');
不出意外报错了 --!
PDF rendering library or library path has not been defined.
当然剩下的就是百度
千可怜万可怜
在仅有的一条条目里找到了解决方法(虽然是英文 勉强看懂了。。。)
引入mdf包
修改后代码如下
public function wordToPdf($filePath, $savePdf = false)
{
if (!file_exists($filePath)) {
throw new \Exception("文件不存在,请检查文件路径");
}
//第二个参数是默认值,可以不填写
$phpWord = IOFactory::load($filePath, "Word2007");
$PdfPath = realpath($_SERVER['DOCUMENT_ROOT']. '/../vendor/mpdf/mpdf');
\PhpOffice\PhpWord\Settings::setPdfRendererPath($PdfPath);
\PhpOffice\PhpWord\Settings::setPdfRendererName('MPDF');
$writer = IOFactory::createWriter($phpWord, "PDF");
if ((bool) $savePdf) {
//返回PDF实体内容
return $writer->getContent();
} else {
if ($this->isDownload) {
//直接显示 PDF
$phpWord->save('php://output', 'PDF');
exit;
} else {
//保存至服务器
$phpWord->save($this->saveFilePath, 'PDF');
//返回文件路径
return $this->saveFilePath;
}
}
}
另附 mpdf 解决 中文乱码问题
'autoScriptToLang' => true,
'autoLangToFont' => true,