phpword组件类库的一些基本用法

本文中的所使用的环境如下

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/



那些看似不起波澜的日复一日,会在某天让你看到坚持的意义。



声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。

小周博客
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

精彩评论

全部回复 0人评论 7,777人参与

loading