本文中的所使用的环境如下
php版本:php7.4
phpword版本:0.18.3
安装:
composer require phpoffice/phpword
模板生成word
使用场景:适合有一套固定的world文档模板,只有几个关键的地方需要改变
使用方式:下面介绍几行代码就足够完成整个word的替换了,需要更多功能参考文档
示例代码如下:
//模板的路径,word的版本最好是docx,要不然可能会读取不了,根据自己的模板位置调整
$path = 'public/letters/templates/word/letter1.docx';
//生成word路径,根据自己的目录调整
$filePath= 'public/letters/word/letter1.docx';
//声明一个模板对象、读取模板
$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor($path);
//替换模板中的变量,对应word里的 ${test}
$test ="这是替换的内容";
$templateProcessor->setValue('test',$test);//传值
//生成新的word
$templateProcessor->saveAs($filePath);
代码编写生成word文档:
使用场景:需要更加灵活的生成world文档
语法介绍:介绍一些常用的、需要的功能,多余的也不介绍了,来些直观的才是重要的,需要更多功能参考文档
示例代码如下:
//声明一个phpword对象
$phpWord = new \PhpOffice\PhpWord\PhpWord();
//声明一个页面,用来存放页面的内容,相当于一个容器
$section = $phpWord->addSection();
//添加一个段落文字
$section->addText('This is text');
//声明普通文字,不同段落文字,可以在后面追加文字
$textrun = $section->addTextRun();
//添加文字
$textrun->addText('This');
//再上面内容的后面追加文字
$textrun->addText('is');
//文字换行,参数可以控制换行的行数
$textrun->addTextBreak(1);
//段落文字换行,参数可以控制换行的行数
$section->addTextBreak(1);
//文字样式,可以指定许多样式,具体可以参考文档字体样式
$textrun->addText('测试',array('size'=>18,'bold'=>true,'name'=>'宋体'));
//可以定义一个数组传进去,本质都是一个数组
$fontStyle['size']=12;
$fontStyle['bold']=true;
$textrun->addText('测试',$fontStyle);
//向word文档中添加一张图片
$section->addImage('./test.png');
//生成word文档
$filePath= './test.docx';
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
$objWriter->save($filePath); //保存生成的word文档路径
PS备注:
Phpword虽然可以用代码生成word,但对于一些文字图片的定位操控起来非常麻烦,甚至无法控制
尽量使用模板,直接改动模板更加方便,只替换一些关键字就好
使用模板的时候要注意word格式要是docx,使用doc可能会报错
$phpWord = new \PhpOffice\PhpWord\PhpWord();
$section = $phpWord->createSection();
//$section = $phpWord->addSection();
//使用createSection()方法或者使用addSection()方法 作用都是一样的
$section->addText('Hello World!');
$file = 'HelloWorld.docx'; //文件名
header("Content-Description: File Transfer");
header('Content-Disposition: attachment; filename="' . $file . '"');
header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
$xmlWriter->save("php://output"); //这里不要改
官方文档地址:PHPWord官方文档
民间翻译PHPWord文档中文版:PHPWord文档中文版
PHPWord文档中文版github地址:https://github.com/yangweijie/PHPWord/