本文中的所使用的环境如下
php版本:php7.4
phpword版本:0.18.3
安装:
composer require phpoffice/phpword
1、使用模式一:
模板生成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);
2、使用模式二:
代码编写生成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可能会报错
3、Phpword生成文档后,直接下载
$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"); //这里不要改
4、尾声
官方文档地址:PHPWord官方文档
民间翻译PHPWord文档中文版:PHPWord文档中文版
PHPWord文档中文版github地址:https://github.com/yangweijie/PHPWord/
那些看似不起波澜的日复一日,会在某天让你看到坚持的意义。
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。
精彩评论