java使用freemarker实现word下载

之前使用poi来生成word,最近发现这个freemarker也不错啊,官网:http://freemarker.foofun.cn/index.html

poi实现方式

简单示例

1,引入依赖

 		 <!-- 引入 freemarker 模板依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <!-- 引入转换工具 -->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.4</version>
        </dependency>

2,引入依赖包

在这里插入图片描述

3,创建所需要的模板

3.1,新建一个word文档

模板内容很简单,就只用于展示一下数据和图片

注意:当前模板其实你可以认为是我们已经想要的最终效果,而有些内容我们需要设置成动态的,所以等会儿我们需要将要动态发生的数据使用${属性名}进行替换,我这里是为了等会替换方便,知道m1,m2…….需要用那些属性替换,实际应用的时候根据个人方便进行设计

在这里插入图片描述

3.2,将word模板另存为xml格式

在这里插入图片描述
在这里插入图片描述

4,代码实现

WordConf.java

package com.myqxin.common.utils;

import com.aspose.cells.License;
import freemarker.template.Configuration;
import org.springframework.context.annotation.Bean;

import java.io.InputStream;

@org.springframework.context.annotation.Configuration
public class WordConf {
    
    

    private static final String baseDir = "/wordTemplate";

    /**
     * 将freemarker的Configuration对象作为一个单例对象,可以避免重复创建的性能开销
     * 这里我是将Configuration对象作为bean交给spring容器来管理,如果不是spring项目的话可以自己写一个单例模式
     * 从Configuration类上的注释可以找到说明:Configuration是有状态的,线程不安全的,但是它的各种get方法是线程安全的
     * 所以一旦这个单例对象被配置好以后就不该再调用它的set方法
     *
     * @return
     */
    @Bean
    public Configuration wordConfiguration() {
    
    
        Configuration result = new Configuration();
        result.setDefaultEncoding("utf-8");
        //设置模板加载器
        result.setClassForTemplateLoading(this.getClass(), baseDir);
        return result;
    }

    @Bean
    public void getLicense() {
    
    
        try {
    
    
            InputStream is = this.getClass().getResourceAsStream("/license/licenseExcl.xml"); //  license.xml应放在..\WebRoot\WEB-INF\classes路径下
            License aposeLic = new License();
            aposeLic.setLicense(is);
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }


}

ToAspose.java

package com.myqxin.common.utils;

import com.aspose.cells.Workbook;
import com.aspose.words.Document;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.io.*;
import java.util.HashMap;
import java.util.Map;

@Service
public class ToAspose {
    
    
    @Resource(name = "wordConfiguration")
    private Configuration wordConfiguration;

