1、建立word模板需要填充位置用占位符,图片位置就直接放置一张图片

2、另存为Word XML文档(*.xml),然后改文件后缀为.ftl

修改文件后缀为.ftl

3、将文件放置到开发软件中,我的是在idea中,所以我直接快捷键Ctrl+Alt+L进行了排版

4、对于导入进来部分位置爆红处理点击file->Settings | Languages & Frameworks | Schemas and DTDs,将爆红的位置复制添加到这里边就可以了!!!

5、将文件中需要根据数据库导入数据的地方使用${字段名}替换

6、对于有复选框的位置我们需要做些改动

添加复选框如下代码:F052表示打上对号,00A3表示没打对号

<w:r>
     <#if sex=='1'>
          <w:sym w:font="Wingdings 2" w:char="F052"/>
     <#else>
           <w:sym w:font="Wingdings 2" w:char="00A3"/>
      </#if>
 </w:r>

7、如果有图片需求就先使用图片在Word中占位,然后按1走,最后删除文件中的base64编码,替换为${字段}

删除base64编码,修改为${image}

8、处理完.ftl文件后就开始写核心代码

try {
                Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
                //设置编码
                configuration.setDefaultEncoding("UTF-8");
                //要填入的数据,用map取出来,这里我是从数据库取的数据
                Map<String, Object> repairApplication = webSignMapper.exportByRepairOrder(repairOrder);
                //取出图片地址,转换base64,通过key值去取
                String url= (String) repairApplication.get("key值");
                //使用工具类转换为base64编码
                String image1 = ImageUtils.imageFromUrlByHttps(url);
                //存入map中
                repairApplication.put("key值",image1);

                //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库教程装载,
                configuration.setClassForTemplateLoading(this.getClass(), "/templates");
                Template t = null;
                try {
                    //获取模板
                    t = configuration.getTemplate("例子.ftl","utf-8");
                } catch (IOException e) {
                    e.printStackTrace();
                }
                //输出文档路径及名称
                File outFile = new File("C:\\Users\\Lenovo\\Desktop\\信息表.doc");
                Writer out = null;
                try {
                    out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    //将数据填充,转为Word
                    t.process(repairApplication, out);
                } catch (TemplateException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (Exception e) {
                e.getMessage();
                e.printStackTrace();
            }

这里就不输出了,如果没有导出成Word,里边的内容还是.ftl内容,可以好好检查一下.ftl文件,是不是那个位置有弄错☺

9、如果存入数据库的图片地址是https形式的,就会报证书错误,解决方法在上一篇文章!!!!!!!!后续会更新导出为PDF文件

更多推荐