文档章节

java生成word

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

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
博文 40
码字总数 11179
作品 0
东城
Java虚拟机--对象内存布局

文末有彩蛋!!!!!! 对象中的数据 前两篇,我们讲到了Java对象的类加载,Java对象的初始化操作。本篇,我们来继续学习Java对象,看看Java对象在内存中如何布局,看看Java对象中由哪些数据...

贾博岩 ⋅ 05/03 ⋅ 0

Java给word中的table赋值

一、准备工作:   下载PageOffice for Java:http://www.zhuozhengsoft.com/dowm/ 二、 实现方法:   要调用PageOffice操作Word中的table,必须借助数据区域(DataRegion)实现的(原因是...

山里的红杏 ⋅ 05/04 ⋅ 0

java动态填充word文档并上传到服务器

一、 需求背景   在一些特殊应用场合,客户希望在服务器上生成文档的同时并填充数据,客户端的页面不显示打开文档,但是服务器上生成文档对服务器压力很大,目前服务器上生成文档第一种就是方式...

山里的红杏 ⋅ 05/07 ⋅ 0

JNI开发流程与引用数据类型的处理

今天我们来看下Java JNI,先看下维基百科给的定义, JNI, Java Native Interface, Java本地接口,是一种编程框架,使得Java虚拟机中的Java程序可以调用本地应用或库,也可以被其他程序调用。...

juexingzhe ⋅ 05/04 ⋅ 0

如何计算Java对象所占内存的大小

摘要 本文以如何计算Java对象占用内存大小为切入点,在讨论计算Java对象占用堆内存大小的方法的基础上,详细讨论了Java对象头格式并结合JDK源码对对象头中的协议字段做了介绍,涉及内存模型、...

阿里云云栖社区 ⋅ 05/24 ⋅ 0

基于ClassLoader的java代码加密的经验分享

原理就是 生成项目时将待加密的java class文件通过加密算法转换生成加密的二进制文件,此文件不会被JD-GUI等反编译工具直接解密。 项目在启动时,用自定义的ClassLoader将加密的二进制文件进...

hxt168 ⋅ 06/06 ⋅ 0

Java并发--synchronized实现原理及锁优化

注:本文中的部分内容摘抄自他人博客,如有侵权,请联系我,侵删~ 本篇博客主要讲述 synchronized 关键字的实现原理以及 JDK 1.6 后对 synchronized 的种种优化。synchronized 的使用不再赘述...

championhengyi ⋅ 04/27 ⋅ 0

Java基础|Java特性与HelloWorld运行流程

【Java基础】 Java语言特点:(着重了解两个)开源、跨平台。 跨平台如何实现:通过JVM实现,JVM充当Java和不同OS之间的翻译器,不同OS对应不同JVM。 Java语言的平台:JavaSE、JavaME(Androi...

darlingwood2013 ⋅ 05/29 ⋅ 0

JVM汇总--jvm调优-命令篇

GC的最根本原因:垃圾收集器的工作就是清除Java创建的对象,垃圾收集器需要清理的对象数量以及要执行的GC数量均取决于已创建的对象数量。因此,为了使你的系统在GC上表现良好,首先需要减少创...

素雷 ⋅ 04/12 ⋅ 0

RMI:Java中的分布式计算框架

RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一。其实...

qq_39521554 ⋅ 05/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

DevOps 资讯 | PostgreSQL 的时代到来了吗 ?

PostgreSQL是对象-关系型数据库,BSD 许可证。拼读为"post-gress-Q-L"。 作者: Tony Baer 原文: Has the time finally come for PostgreSQL?(有删节) 近30年来 PostgreSQL 无疑是您从未听...

RiboseYim ⋅ 7分钟前 ⋅ 0

Cube、Cuboid 和 Cube Segment

1.Cube (或Data Cube),即数据立方体,是一种常用于数据分析与索引的技术;它可以对原始数据建立多维度索引。通过 Cube 对数据进行分析,可以大大加快数据的查询效率 2.Cuboid 在 Kylin 中特...

无精疯 ⋅ 45分钟前 ⋅ 0

github太慢

1:用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 IP Lookup 工具获得github.com和github.global.ssl.fastly.net域名的ip地址 2:/etc/hosts文件中添加如下格式(IP最好自己查一...

whoisliang ⋅ 46分钟前 ⋅ 0

非阻塞同步之 CAS

为解决线程安全问题,互斥同步相当于以时间换空间。多线程情况下,只有一个线程可以访问同步代码。这种同步也叫阻塞同步(Blocking Synchronization). 这种同步属于一种悲观并发策略。认为只...

长安一梦 ⋅ 57分钟前 ⋅ 0

云计算的选择悖论如何对待?

人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云计算为...

linux-tao ⋅ 59分钟前 ⋅ 0

Redis 注册为 Windows 服务

Redis 注册为 Windows 服务 redis 注册为 windows 服务相关命令 注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 启动服务 re......

Os_yxguang ⋅ 今天 ⋅ 0

世界那么大,语言那么多,为什么选择Micropython,它的优势在哪?

最近国内MicroPython风靡程序界,是什么原因导致它这么火呢?是因为他功能强大,遵循Mit协议开源么? 错!因为使用它真的是太舒服了!!! Micropython的由来,这得益于Damien George这位伟大...

bodasisiter ⋅ 今天 ⋅ 0

docker 清理总结

杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器(docker rm没有加-f参数,运行中的容器不会删掉) docker rm $(docker ps -a -q) 删除所有未打 dangling 标...

vvx1024 ⋅ 今天 ⋅ 0

关于学习

以前学车的时候,教练说了这样的一句话:如果一个人坐在车上一直学,一直学,反而不如大家轮流着学。因为一个人一直学,就没有给自己留空间来反思和改进。而轮流着学的时候大家下来之后思考上...

mskk ⋅ 今天 ⋅ 0

压缩工具之gzip-bzip2-xz

win下常见压缩工具:rar zip 7z linux下常见压缩工具:zip gz bz2 xz tar.gz tar.bz2 tar.xz gzip 不支持目录压缩 gzip 1.txt #压缩。执行后1.txt消失,生成1.txt.gz压缩文件 gzip -d 1.txt....

ZHENG-JY ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部