tp5使用PHPWord(下载引入/composer两种方式)
PHPWORD使用文档
一:引入
tp5.0,tp5.1:
1:composer方式(推荐)
a:根目录下执行:composer require phpoffice/phpword
b:引入:
use PhpOffice\PhpWord\PhpWord;
2:下载引入方式
a:下载PHPWord:
地址:https://pan.baidu.com/s/19UctPmT5tdn0SqrEgM56MA
提取码:zxcv
b:放到项目根目录extend文件夹下,目录结构如下:
c:引入
use PhpOffice\PhpWord\PhpWord;
二:导出
$file = '../extend/files/pdf.docx';//路径,可更改
$PHPWord = new PhpWord();
$template = $PHPWord->loadTemplate($file);//加载模板
$template->setValue('title', '标题');//替换值
$file = date('Y-m-d-H-i-s') . '.docx';//文件名
$encoded_filename = urlencode($file); // 将文件名进行urlencode转码
$file = str_replace('+', '%20', $encoded_filename);
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');
$template->saveAs('php://output');
格式:
//替换值(模板内为${title},如模板图)
$template->setValue('title', '标题');
//选择框(模板内为check0和check1<字体是【Wingdings 2】>,替换时R是选中,£是未选,如模板图)
$template->setValue('check0', 1? 'R' : '£');//与模板内check0对应,变量命名可更改,与模板一致即可
$template->setValue('check1', 0? 'R' : '£');//与模板内check1对应,变量命名可更改,与模板一致即可
//复制行
$template->cloneRow('本行最左边的变量名', '要复制的行数');
//复制行-举例(如模板图)
$user = [['no'=>'1', 'name'=>'张三', 'sex'=>'男'], ['no'=>'2', 'name'=>'李四', 'sex'=>'女']];
$rows = count($user);
$template->cloneRow('no', $rows);//复制行,no是要复制行的最左边变量,$rows代表复制几行,复制后会是no#1,name#1,sex#1;no#2,name#2,sex#2这样的
for ($i = 0; $i < $rows; $i++) {
$template->setValue('no#' . ($i + 1), $user[$i]['no']);
$template->setValue('name#' . ($i + 1), $user[$i]['name']);
$template->setValue('sex#' . ($i + 1), $user[$i]['sex']);
}
//复制块,也可用于是否显示
$template->cloneBlock('块标签名','数量');//模板内为${块标签名}和${/块标签名}和html标签一样,成对出现,内容放中间
//复制块-举例(如模板图)
$show_name="显示";
$template->cloneBlock('show',2);//复制两个
$template->setValue('show_name',$show_name);//设置值
$template->cloneBlock('hide',0);//复制0个,代表隐藏,值也不用设了
//插入图片(模板内为${img})
$template->setImageValue('img', ['path' => '路径','width'=>500,'height'=>500]);
模板图
结果图
tp5使用PHPWord(下载引入/composer两种方式)的更多相关文章
- git下载代码的两种方式以及eclipse集成git
1.第一种使用tortoiseGit插件: 链接:https://pan.baidu.com/s/1ANDydwfaaVcUaqZDJWc_BQ 提取码:qgxt a.首先在setting中的Git中 ...
- java 下载文件的两种方式和java文件的上传
一:以网络的方式下载文件 try { // path是指欲下载的文件的路径. File file = new File(path); // 以流的形式下载文件. InputStream fis = n ...
- HttpURLConnection下载图片的两种方式
public class MainActivity extends AppCompatActivity { private ImageView iv; private String imageurl ...
- C++服务器下载文件的两种方式
#include <afxinet.h>#include "wininet.h" #pragma comment( lib, "wininet.lib&quo ...
- spring配置文件注解方式引入的两种方式
一.#{beanID['propertiesName']}方式 <bean id="propertyConfigurer" class="org.springfra ...
- 引入外部CSS的两种方式及区别
1.CSS的两种引入方式 通过@import指令引入 @import指令是CSS语言的一部分,使用时把这个指令添加到HTML的一个<style>标签中: 要与外部的CSS文件关联起来,得使 ...
- springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)
参与该项目的文件上传和下载.一旦struts2下完成,今天springmvc再来一遍.发现springmvc特别好包,基本上不具备的几行代码即可完成,下面的代码贴: FileUpAndDown.jsp ...
- 引入springboot的两种方式以及springboot容器的引入
一.在项目中引入springboot有两种方式: 1.引入spring-boot-starter-parent 要覆盖parent自带的jar的版本号有两种方式: (1)在pom中重新引入这个jar, ...
- 服务容错保护断路器Hystrix之一:入门示例介绍(springcloud引入Hystrix的两种方式)
限流知识<高可用服务设计之二:Rate limiting 限流与降级> 在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的 ...
随机推荐
- mybatis 解决属性名和字段名不一致
1. 数据库中表的设计 2. 实体类 3.mapper映射文件 4. 问题:密码没有获取到 原因:mybatis会根据查询的列名去进行设值 5. 解决列名和属性名不一致的方法 5.1 为列名指定别名, ...
- 防sql注入函数
- 算法学习笔记:Kosaraju算法
Kosaraju算法一看这个名字很奇怪就可以猜到它也是一个根据人名起的算法,它的发明人是S. Rao Kosaraju,这是一个在图论当中非常著名的算法,可以用来拆分有向图当中的强连通分量. 背景知识 ...
- 如何使用iMindMap制作更专业的时间计划
时间计划无论是在日常生活中,还是在工作中,都显得极为重要.小到每周的购物时间规划,大到大型项目的时间管理,时间计划都会如影随形.虽然时间计划很重要,但很多人都会忽视这种重要性,可能只会在台本日历上作一 ...
- YoyoGo微服务框架入门系列-基本概念
前言 Github开源:github.com/yoyofx/yoyogo 还请多多Star 之前简单介绍了YoyoGo微服务框架的基本内容,接下来了解下框架中的基本概念. 从一个简单Web服务Demo ...
- python升级版本
前言 目前大部分使用的3.6或者3.7以及更低版本存在不少问题,随着python的更新很多问题得到修复并且具有更多新的功能. 更新 3.y.x版本升级到3.y.z 下载需要升级的exe安装包点击upg ...
- 听说高手都用记事本写C语言代码?那你知道怎么编译运行吗?
坊间传闻高手都喜欢用记事本写代码,那么问题来了,我们以C语言为例,如何用记事本编译运行呢?其实最简单的方式就是安装GCC编译器,在记事本编写C语言程序,然后再在命令行用GCC编译运行,下面我简单介绍一 ...
- 测试Hessian反序反序列化 客户端少字段和多字段时能否成功
import java.io.*; import com.caucho.hessian.io.HessianInput; import com.caucho.hessian.io.HessianOut ...
- 09_消息通知Toast和Notification
1. Toast 学习创建长短不一的Toast提示,并自定义Toast在屏幕上的位置以及Toast的外观. 1 package com.example.toastdemo; 2 3 import an ...
- Django的路由分发与名称空间
路由分发 django每一个app下面都可以有自己的urls.py路由层,templates文件夹,static文件夹 项目名下urls.py(总路由)不再做路由与视图函数的匹配关系而是做路由的分发 ...