    /**
     * 将生成word流
     *
     * @param templateName 文件
     * @return
     * @throws IOException
     */
    public Document xmlToDocument(String templateName, Object dataModel) {
    
    
        ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();//创建一个ByteArray输出流
        OutputStream output = new BufferedOutputStream(arrayOutputStream);//用buffered包装一下
        Writer out = null;
        try {
    
    
            out = new BufferedWriter(new OutputStreamWriter(output, "utf-8"), 10240);
            Template template = wordConfiguration.getTemplate(templateName, "utf-8");
            template.process(objectToMap(dataModel), out);//response的Writer不需要我们手动关,tomcat会帮我们关的
            out.flush();//清空缓冲区
            InputStream inputStream = new ByteArrayInputStream(arrayOutputStream.toByteArray());//创建ByteArrayResource用ByteArray输出流的字节数组
            Document wpd = new Document(inputStream);
            return wpd;
        } catch (UnsupportedEncodingException e) {
    
    
            e.printStackTrace();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } catch (TemplateException e) {
    
    
            e.printStackTrace();
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 将生成Excl流
     *
     * @param templateName 文件
     * @return
     * @throws IOException
     */
    public Workbook xmlToWorkbook(String templateName, Object dataModel) {
    
    
        ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();//创建一个ByteArray输出流
        OutputStream output = new BufferedOutputStream(arrayOutputStream);//用buffered包装一下
        Writer out = null;
        try {
    
    
            out = new BufferedWriter(new OutputStreamWriter(output, "utf-8"), 10240);
            Template template = wordConfiguration.getTemplate(templateName, "utf-8");
            template.process(objectToMap(dataModel), out);//response的Writer不需要我们手动关,tomcat会帮我们关的
            out.flush();//清空缓冲区
            InputStream inputStream = new ByteArrayInputStream(arrayOutputStream.toByteArray());//创建ByteArrayResource用ByteArray输出流的字节数组
            Workbook wpd = new Workbook(inputStream);
            return wpd;
        } catch (UnsupportedEncodingException e) {
    
    
            e.printStackTrace();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } catch (TemplateException e) {
    
    
            e.printStackTrace();
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
        return null;
    }

    public static Map<?, ?> objectToMap(Object obj) {
    
    
        if (obj == null) {
    
    
            return new HashMap<>();
        }
        return new org.apache.commons.beanutils.BeanMap(obj);
    }


}

SrStatistics.java

package com.myqxin.pojo;

import lombok.Data;

@Data
public class SrStatistics {
    
    

    private Integer siteid;
    private String location;
    private String description;
    private Integer amount;
    private String picture;
}

在resources/license/目录下创建licenseExcl.xml文件,内容如下

<License>
  <Data>
    <Products>
      <Product>Aspose.Total for Java</Product>
      <Product>Aspose.Words for Java</Product>
    </Products>
    <EditionType>Enterprise</EditionType>
    <SubscriptionExpiry>20991231</SubscriptionExpiry>
    <LicenseExpiry>20991231</LicenseExpiry>
    <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>
  </Data>
  <Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>
</License>

将模板放入这个目录下resources/wordTemplate/

在这里插入图片描述
controller逻辑代码

@RestController
@RequestMapping("/poi")
public class PoiController {
    
    

    @Autowired
    private ToAspose toAspose;
    
    @GetMapping("/getWord")
    public void getWord(HttpServletResponse response) throws Exception {
    
    
        if (true) {
    
    
        	// 动态数据填充
            String picture = "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";
            SrStatistics srStatistics = new SrStatistics();
            srStatistics.setSiteid(1235);
            srStatistics.setLocation("司法拘留");
            srStatistics.setAmount(3435);
            srStatistics.setDescription("水电费健康绿色减肥");
            srStatistics.setPicture(picture);
            // 设置请求头信息
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("测试模板", "UTF-8") + ".doc;");
            //加载模板
            Document wpd = toAspose.xmlToDocument("cetm.xml", srStatistics);
            wpd.save(response.getOutputStream(), com.aspose.words.SaveFormat.DOC);
        } else {
    
    
            response.setCharacterEncoding("utf-8");
            response.setContentType("application/json; charset=utf-8");
            PrintWriter writer = response.getWriter();
            writer.write("失败");
            writer.flush();
        }

    }
}

5,将模板需要动态更改的数据进行替换

就是那些是需要动态发生的数据,我们将实体类的字段进行替换,比如
m1替换成${siteid}
在这里插入图片描述
我之前是为了方便替换,m1用那个字段属性替换,你们根据实际应用来

图片在xml模板文件是以bsea64的字符串显示的,将替换成${picture}

在这里插入图片描述
建议:我们从一开始创建模板的时候,就定义好数据类型,将实体类的字段标注在模板方式,下次替换的使用只需要在字段加上 字段名就行了,注意,不可以将 {字段名}就行了,注意,不可以将 字段名就行了,注意,不可以将{字段名}直接放入word模板上,因为它另存为xml的时候会有问题

6,请求接口进行下载

在这里插入图片描述
打开效果:
m3,m4我没有进行替换
在这里插入图片描述

动态数据含表格示例

1,创建所需模板

1.1,新建一个word文档

内容如下

在这里插入图片描述
这里要实现的是,设备内容是多态传输,根据有多少设备,就显示多少。以及表格行数也是根据数据多少来展示多少行数据

1.2,将word模板另存为xml格式

在这里插入图片描述
在这里插入图片描述

2,代码实现

WordVo.java

package com.myqxin.pojo;

import lombok.Data;

import java.util.List;

/**
 * @author: myqxin
 * @Desc:
 * @create: 2023-02-08 10:09
 **/
@Data
public class WordVo {
    
    
    /** 厂站 */
    private String name;
    /** 设备编号 */
    private String equiNumber;
    /** 设备 */
    private List<String> equis;
    /** 数量 */
    private Integer number;
    /** 表格数据 */
    private List<Banci> bancis;
}

Banci.java

package com.myqxin.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;


/**
 * @author: myqxin
 * @Desc:
 * @create: 2023-02-08 10:12
 **/
@Data
@AllArgsConstructor
public class Banci {
    
    
    /** 时间 */
    private String time;
    /** 班次1 */
    private Integer bc1;
    /** 班次2 */
    private Integer bc2;
}

Controller请求代码

@GetMapping("/getWordt")
    public void getWordt(HttpServletResponse response) throws Exception {
    
    
        if (true) {
    
    
            // 封装数据
            WordVo wordVo = new WordVo();
            // 图片bese64格式
            String picture = "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";

            wordVo.setName("myqxin");
            wordVo.setEquiNumber(picture);
            ArrayList<String> equis = new ArrayList<>();
            equis.add("交换机");
            equis.add("路由器");
            equis.add("电脑");
            equis.add("鼠标");
            wordVo.setEquis(equis);
            wordVo.setNumber(4);
            ArrayList<Banci> bancis = new ArrayList<>();
            bancis.add(new Banci("2023-02-08 12:00:00", 815, 866));
            bancis.add(new Banci("2023-02-08 13:00:00", 806, 875));
            wordVo.setBancis(bancis);

            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("测试模板", "UTF-8") + ".doc;");
            //加载模板
            Document wpd = toAspose.xmlToDocument("cetm1.xml", wordVo);
            wpd.save(response.getOutputStream(), com.aspose.words.SaveFormat.DOC);
        } else {
    
    
            response.setCharacterEncoding("utf-8");
            response.setContentType("application/json; charset=utf-8");
            PrintWriter writer = response.getWriter();
            writer.write("失败");
            writer.flush();
        }

    }

将word转成xml格式,没有修改的模板替换值的时候,就下载模板本来的样子
原封不动的下载,效果如下
在这里插入图片描述

现在要将动态数据替换真实能更改的

以下值需要动态获取,进行替换

将m1替换成${name}

将设备编号的图片替换成${equiNumber}

将设备替换成${equis}

将数量替换成${number}

将表格数据处理跟上面有一点不同,等下开展

