文档章节

java生成word

to_ln
 to_ln
发布于 2017/09/11 17:38
字数 592
阅读 47
收藏 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:

运行代码:

 

© 著作权归作者所有

上一篇: trunc函数的用法
下一篇: 文件上传
to_ln
粉丝 2
博文 77
码字总数 19555
作品 0
东城
私信 提问
加载中

评论(0)

[转载]java导出word的5种方式

在网上找了好多天将数据库中信息导出到word中的解决方案,现在将这几天的总结分享一下。总的来说,java导出word大致有5种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM...

osc_s5wa3ebb
2018/05/07
59
0
Android根据word模板文档将表单数据生成word文档的方案整理

版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 尝试的方案包括以下几种: freemarker 只能在java项目上运行,无法在Android项目上运行; 参考资料:《FreemarkerJavaDemo【And...

HaiyuKing
2019/04/29
0
0
[原创]java导出word的5种方式

在网上找了好多天将数据库中信息导出到word中的解决方案,现在将这几天的总结分享一下。总的来说,java导出word大致有5种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM...

osc_jxumvtli
2018/05/03
26
0
java远程调用openoffice服务将word文件转换成pdf问题

启动openoffice服务的命令 关键java程序 看构造函数是支持java程序远程调用openoffice服务的,但是实际测试出现异常 word文件和java程序都在应用服务器192.168.1.130上,openoffice服务在192...

小龙在线
2016/06/17
3.9K
3
使用 Apache POI 和 OpenOffice API 在 Linux 中统计 Office 文档的页数

简介: 在实际的项目开发中经常会遇到需要在不同的操作系统平台上统计 Microsoft Office 系列文档页数的要求。Apache POI 提供了一套完整的用于访问微软格式文档的 Java API。但是 Apache P...

IBMdW
2012/10/26
2.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

2020年中国AI基础数据服务行业研究报告(附件下载)

2020年中国AI基础数据服务行业研究报告 请在百度网盘下载 链接: https://pan.baidu.com/s/1-KBY9z1qC5Cbew-89MbXfw 提取码: 2egv...

解优猎头
24分钟前
20
0
转MDL中数据读取

http://yexin218.iteye.com/blog/532184 澄清一个误区:每个Net_BuFFER包含的是一个linked-list的MDL,而不仅仅是一个MDL。所以你要访问Net_BuFFER 中数据,你需要在代码中根据需要的offset遍...

simpower
26分钟前
7
0
怎么将WORD批量转换成PDF?可以批量转换的迅捷PDF转换器!

怎么将WORD批量转换成PDF?如果是一个文档需要进行转换,大家可以通过各式各样的方式去尝试解决,例如最简单的重新编辑,将WORD文档进行复制,粘贴到PDF文档当中,但是这个方法在面对多份WOR...

开源86
29分钟前
18
0
[开源] .Net ORM 访问 人大金仓数据库

前言 京人大金仓信息技术股份有限公司(以下简称“人大金仓”)是具有自主知识产权的国产数据管理软件与服务提供商。人大金仓由中国人民大学一批最早在国内开展数据库教学、科研、开发的专家...

2881099
35分钟前
9
0
phpcms v9 数据表结构

表 1 : v9_admin 管理员表 字段 类型 Null 默认 额外 注释 userid mediumint(6) unsigned PK auto_increment 用户id username varchar(20) YES 用户名 password varchar(32) YES 密码 roleid......

邓振华
36分钟前
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部