zoukankan      html  css  js  c++  java
  • Java 动态生成复杂 Word

    Java 动态生成复杂 Word


    阅读目录

    1. 制作 Word 模版,将你需要动态生成的字段用${}替换。
    2. 将 Word文档保存为 xml 。
    3. 引入项目。


    项目中需要用 java 程序生成doc 文件,百度一番,发现FreeMarker 的评价比较高。

    FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出,至于想详细了解 FreeMarker 的请自行百度。


    1. 制作 Word 模版,将你需要动态生成的字段用${}替换。如:${name}、${age}

    2. 将 Word文档保存为 xml。

    3. 引入项目。

    将 xml 文件更改后缀名 为 .ftl, 然后引用到你的项目中。


    需要注意的问题:
    a. word 版本不能低于 2003 ,因为 2003 才开始支持 xml。

    实现的代码如下:

    package word;
    
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.util.HashMap;
    import java.util.Map;
    
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    
    public class WordTest {
    
        private Configuration configuration = null;
    
        public WordTest() {
            configuration = new Configuration();
            configuration.setDefaultEncoding("UTF-8");
        }
    
        public void createWord() {
            Map<String, Object> dataMap = new HashMap<String, Object>();
            try {
                dataMap.put("name", "guoxp");
                dataMap.put("sex", "男");
    
                configuration.setClassForTemplateLoading(this.getClass(), "/template"); // FTL文件所存在的位置
                Template template = configuration.getTemplate("fz.ftl");
    
                File outFile = new File("D:/temp2/wordTest2.doc");// D:/temp2这个路径下的temp2文件夹是手动创建的
                Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));
                template.process(dataMap, out);
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            WordTest test = new WordTest();
            test.createWord();
        }
    }

    目录结构以及效果图如下:

     

    备注:

    a. template.process(),接受一个 Map 和 输入流做为入参,Map 既是你需要动态生成到 doc 里面的数据,字段名必须与你在 .ftl 里面定义的一致;

    b. 如果你想利用这段代码,需要有一个 .ftl 文件,并且在你的项目 src 目录下面新建 template 目录;

    c.辅助文件"FreeMarker.jar 、实例项目的.ftl "。

  • 相关阅读:
    水木清华小爬虫
    不让复制是不可能的----js获取选中文字
    [转]nonlocal和global
    LLVM和clang
    Megcup2017 Dogfood
    史莱姆自爆问题
    前端颜色表
    [转]论文十诫
    返利网盈利模式
    事务的四个属性ACID
  • 原文地址:https://www.cnblogs.com/jack1208-rose0203/p/6164941.html
Copyright © 2011-2022 走看看