目前java导出word的6种解决方案
文章转载自:http://www.cnblogs.com/lcngu/p/5247179.html
最近做的项目,需要将一些信息导出到word中。在网上找了好多解决方案,现在将这几天的总结分享一下。
- 目前来看,java导出word大致有6种解决方案:
1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。DLL动态链接库的生成需要windows平台的支持。该方案只能在windows平台实现,是其局限性。
2:Apache POI包括一系列的API,它们可以操作基于MicroSoft OLE 2 Compound Document Format的各种格式文件,可以通过这些API在Java中读写Excel、Word等文件。他的excel处理很强大,对于word还局限于读取,目前只能实现一些简单文件的操作,不能设置样式。
3:Java2word是一个在java程序中调用 MS Office Word 文档的组件(类库)。该组件提供了一组简单的接口,以便java程序调用他的服务操作Word 文档。 这些服务包括: 打开文档、新建文档、查找文字、替换文字,插入文字、插入图片、插入表格,在书签处插入文字、插入图片、插入表格等。填充数据到表格中读取表格数据 ,1.1版增强的功能: 指定文本样式,指定表格样式。如此,则可动态排版word文档。是一种不错的解决方案。
4:iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。功能强大。
5:JSP输出样式,该方案实现简单,但是处理样式有点缺陷,简单的导出可以使用。
6:用XML做就很简单了。Word从2003开始支持XML格式,大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。
综合以上资料的参考,和网上的一些意见,最后我选择了,第6种用xml做导出方案。
- 下面是基本的例子,以实现简单的word导出:
要导出的word模板的内容,启动拼音部分为要在代码种替换的部分。
:
然后将word另存为.xml文件,打开文件,找到title将其修改为${title},后面要替换的内容依次替换掉。然后将.xml文件后缀改为.ftl,导入.ftl模板文件到指定目录。加载jar包freemarker.jar。开始写代码:
- 主要代码:
public class WordTest { private Configuration configuration = null; public WordTest(){ configuration = new Configuration(); configuration.setDefaultEncoding("UTF-8"); } public static void main(String[] args) { WordTest test = new WordTest(); test.createWord(); } public void createWord(){ Map<String,Object> dataMap=new HashMap<String,Object>(); getData(dataMap); configuration.setClassForTemplateLoading(this.getClass(), "");//模板文件所在路径 Template t=null; try { t = configuration.getTemplate("测试.ftl"); //获取模板文件 } catch (IOException e) { e.printStackTrace(); } File outFile = new File("D:/outFile"+Math.random()*10000+".doc"); //导出文件 Writer out = null; try { out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile))); } catch (FileNotFoundException e1) { e1.printStackTrace(); } try { t.process(dataMap, out); //将填充数据填入模板文件并输出到目标文件 } catch (TemplateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private void getData(Map<String, Object> dataMap) { dataMap.put("title", "标题"); dataMap.put("nian", "2016"); dataMap.put("yue", "3"); dataMap.put("ri", "6"); dataMap.put("shenheren", "lc"); List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); for (int i = 0; i < 10; i++) { Map<String,Object> map = new HashMap<String,Object>(); map.put("xuehao", i); map.put("neirong", "内容"+i); list.add(map); } dataMap.put("list", list); } }
修改.ftl文件,找到列表所在位置,将其要加入的列表加入到文件中。在列表前加入<#list list as l>(在它的头上加一个<#list 你的集合名称 as xxxx>),并在结尾加上</#list>。修改list内容,在要输出的名字前面加上l.。如xuehao,修改为l.xuehao。这样有点像EL表达式的使用。
一般使用导出word都是在页面操作,导出word时不输出指定的文件路径,将新的outFile使用HttpServletResponse提供的ServletOutputStream输出到浏览器即可。
目前java导出word的6种解决方案相关推荐
- 【Java用法】使用Java导出word文档的解决方案(适用于从服务器上下载到本地电脑)
本文目录 一.Controller 二.Service 接口类 三.ServiceImpl 实现类 四.Content-Type 类型与MIME Type类型对照表 最近在做一个word导出功能,需求 ...
- 【Java用法】使用Java导出word文档的解决方案(适用于Windows电脑)
目录 实现方式一.通过原生的POI 实现方式二.通过Hutool工具包 步骤1.添加pom依赖 步骤2.编写几行代码 步骤3.启动项目,大功告成 实现的效果 最近在做一个word导出功能,需求非常简单 ...
- java导出word的几种方式
目前来看,java导出word大致有6种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过J ...
- java_导出_word_[转载]java导出word的5种方式
在网上找了好多天将数据库中信息导出到word中的解决方案,现在将这几天的总结分享一下.总的来说,java导出word大致有5种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Ja ...
- java 桥 word_java导出word的6种方式(转发)
最近做的项目,需要将一些信息导出到word中.在网上找了好多解决方案,现在将这几天的总结分享一下. 目前来看,java导出word大致有6种解决方案: 1:Jacob是Java-COM Bridge的 ...
- java导出word纸张方向_java导出word的几种方式
目前来看,java导出word大致有6种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过J ...
- 导出Word的两种方式
导出Word有两种方式,分别是前端和后端 这两种方式在实际开发中根据实际需要会选择不同的方式 方式对比: 前端导出: 优点:简单,快捷,对于样式的设定也比较方便 缺陷:只可以导出本页展示的数据,导出的 ...
- java导出word文件损坏_记录一次POI导出word文件的细节问题
首先百科一下POI是什么: Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能.通过字面意思,我们大概知 ...
- Java导出word 图片重复
Java导出word 需要的库 <dependency><groupId>org.freemarker</groupId><artifactId>fre ...
最新文章
- 带哨兵的冒泡排序_冒泡排序的优化以及快排过程及优化
- 浅析Postgres中的并发控制(Concurrency Control)与事务特性(上)
- 关于string,我今天科普的
- 【BZOJ 3831】【Poi2014】Little Bird(单调队列优化dp)
- c语言用链表对学生成绩排序,学生成绩排序和平均分计算利用c语言链表的创建插入删除.doc...
- opencv5-图像混合
- 帝国CMS仿写朵朵云棋牌游戏官网源码
- [Office一般性操作] 关闭Outlook重定向
- 异常值检测 —— MAD(median absolute deviation)
- 10个Mac电脑使用技巧
- 软件工程 第四章 概要设计
- 基于Java的在线购书系统
- EasyClick Html UI 第十四节 CSS 盒子模型
- 迪尼斯神奇英语全32集含教材
- 软件工程实践寒假作业
- 从现在开始,格外珍惜时间,让生活充实起来
- 小公司网络游戏可能出现的运维事故
- HTML九宫格-表格面板
- 蓝牙5.2协议、主从一体、低功耗、工业级蓝牙模组BLE105新品上市
- 【Python常微分方程】
热门文章
- Hive导出MySQL中文乱码问题
- ikbc f108键盘灯光设置
- photoshop2020入门笔记(三)——磨皮
- 联合证券|战略新兴产业火了,高增长低估值股曝光
- 雪鹰领主服务器维护,《雪鹰领主》7月11日停机维护更新公告
- 算法原理系列:木桶排序
- 2018.12.3日 COURSE_INDEX,FOOTER,INDEX,BODY代码记录DJANGO
- win10 + Qt5.14.0(mingw73_64) 下的 OpenCV4.5.1源码编译 注意事项
- 静态代理和动态代理案例介绍
- WebUI自动化测试框架搭建(三)-环境部署