文档章节

java生成word

to_ln
 to_ln
发布于 2017/09/11 17:38
字数 592
阅读 12
收藏 1

1.制作模板

保存为.xml文件,打开确认输入的这几个字段,如果被分开了,修改为这样子:

另存为wordDemo.ftl,这里我放到桌面了,可以根据自己需要,存放模板。

2.代码实现

需要jar包:freemarker.jar(http://freemarker.org/freemarkerdownload.html

     @Test 
        public  void createWord() throws Exception{ 
            // key值和模板输入值对应
           Map<String,String> dataMap = new HashMap<String,String>(); 
           dataMap.put("name", "张晶"); 
           dataMap.put("no", "170911");
           dataMap.put("gender", "女"); 
           dataMap.put("nationality", "中国"); 
                
           //Configuration用于读取ftl文件 
           Configuration configuration = new Configuration(); 
           configuration.setDefaultEncoding("utf-8"); 
            
           //模板的目录路径,这里我是放到了桌面,可以根据具体情况存放模板
           configuration.setDirectoryForTemplateLoading(new File("C://Users//Administrator//Desktop")); 
            
            
           // 生成的word
          File outFile = new File("D:/test.doc"); 
           
          //以utf-8的编码读取ftl文件 
          Template template;
          template = configuration.getTemplate("wordDemo.ftl","utf-8");
          Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"),10240); 
          template.process(dataMap, out); 
             out.close();  

        }

3.带有图片

1)制作的模板为:

另存为.xml文件,打开该xml文件,可以看到图片转换为64位编码:

我这里是pkg:binaryData后面为图片64位编码,如果生成不是在pkg:binaryData后,只要把64位编码替换为${image}(我这里用的是image,可以自己设置字段名称)即可。

2) 代码实现中:

在2.代码实现中,增加一行代码

     /**
      * 将图片生成base64编码
      * @param imgPath
      * @return base64编码
      */
     public String getImageStr(String imgPath) { 
                    InputStream in = null; 
                    byte[] data = null; 
                    try { 
                        in = new FileInputStream(imgPath); 
                        data = new byte[in.available()]; 
                        in.read(data); 
                        in.close(); 
                    } catch (Exception e) { 
                        e.printStackTrace(); 
                    } 
                    BASE64Encoder encoder = new BASE64Encoder(); 
                    return encoder.encode(data); 
               }

运行之后生成的word为:

4.带list

1)制作模板

找到需要循环的列的<w:tr></w:tr>,按下图作修改:

2)代码实现

 @Test 
    public  void createWord() throws Exception{ 
        // key值和模板输入值对应
       Map<String,List> dataMap = new HashMap<String,List>();
       List<WordTest> list = new ArrayList<WordTest>();
       WordTest t = new WordTest();
       t.setName("张晶");
       t.setNo("11");
       t.setGender("女");
       t.setNationality("中国");
      
       WordTest t1 = new WordTest();
       t1.setName("张晓");
       t1.setNo("12");
       t1.setGender("男");
       t1.setNationality("香港");
       list.add(t);
       list.add(t1);
       dataMap.put("list", list); 
            
       //Configuration用于读取ftl文件 
       Configuration configuration = new Configuration(); 
       configuration.setDefaultEncoding("utf-8"); 
        
       //模板的目录路径,这里我是放到了桌面,可以根据具体情况存放模板
       configuration.setDirectoryForTemplateLoading(new File("C://Users//Administrator//Desktop")); 
        
        
       // 生成的word
      File outFile = new File("D:/test.doc"); 
       
      //以utf-8的编码读取ftl文件 
      Template template;
      template = configuration.getTemplate("wordDemo.ftl","utf-8");
      Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"),10240); 
      template.process(dataMap, out); 
         out.close();  

    }

如上,只是把String变为list,这里类WordTest:

运行代码:

 

© 著作权归作者所有

共有 人打赏支持
to_ln
粉丝 0
博文 67
码字总数 14598
作品 0
东城
基于 Java 的代码注释 - XDoc-Java

XDoc, 是基于Java语言编写,提供将Java方法上的注释转成接口文档的工具.不同于sun doc生成的Java文档, XDoc只专注于对外接口层的文档转译, 基于原有的sun doc注解,加上扩展的一些,为使用者提...

风里的叶子
07/13
0
0
阿里架构师眼里JVM可以说的那些事

前言 对于C语言开发的程序员来说,在内存管理方面,必须负责每一个对象的生命周期,从有到无。 对于Java程序员你来说,在虚拟机内存管理的帮助下,不需要为每个new对象都匹配free操作,内存泄...

07/09
0
0
JDK之JVM中Java对象的头部占多少byte

先做个铺垫: 在32位机器上word size是32bits,CPU一次性处理32bits,在64位机器上word size是64bits,CPU一次性处理64bits。 Data bus size, instruction size, address size are usually ...

汉斯-冯-拉特
06/30
0
0
Java SE1.6中的Synchronized

1 引言 在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了J...

serenity
2015/07/15
0
0
1.5.1 编辑java源代码

编辑 java 源代码可以使用任何无格式的文本编辑器,在Windows操作系统上可以使用记事本(NotePad)、EditPlus 等程序,在Linux平台上可以使用VI工具等。 注意:编写java程序不要使用写字板,...

Gooiem
2015/08/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

设计模式:简单工厂模式(静态共产方法模式)

简单工厂的构成包括三个角色: 1)抽象产品类 2)具体产品类(继承抽闲产品类) 3)工厂类(生产具体产品) 具体代码实现 1、抽象产品类 /** * 抽象类 */public abstract class Car ...

京一
3分钟前
0
0
Lombok使用

1 介绍 Lombok是一个简单的Java库,改工具可以通过注解自动地提供一些方法,简化开发。比如编写POJO时需要为每个属性提供getter()方法和setter()方法,这就可以使用Lombok实现。 2 配置 Lomb...

SuperHeroes
11分钟前
0
0
Confluence 6 删除垃圾内容

属性(profile)垃圾 属性垃圾的定义为,一个垃圾用户在 Confluence 创建了用户,但是这个用户在自己的属性页面中添加了垃圾 URL。 如果你有很多垃圾用户在你的系统中创建了属性,你可以使用...

honeymose
13分钟前
0
0
java虚拟机之内存模型

1. 概述 对于从事 C、C++ 程序开发的人员来说,在内存管理领域,他们既是拥有最高权力的「皇帝」又是从事基础工作的「劳动人民」 --- 既拥有每个对象的「所有权」,又担负着每一个对象生命开...

firepation
16分钟前
0
0
解决linux的-bash: ./xx: Permission denied

解决linux的-bash: ./xx: Permission denied 在linux下执行sh文件时提示下面信息: -bash: ./xx.sh: Permission denied解决:chmod 777 xx.sh 1 2 3 4 Linux chmod +755和chmod +777 ......

DemonsI
26分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部