poi-tl生成word文档,java生成word文档

模板中变量,请参考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;
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值