  • 将m1替换成${name}

替换前:
在这里插入图片描述
替换后:
在这里插入图片描述

  • 将设备编号的图片替换成${equiNumber}

替换前:
因为是besa64格式,内容很多啊,我们替换成自己的变量即可
在这里插入图片描述
替换后:
在这里插入图片描述

  • 将设备替换成${equis}

替换前:
在这里插入图片描述

替换后
不太清楚这个语法的,去看freemarker说明文档http://freemarker.foofun.cn/dgui_datamodel_types.html
在这里插入图片描述

  • 将数量替换成${number}

替换前:
在这里插入图片描述
替换后:
在这里插入图片描述
表格下一步在说明,先看一下替换后的效果,请求接口
可以看到已经替换成功,设备那里感觉和之前没什么区别,我们在代码在一条数据,就能看的清楚了
在这里插入图片描述
给设备,填了一个键盘的数据,再次请求接口

在这里插入图片描述
在这里插入图片描述
对表格数据进行动态处理,修改xml模板

需要删掉表格的一行,然后通过<#list>循环其中一行即可

在这里插入图片描述
删除其中一行后,替换的效果

在这里插入图片描述
在代码里面添一条数据,看效果

在这里插入图片描述
再次请求效果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45752401/article/details/128921219
今日推荐