使用freemarker模板导出word文档

简介: 使用freemarker模板导出word文档

最近项目中要使用到导出word这项功能,参考了许多导出的方法,发现使用freemarker模板导出word的效果最好可以保持原样。

导入freemarker的架包

1.首先我们需要用word制作一份模板,打开word编辑我们想要的word样式。

如图:

20180820214047904.png

2.在需要填写的地方用变量来代替。如果有图片需要先用图片来填充。然后另存为xml文件,然后再把后缀名改为.ftl的格式

20180820211623249.png

3.处理ftl文件,把图片替换成变量。

20180820212751917.png

20180820213036263.png

4.word表格的填充,ftl也要做修改。找到自己表格所在的那行,word中<w:tr>表示一行,我们找到表头的下一行。

20180820213939851.png

从这行开始修改studengList表示待会代码要放进去的List <w:tr>,缩起来了

20180820214342922.png

5.java代码

package com.smxy.lq.utils;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import sun.misc.BASE64Encoder;
/**
 * 
 * @Description :使用freemark模板生成word文档
 * @author Bush罗
 * @date 2018年8月20日
 *
 */
public class WordFreemark {
  private Configuration configuration = null;
  public WordFreemark() {
    configuration = new Configuration();
    configuration.setDefaultEncoding("UTF-8");
  }
  public static void main(String[] args) {
    WordFreemark test = new WordFreemark();
    test.createWord();
  }
  public void createWord() {
    Map<String, Object> dataMap = new HashMap<String, Object>();
    getData(dataMap);
    configuration.setDefaultEncoding("utf-8");//设置编码
    configuration.setClassicCompatible(true);
    configuration.setClassForTemplateLoading(
        this.getClass(),
        "/ftl/word");// FTL文件所存在的位置
    Template t = null;
    try {
      t = configuration.getTemplate("word.ftl"); // ftl模板名称
    } catch (IOException e) {
      e.printStackTrace();
    }
    File outFile = new File("D:/word" + Math.random() * 10000
        + ".doc");
    Writer out = null;
    try {
      out = new BufferedWriter(new OutputStreamWriter(
          new FileOutputStream(outFile)));
    } catch (FileNotFoundException e1) {
      e1.printStackTrace();
    }
    try {
      t.process(dataMap, out);
    } catch (TemplateException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  private void getData(Map<String, Object> dataMap) {
    dataMap.put("name", "Bush罗");
    dataMap.put("number", "2015089879");
    //填充图片
    dataMap.put("image", getImageStr());
    //表格填充
    List<Student> studentList=new ArrayList<Student>();;
    for(int i=0;i<10;i++){
      Student student=new Student();
      student.setName("小明");
      student.setPhone("1234567");
      student.setSex("男");
      studentList.add(student);
    }
    dataMap.put("studentList", studentList);
  }
  //图片转码
    public String getImageStr() {  
        String imgFile = "E:/AAA.png";  
        InputStream in = null;  
        byte[] data = null;  
        try {  
            in = new FileInputStream(imgFile);  
            data = new byte[in.available()];  
            in.read(data);  
            in.close();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        BASE64Encoder encoder = new BASE64Encoder();  
        return encoder.encode(data);  
    }  
}

6.生成样式

20180820215324890.png

相关文章
|
存储 Java Linux
Springboot 超简单实现在线预览,Word文档 doc、xlsx、pdf、txt等
Springboot 超简单实现在线预览,Word文档 doc、xlsx、pdf、txt等
2332 0
Springboot 超简单实现在线预览,Word文档 doc、xlsx、pdf、txt等
|
XML Java 数据格式
使用Java + Freemarker 导出word文档
使用Java + Freemarker 导出word文档
|
1月前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
404 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
6月前
|
数据采集 移动开发 前端开发
springboot使用html模版导出pdf文档
springboot使用html模版导出pdf文档
|
XML 数据格式
Freemarker填充数据到word模板中
Freemarker填充数据到word模板中
124 1
利用Freemarker动态生成PDF文档
利用Freemarker动态生成PDF文档
327 0
|
Java Maven
使用EasyPOI导出复杂的Word表格
使用EasyPOI导出复杂的Word表格
3492 0
使用EasyPOI导出复杂的Word表格
|
Web App开发 C#
C# web项目利用docx文档作为模板~为打印专做的解决方案
还是那句话:十年河东,十年河西,莫欺少年穷。 目前,web端打印技术有很多,有收费的专业web打印控件,大家可以参考我的上一篇博客。当然,很多公司不愿意出钱,那么今天咱们就探讨下怎么做免费的打印。 web端JS技术很强大,JS也提供了简单的打印方法,大家可参考JQprint()方法,这个方法网上有很多说明,在我的上一篇博客中也有提到,可以简单实现打印功能,大家可自行查询资料,在此不作说明。
1318 0
|
JSON Java 数据格式
Swagger文档转Word 文档
GitHub 地址:https://github.com/JMCuixy/SwaggerToWord 原创作品,转载请注明出处:http://www.cnblogs.com/jmcui/p/8298823.html 一、前言     为什么会产生这个需求呢?     我们公司作为乙方,老是被客户追着要一份API文档,当我们把一个 Swagger 文档地址丢给客户的时候。
1479 0