文档章节

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
东城
word常用接口对象--DataRegion类

DataRegion 类,代表一个数据区域,用来填充数据区域及控制数据区域格式。您只能通过调用 OpenDataRegion(String) 方法或 CreateDataRegion(String, DataRegionInsertType, String) 方法获得...

山里的红杏
09/10
0
0
使用卓正PageOffice--动态创建数据区域

WordDocument对象的CreateDataRegion方法是为了实现用程序动态的在Word文档中添加一个数据区域而设计的,使用此方法可以在生成Word文档的时候更灵活,支持更多复杂格式的文件生成。 CreateDa...

山里的红杏
09/11
0
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

没有更多内容

加载失败,请刷新页面

加载更多

帧动画(wifi信号动态动画)

准备六张wifi不同信号强度的素材图片,复制到drawable目录中 在drawable目录中新建frame文件,并编写代码 <animation-list xmlns:android="http://schemas.android.com/apk/res/android"> ...

lanyu96
23分钟前
1
0
快速get到学习Linux操作系统的点

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux能够运行主要的UNIX工具软件、网络协议和应用程序。它支持32位...

问题终结者
31分钟前
1
0
Django2 model操作数据库

1.将应用(如learn)添加到安装应用配置中 将我们新建的应用(learn)添加到 settings.py 中的 INSTALLED_APPS中,告诉Django有这么一个应用。 INSTALLED_APPS = [ 'django.contrib.ad...

MichaelShu
34分钟前
1
0
SpringBoot基础篇Bean之条件注入之注解使用

更多Spring文章,欢迎点击 一灰灰Blog-Spring专题 bean的条件注入,除了前面一篇博文中介绍的通过@Conditional注解配合Condition接口的实现之外,还提供了更多简化的注解使用方式,省略了自己...

小灰灰Blog
45分钟前
1
0
git clone 报错 Clone failed: Authentication failed for

新装了系统,git和phpstorm的配置全都没有了,重新安装了git和phpstorm 系统:windows10 代码托管平台:阿里云code 软件的安装不作赘述。 报错1 Could not read from remote repository 解决...

Marhal
46分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部