springMVC项目使用freemarker生成word文档

标签: freemarker word
13人阅读 评论(0) 收藏 举报
分类:

工作中遇到需要根据模板内容生成word文档需求,特此记录。

一、准备word并转化成xml文件

    1、准备word模板

    

    2、使用office打开,并另存为 Word Xml文档格式。

    

    3、将生成好的XML文件用工具打开,并格式化,我使用的是Notepad++,并安装了XML Tools插件。

    刚生成好的xml文件如下:

    

    此时,格式不利于代码编写,需要格式化,格式化完成后如下,

    

    此时,我们可直接将XML文件后缀名改为.doc并打开,发现没有问题,如部分文字位置不对,一般是文档中的空格在转成xml时自动去除了。此时我们可将XML文件调整下。

    如“页眉”两字直接在图片后面了,中间没有了空格,此时,我们在xml文件中搜索“页眉”,找到如下代码:


        <w:t xml:space="preserve"/>这个<w:t>标签中,添加了xml:space="preserve"属性,xml:space是一个Enumerated类型的属性,它的设置值只能是“default”或“preserve”:“default”表示应用程序可以自行随意处理空格等字符;“preserve”则表示应用程序应把空格等字符当做普通文本字符处理。所以我们可将<w:t>页眉</w:t>修改为<w:t  xml:space="preserve">    页眉</w:t>,再保存后转为.doc文档,查看,页眉显示和原来一样了。

    至此,前期工作已准备好了。我们开始在项目中实现导出。

二、在项目中相应目录中添加一个ftl文件,将处理后的xml代码拷贝到文件中。

    将xml文件中需要替换的内容写上freemarker标签,如将姓名修改为代码传参。将xml中“张妍”替换为 ${name!''}

三、编写测试代码:

package com.near.demo.word.service;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import freemarker.template.Configuration;
import freemarker.template.Template;

public class ExportWordService {

    private static final Logger logger = LoggerFactory.getLogger(ExportWordService.class);

    public static void main(String[] args) throws Exception {
        String outputFile = "C:\\Users\\Administrator\\Desktop\\word\\test.doc";
        OutputStream out = new FileOutputStream(outputFile);
        Map<String, Object> map = new HashMap<>();
        map.put("name", "李四");
        createWord(out, "/wordTemplate.ftl", map);
    }

    public static void createWord(OutputStream out, String templatePath, Object props) {
        Writer wrter = null;
        Configuration configuration = new Configuration();
        configuration.setDefaultEncoding("utf-8");
        // 模板加载路径
        configuration.setClassForTemplateLoading(ExportWordService.class, "/template");
        Template t = null;
        try {
            t = configuration.getTemplate(templatePath);
            wrter = new OutputStreamWriter(out, "utf-8");
            t.process(props, wrter);
            wrter.flush();
        } catch (Exception ex) {
            logger.error(ex.getMessage());
        } finally {
            if (null != wrter) {
                try {
                    wrter.close();
                } catch (IOException e) {
                    logger.error(e.getMessage());
                }
            }
        }
    }
}

运行后,成功生成word文档。姓名也修改为了李四。后期再加上一些问题解决记录。


查看评论

SpringMVC中使用FreeMarker生成Word文档

FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具,它不是面向最终用户的,而是一个Java类库,是一款程序员可...
  • hundan_520520
  • hundan_520520
  • 2017-02-03 17:02:49
  • 5567

springmvc采用freemarker动态生成带图片的word

  • 2017年06月03日 11:31
  • 6.2MB
  • 下载

spring mvc freemarker下载word文档

说来惭愧 做java开发四年了 第一次自己尝试写word文档下载,借鉴网上的例子,实验成功了,特此记录。 本例子使用springmvc+freemarker来做。 FreeMarker简介:  Fre...
  • wuzheyuanzhang
  • wuzheyuanzhang
  • 2017-06-06 11:41:12
  • 901

使用freemarker生成word文档,源代码+jar包+说明文档及注意事项

  • 2014年01月22日 20:41
  • 5.14MB
  • 下载

实现Freemarker生成word文档,内容可二次写入

1. 需求场景最近项目有需要做一个导出word文档的功能,但由于数据量的问题,数据不能从后台一次性获取到,需要多次查询获取。2. 技术选型生成word文档涉及各种样式,使用freemarker模板来实...
  • zhaoliangbao2778
  • zhaoliangbao2778
  • 2017-01-10 17:30:18
  • 851

在javaweb中使用freemarker生成word文档

Web项目中生成Word文档的方式有很多,基于Java的解决方案也是很多的,包括使用iText、jasperReport等各种方式,其实在从Office 2003开始,就可以将Office文档转换...
  • Vinsuan1993
  • Vinsuan1993
  • 2016-12-27 21:09:46
  • 1026

Java Web项目中使用Freemarker生成Word文档

Web项目中生成Word文档的操作屡见不鲜,基于Java的解决方案也是很多的,包括使用Jacob、Apache POI、Java2Word、iText等各种方式,其实在从Office 2003开始,就...
  • jackfrued
  • jackfrued
  • 2014-09-21 15:33:20
  • 66585

java中使用freemarker导出word文档

公司项目要求要有一个能导出成一份word文档的功能,于是就上网搜了一些教程,但我跟着教程使用的时候还是遇到了很多问题,这里我自己总结一份我作为新手使用freemarker能看懂的文章。可能以后自己还会...
  • IRainReally
  • IRainReally
  • 2017-09-21 15:17:48
  • 159

Spring Boot中使用freeMarker生成word文档

在Spring boot中使用freeMarker生成word文档
  • zhouseawater
  • zhouseawater
  • 2017-01-10 14:11:20
  • 1418

java web项目利用freemarker导出word文件小例子

由于word文件的特殊性,不像excel文件格式规范。往往无法掌控好生成文档的样式,不美观不好看。 这两天根据网上学习的一个小技巧,可以方便的生成需要的word文件,而且样式完全按照自己的定义形式。...
  • stoneapple1122
  • stoneapple1122
  • 2016-09-21 22:57:34
  • 1800
    个人资料
    等级:
    访问量: 494
    积分: 37
    排名: 191万+
    文章分类
    文章存档