PHPWord导出word文档
最近接了个把数据导出到word文档的需求,之前一直都是使用PHPExcel库导出excel的,还是头次接到导出到word文档的需求,我想既然有PHPExcel,那么肯定也会有PHPWord库吧,在网上一搜,还真有!而且都是phpoffice家的。看了下文档,最终决定使用模板的方式来导出数据,感觉也是最简单的一种方式了。
过程如下:
使用composer下载PHPWord到项目中
composer require phpoffice/phpword
可以看到,phpword的下载量还是挺高的
下载完后就可以开始制作我们的需求模板了,如下图所示,模板中使用${变量名}
作为占位符,到时候用代码替换即可,${company_name}、${pic}等都是占位符
制作好模板就可以开始写代码了。
//导出word大致可以分为三步
//1.创建模板对象
$document = new TemplateProcessor('./template.docx');
//2.插入数据
//插入文字
$document->setValue('company_name', 'XXX有限公司');
//插入图片
$document->setImageValue('pic1', './img/gyy.jpeg');
$document->setImageValue('pic2', './img/zyt.jpeg');
//插入文字
$document->setValue('organizationo', '123456');
//3.保存文件
$document->saveAs('./target.docx');
导出效果如下:
可以看到默认导出都word的图片比较小,phpword支持自定义图片的大小,这里需要修改setImageValue
方法的第二个参数,如果想自定义宽高就需要传入一个数组,格式如下
array("path" => xx, "width" => yy, "height" => zz)
path代表要插入图片的路径,width和height分别代表宽高
修改后的代码如下:
//1.创建模板对象
$document = new TemplateProcessor('./template.docx');
//2.插入数据
//插入文字
$document->setValue('company_name', 'XXX有限公司');
//插入图片,宽200像素,高300像素
$picParam = ['path' => './img/gyy.jpeg', 'width' => 200, 'height' => 300];
$document->setImageValue('pic1', $picParam);
$picParam2 = ['path' => './img/zyt.jpeg', 'width' => 200, 'height' => 300];
$document->setImageValue('pic2', $picParam2);
//插入文字
$document->setValue('organizationo', '123456');
//3.保存文件
$document->saveAs('./target.docx');
最终导出效果如下:
图片变成了我们期望的大小了。
如果想把生成的文件下载到浏览器,可以在生成文件后加上如下代码即可
//4.从浏览器下载
ob_clean();
ob_start();
$fp = fopen('./target.docx',"r");
$file_size = filesize('./target.docx');
Header("Content-type:application/octet-stream");
Header("Accept-Ranges:bytes");
Header("Accept-Length:".$file_size);
Header("Content-Disposition:attchment; filename=".'测试文件.docx');
$buffer = 1024;
$file_count = 0;
while (!feof($fp) && $file_count < $file_size){
$file_con = fread($fp,$buffer);
$file_count += $buffer;
echo $file_con;
}
fclose($fp);
ob_end_flush();
PHPWord导出word文档的更多相关文章
- .NET通过调用Office组件导出Word文档
.NET通过调用Office组件导出Word文档 最近做项目需要实现一个客户端下载word表格的功能,该功能是用户点击"下载表格",服务端将该用户的数据查询出来并生成数据到Word ...
- C# 导出word文档及批量导出word文档(1)
这里用到了两个dll,一个是aspose.word.dll,另外一个是ICSharpCode.SharpZipLib.dll,ICSharpCode.SharpZipLib.dll是用于批量 ...
- C# 导出word文档及批量导出word文档(4)
接下来是批量导出word文档和批量打印word文件,批量导出word文档和批量打印word文件的思路差不多,只是批量打印不用打包压缩文件,而是把所有文件合成一个word,然后通过js来调用 ...
- C#导出Word文档开源组件DocX
1.帮助文档,这东西找了很久,而且它版本很旧,还是英文,W8.1系统上打不开 http://download.csdn.net/detail/zuofangyouyuan/7673573 2.开源网址 ...
- freemarker导出word文档——WordXML格式解析
前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...
- 自动生成并导出word文档
今天很荣幸又破解一现实难题:自动生成并导出word文档 先看页面效果: word效果: 代码: 先搭建struts2项目 创建action,并在struts.xml完成注册 <?xml vers ...
- Java 用Freemarker完美导出word文档(带图片)
Java 用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...
- freemarker导出word文档
使用freemarker导出word文档的过程 **************************************************************************** ...
- 【Java】导出word文档之freemarker导出
Java导出word文档有很多种方式,本例介绍freemarker导出,根据现有的word模板进行导出 一.简单导出(不含循环导出) 1.新建一个word文件.如下图: 2.使用word将文件另存为x ...
随机推荐
- 第二卷 Spring羊群理论
写在前面: 话说这天小迦罗在和哑圣观察者聊天时,哑圣谈到自己比较喜欢吃羊,这时候小迦罗说自己的爸爸也喜欢吃,就给哑圣老师讲了他小时候在春天里放羊的故事还有参观Spring的事情.(后面以此抛砖引玉可以 ...
- jQuery-委托事件和on方法注册事件
delegate注册委托事件 delegate--代理.委托 事件代理----事件最终不是由$("#first")执行,它只是代理元素 第一个参数:最终发生事件的元素 第二个参数: ...
- Bootstrap-datepicker3官方文档中文翻译---Options/选项(原文链接 http://bootstrap-datepicker.readthedocs.io/en/latest/index.html)
Options/选项 带“Date”的所有选项都可以处理 Date 对象; 字符串格式化根据 给定的 format 而定; 相对于今天的时间变量, 如 “-1d”, “+6m +1y”等等, 其中有效 ...
- django实现SSO
前言 公司的各种运维平台越来越多,用户再每个平台都注册账号,密码,密码太多记不住不说,然后有的平台过一段时间还得修改密码,烦!还不如弄个统一登录平台!! 需求分析 造这辆大车,首先就得造两个轮子 首先 ...
- Java 并查集Union Find
对于一组数据,主要支持两种动作: union isConnected public interface UF { int getSize(); boolean isConnected(int p,in ...
- C#控制台或应用程序中两个多个Main()方法的设置
大多数初级程序员或学生都认为在C#控制台或应用程序中只能有一个Main()方法.但是事实上是可以有多个Main()方法的. 在C#控制台或应用程序中,在多个类中,且每个类里最多只能存在一个Main() ...
- 安装SSL证书 and 根域名跳转www域名
1.安装自签证书 自签证书也就是不被公网认可的证书,可在局域网内进行签名认证,其12306也是自签证书,通过证书+nginx代理web服务器 可以实现https连接 一.使用OpenSSL创建证书 ...
- Scrapyd 改进第一步: Web Interface 添加 charset=UTF-8, 避免查看 log 出现中文乱码
0.问题现象和原因 如下图所示,由于 Scrapyd 的 Web Interface 的 log 链接直接指向 log 文件,Response Headers 的 Content-Type 又没有声明 ...
- 如何在.Net Core调用NodeJs
概述 Microsoft.AspNetCore.NodeServices库 实例 新建aspnet core站点 添加nuget包 建立node环境,此处示例用于扫描wifi环境 建立nodejs的程 ...
- 安装jar包到maven仓库
1)将所要安装的jar包放在自定义目录下. 2)(maven环境变量配置无误的情况下)windows环境下,打开命令提示符,输入如下命令: mvn install:install-file -Dfil ...