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

本文中的所使用的环境如下 php版本:php7.4 phpword版本:0.18.3 安装: composer require phpoffice/phpword 1、使用模式一: 模板生成word 使用场景: 适合有一套固定的world文档模板,只有几个关键的地方需要改变 使用方式: 下面介绍几行代码就足够完成整

本文中的所使用的环境如下
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/

本文标题为:phpword组件类库的一些基本用法