模板中变量,请参考api中5.标签
实例请参考10.实例
每个实例最后有源码地址:https://github.com/Sayi/poi-tl/tree/v1.9.0
本人配置:
jdk:1.8
依赖包:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.9.1</version>
</dependency>
api参考网址:http://deepoove.com/poi-tl
模板文件:https://download.csdn.net/download/wyazyf/15137599
测试代码
package com.wy.springboot;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.Pictures;
@RestController
public class TestController {
@RequestMapping("word")
public void testOKRExample(HttpServletRequest request,HttpServletResponse response) throws Exception {
OKRData data = new OKRData();
User user = new User();
user.setName("测试");
user.setDepart("研发");
data.setUser(user);
List<OKRItem> objectives = new ArrayList<OKRItem>();
OKRItem item = new OKRItem();
item.setIndex(1);
item.setObject(new Objective("打造一个空前繁荣、强大的百度移动生态", "4%"));
item.setKr1(new KeyResult("恪守安全可控、引人向上、忠诚服务、降低门槛的产品价值观,持续优化用户体验,提升百度系产品的总时长份额", "5%"));
item.setKr2(new KeyResult("恪守良币驱逐劣币的商业价值观,实现在爱惜品牌口碑、优化用户体验基础上的收入增长", "1%"));
item.setKr3(new KeyResult("产品要有创新,不能总是me too,me later", "1%"));
item.setPrd(Pictures.ofLocal("C:\\Users\\neusoft\\Desktop\\1.jpg").size(120, 120).create());
item.setUserName("张飞");
objectives.add(item);
item = new OKRItem();
item.setIndex(2);
item.setObject(new Objective("主流AI赛道模式跑通,实现可持续增长", "10%"));
item.setKr1(new KeyResult("小度小度进入千家万户", "15%"));
item.setKr2(new KeyResult("智能驾驶、智能交通找到规模化发展路径", "0%"));
item.setKr3(new KeyResult("云及AI2B业务至少在个万亿级行业成为第一", "1%"));
item.setPrd(Pictures.ofLocal("C:\\Users\\neusoft\\Desktop\\0.jpg").size(120, 120).create());
item.setUserName("关羽");
objectives.add(item);
data.setObjectives(objectives);
data.setDate("2020-01-31");
XWPFTemplate template = XWPFTemplate.compile("src/main/resources/static/template/OKR.docx").render(data);
// 写入响应流
creatOutPusStream(response, template);
}
/**
* 写入响应流
* @param response
* @param template
*/
public void creatOutPusStream(HttpServletResponse response,XWPFTemplate template) {
//=================生成文件保存在临时目录=================
String temDir=System.getProperty("java.io.tmpdir")+File.separator;//生成临时文件存放地址
//生成文件名
Long time = new Date().getTime();
// 生成的word格式
String formatSuffix = ".docx";
// 拼接后的文件名
String fileName = time + formatSuffix;//文件名 带后缀
//文件路径
String filePath = temDir+fileName;
FileOutputStream fos = null;
OutputStream out =null;
try {
fos = new FileOutputStream(filePath);
template.write(fos);
//=================生成word到设置浏览默认下载地址=================
response.setCharacterEncoding("UTF-8");
//设置文件格式
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
// 设置文件名
response.addHeader("Content-Disposition", "attachment;filename="+new String(("清单列表").getBytes("GBK"),"ISO8859-1") + ".docx" );
out = response.getOutputStream();
template.write(out);
} catch (Exception e) {
e.printStackTrace();
}finally {
if(out!=null) {
try {
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(template!=null) {
try {
template.close();
} catch (IOException e) {
}
}
File file = new File(filePath);
if(file.exists()) {
file.delete();
}
}
}
}
代码中用到的实体类
package com.wy.springboot;
import java.util.List;
import com.deepoove.poi.data.PictureRenderData;
public class OKRData {
private User user;
private List<OKRItem> objectives;
private List<OKRItem> manageObjectives;
private String date;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<OKRItem> getObjectives() {
return objectives;
}
public void setObjectives(List<OKRItem> objectives) {
this.objectives = objectives;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public List<OKRItem> getManageObjectives() {
return manageObjectives;
}
public void setManageObjectives(List<OKRItem> manageObjectives) {
this.manageObjectives = manageObjectives;
}
}
class User {
private String name;
private String depart;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDepart() {
return depart;
}
public void setDepart(String depart) {
this.depart = depart;
}
}
class OKRItem {
int index;
Objective object;
KeyResult kr1;
KeyResult kr2;
KeyResult kr3;
String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
PictureRenderData prd;
public Objective getObject() {
return object;
}
public void setObject(Objective object) {
this.object = object;
}
public KeyResult getKr1() {
return kr1;
}
public void setKr1(KeyResult kr1) {
this.kr1 = kr1;
}
public KeyResult getKr2() {
return kr2;
}
public void setKr2(KeyResult kr2) {
this.kr2 = kr2;
}
public KeyResult getKr3() {
return kr3;
}
public void setKr3(KeyResult kr3) {
this.kr3 = kr3;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public PictureRenderData getPrd() {
return prd;
}
public void setPrd(PictureRenderData prd) {
this.prd = prd;
}
}
class Objective {
private String desc;
private String progress;
public Objective(String desc, String progress) {
this.desc = desc;
this.progress = progress;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getProgress() {
return progress;
}
public void setProgress(String progress) {
this.progress = progress;
}
}
class KeyResult {
private String desc;
private String progress;
public KeyResult(String desc, String progress) {
this.desc = desc;
this.progress = progress;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getProgress() {
return progress;
}
public void setProgress(String progress) {
this.progress = progress;
}
}