word转PDF 版本不一样可能过程各种找不到文件路径,需要自行修改

前提 需要引入 两个包

phpoffice/phpword
mpdf/mpdf 

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,

你可能感兴趣的:(android)