composer 安装
composer require phpoffice/phpword
引入phpword
use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\TemplateProcessor;
//初始化PHPWord对象
$PHPWord = new PhpWord();
//载入模板文件 ROOT_PATH项目根目录
$templateProcessor = $PHPWord->loadTemplate(ROOT_PATH . '/public/uploads/word/personal.docx');
//通过setValue 方法给模板赋值(中文)
$templateProcessor->setValue('name', iconv('utf-8', 'GB2312//IGNORE', $data['name']));
//在word文档里面 ${name} 会自动替换
//加载图片
$templateProcessor->setImageValue('img',['src' => $data['img']]);
//保存并且下载word文档
//保存文件名
$downFileName = time() . ".docx";
//文件全路径+文件名+后缀
$templateProcessor->saveAs(ROOT_PATH . "/public/uploads/word/" . $downFileName);
//文件全路径
$_file = ROOT_PATH . "/public/uploads/word/" . $downFileName;
//以只读和二进制模式打开文件
$file = fopen($_file, "rb");
//告诉浏览器这是一个文件流格式的文件
Header("Content-type: application/octet-stream");
//请求范围的度量单位
Header("Accept-Ranges: bytes");
//Content-Length是指定包含于请求或响应中数据的字节长度
Header("Accept-Length: " . filesize($_file));
//用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
Header("Content-Disposition: attachment; filename='{$name}.doc'");
//读取文件内容并直接输出到浏览器
echo fread($file, filesize($_file));
fclose($file);
exit ();
//告诉浏览器这是一个文件流格式的文件
Header("Content-type: application/octet-stream");
//请求范围的度量单位
Header("Accept-Ranges: bytes");
//Content-Length是指定包含于请求或响应中数据的字节长度
Header("Accept-Length: " . filesize($_file));
//用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
Header("Content-Disposition: attachment; filename='{$name}.doc'");
//读取文件内容并直接输出到浏览器
echo fread($file, filesize($_file));
fclose($file);
exit ();
中文乱码解决
打开TemplateProcessor.php文件
246行注释$subject = utf8_encode($subject);
新增$subject = iconv('gbk', 'utf-8', $subject);
即可
if (!Text::isUTF8($subject)) {
// $subject = utf8_encode($subject);
$subject = iconv('gbk', 'utf-8', $subject);
}
Word模板
保存下载的word文档效果
本文为Pasa吴原创文章,转载无需和我联系,但请注明来自Pasa吴博客https://www.pasawu.top
最新评论