Java模板动态生成word文件的方法步骤

最近项目中需要根据模板生成word文档,模板文件也是word文档。当时思考一下想用POI API来做,但是觉得用起来相对复杂。后来又找了一种方式,使用freemarker模板生成word文件,经过尝试觉得还是相对简单易行的。

使用freemarker模板生成word文档主要有这么几个步骤

1、创建word模板:因为我项目中用到的模板本身是word,所以我就直接编辑word文档转成freemarker(.ftl)格式的。

2、将改word文件另存为xml格式,注意使用另存为,不是直接修改扩展名。

3、将xml文件的扩展名改为ftl

4、编写java代码完成导出

使用到的jar:freemarker.jar (2.3.28) ,其中Configuration对象不推荐直接new Configuration(),仔细看Configuration.class文件会发现,推荐的是 Configuration(Version incompatibleImprovements) 这个构造方法,具体这个构造方法里面传的就是Version版本类,而且版本号不能低于2.3.0

闲言碎语不再讲,直接上代码

 public static void exportDoc() {
        String picturePath = "D:/image.png";
        Map<String, Object> dataMap = new HashMap<String, Object>();
        dataMap.put("brand", "海尔");
        dataMap.put("store_name", "海尔天津");
        dataMap.put("user_name", "小明");

        //经过编码后的图片路径
        String image = getWatermarkImage(picturePath);
        dataMap.put("image", image);

        //Configuration用于读取ftl文件
        Configuration configuration = new Configuration(new Version("2.3.0"));
        configuration.setDefaultEncoding("utf-8");

        Writer out = null;
        try {
            //输出文档路径及名称
            File outFile = new File("D:/导出优惠证明.doc");
            out = new BufferedWriter(new OutputStreamWriter(new
            FileOutputStream(new File("outFile")), "utf-8"), 10240);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        // 加载文档模板
        Template template = null;
        try {
            //指定路径,例如C:/a.ftl 注意:此处指定ftl文件所在目录的路径,而不是ftl文件的路径
            configuration.setDirectoryForTemplateLoading(new File("C:/"));
            //以utf-8的编码格式读取文件
            template = configuration.getTemplate("导出优惠证明.ftl", "utf-8");
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("文件模板加载失败!", e);
        }

        // 填充数据
        try {
            template.process(dataMap, out);
        } catch (TemplateException e) {
            e.printStackTrace();
            throw new RuntimeException("模板数据填充异常!", e);
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("模板数据填充异常!", e);
        } finally {
            if (null != out) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    throw new RuntimeException("文件输出流关闭异常!", e);
                }
            }
        }
    }

因为很多时候我们根据模板生成文件需要添加水印,也就是插入图片

/***
 * 处理图片
 * @param watermarkPath 图片路径  D:/image.png
 * @return
 */
