文档章节

java生成word

to_ln
 to_ln
发布于 2017/09/11 17:38
字数 592
阅读 14
收藏 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
粉丝 0
博文 69
码字总数 15307
作品 0
东城
私信 提问
java远程调用openoffice服务将word文件转换成pdf问题

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

小龙在线
2016/06/17
1K
3
word常用接口对象--DataRegion类

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

山里的红杏
09/10
0
0
使用 Apache POI 和 OpenOffice API 在 Linux 中统计 Office 文档的页数

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

IBMdW
2012/10/26
1K
0
有没有将word转换为flash的好方法

最近的项目中用到了word文档的在线预览功能,类似于百度文库那种。word文档是通过程序自动生成的, 现在的思路是想把word通过java 程序转换成flah 文件,这个貌似类似于flshpaper 这样的工具...

浪漫的菜鸟
2012/12/12
1K
6
基于 Java 的代码注释 - XDoc-Java

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

风里的叶子
07/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何解决 homebrew 更新慢的问题

之前一直困扰于 Homebrew 的更新速度,曾试过修改更新源(清华、中科大等)的方式,但是并没什么卵用;也试过设置 curl 代理的方式,但是 brew 走的好像不是 curl 的方式,所以也没用。 通过...

whoru
9分钟前
0
0
TiDB EcoSystem Tools 原理解读系列(二)TiDB-Lightning Toolset 介绍

简介 TiDB-Lightning Toolset 是一套快速全量导入 SQL dump 文件到 TiDB 集群的工具集,自 2.1.0 版本起随 TiDB 发布,速度可达到传统执行 SQL 导入方式的至少 3 倍、大约每小时 100 GB,适合...

TiDB
11分钟前
0
0
【Visual Studio 扩展工具】如何在ComponentOneFlexGrid树中显示RadioButton

概述 在ComponentOne Enterprise .NET控件集中,FlexGrid表格控件是用户使用频率最高的控件之一。它是一个功能强大的数据管理工具,轻盈且灵动,以分层的形式展示数据(数据呈现更加直观)。...

葡萄城技术团队
14分钟前
0
0
Maven环境隔离

Maven环境隔离 1. 什么是Maven环境隔离 顾名思义,Maven环境隔离就是将开发中的环境与beat环境、生产环境分隔开,方便进行开发和维护。这个在实际项目中用的还是很多的,如果你的项目用的Mav...

蚂蚁-Declan
14分钟前
1
0
day182-2018-12-19-英语流利阅读-待学习

“性感”时代已去,维密将如何转身? Daniel 2018-12-19 1.今日导读 维多利亚的秘密(Victoria's Secret)这个内衣品牌,最近似乎步入了“中年危机”——曾经打遍天下的“性感”内衣,在主打...

飞鱼说编程
14分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部