PhpWord的一些简单用法_无痕之意的博客-程序员秘密_phpword

技术标签: PhpWord  知识积累  

  因为最近项目需要一个生成Word文档的功能,开始折腾起来,找到PhoWord这个类库,PhpWord是一个可以用PHP生成word的类库,用composer安装就可以用了。
  搞了半天,终于生成了Word文档,现在来记录一下一些用法供大家参考。


PhpWord文档
  想实现更多功能的同学可以仔细参考文档
  https://phpword.readthedocs.io/en/latest/intro.html


使用环境
  目前是在ThinkPHP5.0.21中使用的PhpWord,其他使用环境引入方式可能会有一点不同。
  使用composer安装,直接使用下面的代码引入相关类库


安装
  1、打开命令行进入项目根目录执行下面命令
  2、composer require phpoffice/phpword


使用模式
  1、直接使用代码编写word文档
  2、读取原有word模板,替换相关变量


模板生成Word
  使用场景:适合有一套固定的模板,只有几个关键的地方需要改变。
  使用方式:下面介绍几行代码就足够完成整个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
  使用场景:需要更加灵活的生成Word
  语法介绍:介绍一些常用的、需要的功能,多余的也不介绍了,来些直观的才是重要的,需要更多功能参考文档。

	//声明一个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文档
	$filePath= 'public/letters/word/letter1.docx';
	$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
	$objWriter->save($filePath);

PS:
  1、Phpword虽然可以用代码生成word,但对于一些文字图片的定位操控起来非常麻烦,甚至无法控制。

  2、尽量使用模板,直接改动模板更加方便,只替换一些关键字就好。

  3、使用模板的时候要注意word格式要是docx,使用doc可能会报错。


结语
  以上是自己这几天使用Phpword小小心得,希望大家少走弯路吧,也给自己以后再使用时可以温习下,如有不正确之处,还望指出。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kelinfeng16/article/details/84073804

智能推荐

【20211028】【Python】统计Series/List类型的数据中某元素出现的个数_dataframe统计元素个数_Satisfying的博客-程序员秘密

1. value_count() 方法pandas 中 value_count() 是一种查看表格某列中有多少个不同值的快捷方法,并计算每个不同值在该列中有多少重复值。注意:value_counts() 是 Series 类型的数据拥有的方法,DataFrame 类型的数据不可以直接用,需要指定对哪一行或哪一列使用(DataFrame 取某列、行之后,就是 Series 类型了)。(参考:pandas中.value_counts()的用法)...

javaweb项目搭建(spring+springmvc+hibernate)_web小项目spring+he_zwh-android&&java的博客-程序员秘密

本篇主要介绍的是JavaEE中的框架SpringMVC,在以前上JavaEE课程时,课程项目里使用的是比较“古老”的SSH(Struts2+Spring+Hibernate)框架,最近受某小朋友的影响着手了解SpringMVC,一种更轻量级,更方便使用的框架。老规矩,附Wikipedia链接——Spring,其中Model-view-controller framework部分的介绍就是我们常

IMWeb训练营作业1-todoList_diamond007_abc的博客-程序员秘密

111项目源码预览地址效果图核心代码后端使用 leancloud 存储数据使用 leancloud 提供的 api 注册用户, 实现登入登出功能 signUp: function() { let user = new AV.User(); user.setUsername(this.formData.username); user.s

JupyterLab使用教程_JJustRight的博客-程序员秘密

Jupyter源于Ipython Notebook项目,是使用Python(也有R、Julia、Node等其他语言的内核)进行代码演示、数据分析、机器学习、可视化、教学的非常好的工具,对Python的愈加流行和在AI领域的领导地位有很大的推动作用。JupyterLab是最新的基于web的交互式开发环境,适用于notebook、code和data。其灵活的界面允许用户配置和设计数据科学、科学计算、计算新闻和机器学习领域的工作流。模块化设计可以轻松的实现更多扩展

二进制文件和文本文件的区别_wandandi的博客-程序员秘密

二进制文件和文本文件的区别从文件编码的方式区别,文件可分为ASCII码文件和二进制码文件两种。ASCII码文件就是文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用来存放对应的ASCII码。如5432就是5432,占4个字节。由于是按照字符显示因此人可以看懂。二进制文件就是按照二进制的编码方式来存放文件的。例如数字5432就是 0101 0100 0011 0010,只占2个字节。...

IDEA 中的 Tomcat 配置热部署(改完代码不用重启 Tomcat )_kmswilliam的博客-程序员秘密

IDEA 中 Tomcat 热部署 配置当修改完代码以后切换一下打开的文件 Tomcat 就会自动编译并加载修改过的代码

随便推点

Jenkins 和 GitHub 的持续集成及一键部署_Kevin_奕辰的博客-程序员秘密

Java后台环境部署注意:本文搭建部署都在linux操作系统中部署,请注意安装包的格式一、环境准备配置linux网卡环境(非必须)安装JDK安装git安装maven安装Jenkins配置linux网卡初始化ifconfig 查看ipvi /etc/sysconfig/network-scripts/ifcfg-eth0 编辑网卡配置i / a 进入编...

matlab中时域逐步积分方法,newmark积分法_skpaddy的博客-程序员秘密

newmark法程序_数学_自然科学_专业资料。用 matlab 编程 Newmark - β法 一、 Newmark - β 法原理 Newmark-?法是一种逐步积分的方法,避免了任何叠加的应用,能很好的适应非 线性的反应分析。 Newm ......? 7{u??}t??t Newmark-?方法是一种无条件稳定的隐式积分格式,时间步长?t 的大小不影响 解的稳定性,?t 的选择主要根据解的...

IOS不兼容超出部分省略号 且页面显示不起作用 行数限定无作用_十 万 八 千 梦的博客-程序员秘密

IOS不兼容超出部分省略号 且页面显示不起作用 行数限定无作用换成下面的写法 overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;...

用 Git 和 Github 提高效率的 10 个技巧!_公众号-老炮说Java的博客-程序员秘密

点击蓝色“java版web项目”关注我哟加个“星标”,优质文章,第一时间送达上一篇:这300G的Java资料是我师傅当年给我的,免费分享给大家下一篇:这200G的Java实战资料是我师傅...

如何获取控件的坐标位置_Android海纳百川的博客-程序员秘密

如何获取控件的坐标位置,getLocationInWindow和getLocationOnScreen有何区别

推荐文章

热门文章

相关标签