private String getWatermarkImage(String watermarkPath) {
    InputStream in = null;
    byte[] data = null;
    try {
        in = new FileInputStream(watermarkPath);
        data = new byte[in.available()];
        in.read(data);
        in.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    BASE64Encoder encoder = new BASE64Encoder();
    return encoder.encode(data);
}

注意点:

插入图片后的word转化为ftl模板文件(ps:水印图片可以在word上调整到自己想要的大小,然后在执行下面的步骤)

1、先另存为xml

2、将xml扩展名改为ftl

3、打开ftl文件, 搜索w:binData 或者 png可以快速定位图片的位置,图片 已经编码成0-Z的字符串了, 如下:

5、 将上述0-Z的字符串全部删掉,写上${image}(变量名随便写,跟dataMap里的key保持一致)后保存

6、也是创建一个Map, 将数据存到map中,只不过我们要把图片用代码进行编码,将其也编成0-Z的字符串,代码请看上边

至此一个简单的按照模板生成word并插入图片(水印)功能基本完成。

到此这篇关于Java模板动态生成word文件的方法步骤的文章就介绍到这了,更多相关Java 模板动态生成word内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java 实现word模板转为pdf

    1. pom相关依赖 工具poi-tl (操作word文档模板) + jacob (将操作后的word模板转为pdf) <!-- poi-tl的pom依赖 --> <dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.9.1</version> </dependency> <

  • Java模板动态生成word文件的方法步骤

    最近项目中需要根据模板生成word文档,模板文件也是word文档.当时思考一下想用POI API来做,但是觉得用起来相对复杂.后来又找了一种方式,使用freemarker模板生成word文件,经过尝试觉得还是相对简单易行的. 使用freemarker模板生成word文档主要有这么几个步骤 1.创建word模板:因为我项目中用到的模板本身是word,所以我就直接编辑word文档转成freemarker(.ftl)格式的. 2.将改word文件另存为xml格式,注意使用另存为,不是直接修改扩展名.

  • Java通过Freemarker模板实现生成Word文件

    目录 1.  准备模板 2.  代码实现 3. PDF文件加水印 1.  准备模板 模板 + 数据 = 模型 1.将准备好的Word模板文件另存为.xml文件(PS:建议使用WPS来创建Word文件,不建议用Office) 2.将.xml文件重命名为.ftl文件 3.用文本编辑器打开.ftl文件,将内容复制出来,格式化一下,再覆盖原来的内容 (PS:格式化一下是为了方便查找并设置变量/占位符,当然设置好模板参数变量以后可以再压缩后再写会.ftl文件) 另外,强烈不建议在word文件中去编辑设置模

  • windows下使用GoLand生成proto文件的方法步骤

    目录 下载编译器protoc 1.使用google官方protoc 2.使用三方protoc,比如我使用的gogo的protoc 设置环境变量 编写proto文件 将proto文件编译为pb.go文件 下载编译器protoc 两种方式: 1.使用google官方protoc 下载地址:https://github.com/google/protobuf/releases 2.使用三方protoc,比如我使用的gogo的protoc 下载地址:https://github.com/gogo/pro

  • django模板加载静态文件的方法步骤

    加载静态文件 在一个网页中,不仅仅只有一个 html 骨架,还需要 css 样式文件, js 执行文件以及一些图片等.因此在 DTL 中加载静态文件是一个必须要解决的问题.在 DTL 中,使用 static 标签来加载静态文件.要使用 static 标签,首先需要 {% load static %} .加载静态文件的步骤如下: 首先确保 django.contrib.staticfiles 已经添加到 settings.INSTALLED_APPS 中. 确保在 settings.py 中设置了

  • asp.net下用Aspose.Words for .NET动态生成word文档中的数据表格的方法

    1.概述 最近项目中有一个这样的需求:导出word 文档,要求这个文档的格式不是固定的,用户可以随便的调整,导出内容中的数据表格列是动态的,例如要求导出姓名和性别,你就要导出这两列的数据,而且这个文档不是导出来之后再调整而是导出来后已经是调整过了的.看到这里,您也许马上想到用模板导出!而且.NET中自带有这个组件:Microsoft.Office.Interop.Word,暂且可以满足需求吧.但这个组件也是有局限性的,例如客户端必须装 office组件,而且编码复杂度高.最麻烦的需求是后面那个-

  • 最简单的java生成word文档方法

    1.首先新建一个word文档,然后设计好格式,比如说我的标题是黑体二号,居中对其,正文是宋体四号,如下 2.另存为xml格式(文件->另存为)的文件,如下图 3.使用txt打开保存的xml文件,复制完,贴到你的代码里,如图 4.替换内容,Ctrl+F搜索标题(第一步我输入的),把标题换成你要显示的动态标题,把 正文替换成你想要的动态内容,如下 5.设置相应头生成doc文件 6.测试:在浏览器输入http:127.0.0.1:8080/createDoc,结果如下: 7.分享代码 (1)以下是生成

  • Java实现读取及生成Excel文件的方法

    本文实例讲述了Java实现读取及生成Excel文件的方法.分享给大家供大家参考,具体如下: 一.读取Excel文件 需要先下载poi-3.0.1-FINAL-20070705.jar(点击此处本站下载poi-3.0.1-FINAL-20070705.jar.) ExcelExamRead.java import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.apache.p

  • Java使用iTextPDF生成PDF文件的实现方法

    iText介绍和说明 因为项目需要生成PDF文件,所以去找了一下能够生成PDF的Java工具,看到了iText可以说好评如潮. 如果你想通过java操作PDF文件,那么 iText 绝对是你的首选. 引入依赖 这里使用的是iText5 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</ve

  • VUE动态生成word的实现

    不废话,直接上代码. 前端代码: <template> <Form ref="formValidate" :model="formValidate" :rules="ruleValidate" :label-width="110"> <FormItem label="项目(全称):" prop="orgName"> <Input v-model=

  • C#生成Word文件(图片、文字)

    本文实例为大家分享了C#生成Word文件的具体代码,供大家参考,具体内容如下 通过Microsoft.Office.Interop.Word生成Word文档 1.引用类 WordReport.cs,代码如下: using System; using System.Collections.Generic; using System.Text; using Microsoft.Office.Interop.Word; using MSWord = Microsoft.Office.Interop.W

随机推荐