Poi-tl

poi-tl 官网

http://deepoove.com/poi-tl/

maven

1.最新版

<dependency>
  <groupId>com.deepoove</groupId>
  <artifactId>poi-tl</artifactId>
  <version>1.10.0-beta</version>
</dependency>

2.旧版

<dependency>
 	<groupId>com.deepoove</groupId>
	<artifactId>poi-tl</artifactId>
	<version>1.9.1</version>
</dependency>

3.更多版本可以去管网上去查看,本篇文章用的是旧版。

模板制作

1.目前只适用于docx的文件,这一点要注意。
2.想看更多模板的可以去码云上下载源代码。
3.本篇文章的模板
表格输出多条数据模板
本模板是进行批量循环行进行导出的,批量输出表格的内容用[] ,单独数据用{{}} 。

实体类的创建

1.创建同模板数据一样的实体数据

package cn.seisys.its.ls.bo;

import java.util.List;
//设置对象集合和单独数据的类
public class PaymentHackData {
	/**
	特别注意是实体对象要和你模板的里面的数据名字一直
	比如模板写{{test1}} 那么你对应的java属性也要写test1
	[test2] 对应的也要写成 test2
	*/
	//模板的单独项 单独项 模板用{{}}
    private String tbr;
    private String tbrq;
    //表格里面的对象内容集合 多数据项 模板用 []
    private List<Vehicle> bos;
    private List<LsBaWord> bas;
    private String baTime;
    private String reason;
    private String agent;
    private String writeTime;
    private List<LsLicensePhone> phones;

    public List<LsLicensePhone> getPhones() {
        return phones;
    }

    public void setPhones(List<LsLicensePhone> phones) {
        this.phones = phones;
    }

    public String getAgent() {
        return agent;
    }

    public void setAgent(String agent) {
        this.agent = agent;
    }

    public String getWriteTime() {
        return writeTime;
    }

    public void setWriteTime(String writeTime) {
        this.writeTime = writeTime;
    }

    public String getReason() {
        return reason;
    }

    public void setReason(String reason) {
        this.reason = reason;
    }

    public String getBaTime() {
        return baTime;
    }

    public void setBaTime(String baTime) {
        this.baTime = baTime;
    }

    public List<LsBaWord> getBas() {
        return bas;
    }

    public void setBas(List<LsBaWord> bas) {
        this.bas = bas;
    }

    public String getTbr() {
        return tbr;
    }

    public void setTbr(String tbr) {
        this.tbr = tbr;
    }

    public String getTbrq() {
        return tbrq;
    }

    public void setTbrq(String tbrq) {
        this.tbrq = tbrq;
    }

    public List<Vehicle> getBos() {
        return bos;
    }

    public void setBos(List<Vehicle> bos) {
        this.bos = bos;
    }
}
package cn.seisys.its.ls.bo;
//表格内要输出多行的类
public class LsBaWord {
	//模板的值和属性要相同
    private String xh;
    private String tfdd;
    private String cxdLen;
    private String rxdLen;
    private String cxdNum;
    private String rxdNum;
    private String dlqk;
    private String tfTime;
    private String tcfs;
    private String ryNum;

    public String getXh() {
        return xh;
    }

    public void setXh(String xh) {
        this.xh = xh;
    }

    public String getTfdd() {
        return tfdd;
    }

    public void setTfdd(String tfdd) {
        this.tfdd = tfdd;
    }

    public String getCxdLen() {
        return cxdLen;
    }

    public void setCxdLen(String cxdLen) {
        this.cxdLen = cxdLen;
    }

    public String getRxdLen() {
        return rxdLen;
    }

    public void setRxdLen(String rxdLen) {
        this.rxdLen = rxdLen;
    }

    public String getCxdNum() {
        return cxdNum;
    }

    public void setCxdNum(String cxdNum) {
        this.cxdNum = cxdNum;
    }

    public String getRxdNum() {
        return rxdNum;
    }

    public void setRxdNum(String rxdNum) {
        this.rxdNum = rxdNum;
    }

    public String getDlqk() {
        return dlqk;
    }

    public void setDlqk(String dlqk) {
        this.dlqk = dlqk;
    }

