绕开jdk office软件 实现 php word转pdf

前提 需要引入 两个包

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,

 

 

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值