PHP实现动态修改word内容并转换成pdf

安装PhpOffice\PhpWord插件

composer require phpoffice/phpword

服务器安装 word转pdf 工具

sudo apt-get install unoconv
/usr/share/fonts 新建一个目录 win 把字体文件放进去
sudo apt-get -y install fontconfig xfonts-utils
unoconv -f pdf aa.docx

php代码 (shell_exec() 中的命令千万不能含有中文字符)

use PhpOffice\PhpWord\TemplateProcessor;

 public function downloadAgreement()
    {
        $name = "factory_authorization_20200115";

        //指定模板文件
        $templateProcessor = new TemplateProcessor(J7SYS_WEB_DIR."/res/agreement/{$name}.docx");
        //通过setValue 方法给模板赋值
        $templateProcessor->setValue('factory_name', $this->_factory['title']);
        $templateProcessor->setValue('year', date("Y"));
        $templateProcessor->setValue('month', date("m"));
        $templateProcessor->setValue('day', date("d"));
        $dir = iconv("UTF-8", "GBK", J7SYS_WEB_DIR."/res/agreement/tmp/");//保存路径
        if (!file_exists($dir)) {
            mkdir($dir, 0777, true);  // 如果保存目录不存在就创建新目录
        }

        $name .= '_' . $this->_factory['fid'];

        $filename = $dir . $name . '.docx';
        $templateProcessor->saveAs($filename); //另存为新word文档,根据模板和变量生成了新的文档

        //word转pdf
        //sudo apt-get install unoconv
        ///usr/share/fonts 新建一个目录 win 把字体文件放进去
        //sudo apt-get -y install fontconfig xfonts-utils
        //unoconv -f pdf aa.docx
        $cmd = "/usr/bin/unoconv -f pdf ". $filename;
        flog($cmd, 'unoconv_tmp');
        shell_exec($cmd);
        $file_dir = $dir . $name . '.pdf';

        // 下载文档
        //检查文件是否存在
        if (!file_exists($file_dir)) {
            header('HTTP/1.1 404 NOT FOUND');
        } else {
            $file = fopen($file_dir, "rb");//以只读和二进制模式打开文件
            Header("Content-type: application/octet-stream"); //告诉浏览器这是一个文件流格式的文件
            Header("Accept-Ranges: bytes");  //请求范围的度量单位
            Header("Accept-Length: " . filesize($file_dir)); //Content-Length是指定包含于请求或响应中数据的字节长度
            //用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
            Header("Content-Disposition: attachment; filename={$name}.pdf");
            echo fread($file, filesize($file_dir));   //读取文件内容并直接输出到浏览器
            fclose($file);
            exit();
        }
    }
评论