    public String getTfTime() {
        return tfTime;
    }

    public void setTfTime(String tfTime) {
        this.tfTime = tfTime;
    }

    public String getTcfs() {
        return tcfs;
    }

    public void setTcfs(String tcfs) {
        this.tcfs = tcfs;
    }

    public String getRyNum() {
        return ryNum;
    }

    public void setRyNum(String ryNum) {
        this.ryNum = ryNum;
    }
}

逻辑代码的编写

 @PostMapping("/wordExport")
    public void wordExport(HttpServletResponse response )throws Exception{
		//获取你的模板地址
        Resource resource = resourceLoader.getResource("classpath:/word/xxx.docx");
        //创建对象
        PaymentHackData data = new PaymentHackData();
        //创建输出多行的集合
        List<LsBaWord> bas = new ArrayList<>();
        //查出来的集合
       	List<xxx> xx1= xxxx.xxxxServiec();
       	xxx1.forEach(a->{
       	//创建对象
       	LsBaWord ba = new LsBaWord();
       	//给对象赋值
       	ba.setxxx(a.xxxx);
       	//将对象添加到集合
       	bas.add(ba);
       	);
       	data.setxxx(“这里面填写你要插入的值”);
       	//你要多个输出行的集合数据
       	data.setxxx(bas);
       	//赋值单独项
       	data.setxxx("小二上酒");
        InputStream is =  resource.getInputStream();
        HackLoopTableRenderPolicy hackLoopTableRenderPolicy = new HackLoopTableRenderPolicy();
      //注意这个地方写的是你模板上表格内的文字和你写的List集合的名字{{}}
        Configure config = Configure.builder().bind("bas", hackLoopTableRenderPolicy).build();
        XWPFTemplate template = XWPFTemplate.compile(is, config).render(data);
        // 设置强制下载不打开
        response.setContentType("application/force-download");
        // 设置文件名
        response.addHeader("Content-Disposition", "attachment;fileName=" + "adsda"+".docx");
        OutputStream out = response.getOutputStream();
        template.write(out);
        out.flush();
        out.close();
        is.close();
        template.close();
    }

注意事项

1.注意模板的制作,导出不成功,很大一部分是模板制作不规范。
2.注意表格内数据的书写和实体类对应。
3.单独项用 {{}} 表示,循环行数据用 [ ] 表示。
4.同样适用于普通的word表格导出,只需要模板使用{{}}即可。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
poi-tl是一种基于Apache POI和FreeMarker模板引擎的Java模板引擎,它可以帮助我们方便地生成各种格式的文档,包括Word、Excel和PowerPoint等。如果您想要替换Word文档中的图片,可以通过以下步骤实现: 1. 在Word文档中找到需要替换的图片,并记下它的编号或名称; 2. 在POI-TL模板中添加一个标签,用于指定图片的位置,例如:${picture}; 3. 在Java代码中使用POI-TL提供的API,通过标签名称找到对应的位置,并将新的图片插入到该位置。 以下是具体的Java代码实现示例: ```java // 创建POI-TL配置对象 Configuration config = new Configuration(); // 设置POI-TL使用的模板文件所在目录 config.setTemplateDir("templateDir"); // 设置POI-TL使用的模板文件名 config.setTemplateName("templateName.docx"); // 创建数据模型对象 Map<String, Object> data = new HashMap<>(); // 将需要替换的图片名称或编号放入数据模型中 data.put("picture", "newPicture.jpg"); // 创建POI-TL对象 DocxRenderData docx = new DocxRenderData(new File("templateName.docx"), data); // 将POI-TL对象写入新的Word文档中 XWPFTemplate template = XWPFTemplate.compile("output.docx", config).render(docx); template.write(new FileOutputStream("output.docx")); template.close(); ``` 在上面的代码中,我们首先创建了一个POI-TL配置对象,并设置了模板文件所在目录和模板文件名。然后创建了一个数据模型对象,并将需要替换的图片名称或编号放入该对象中。接着,我们创建了一个POI-TL对象,并将其写入新的Word文档中。 在模板文件中,我们使用了`${picture}`标签来指定图片的位置。在Java代码中,我们使用了POI-TL提供的API来找到该标签,并将新的图片插入到该位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值