目前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 ...
最新文章
- WPF Effect 造成的字体模糊
- mysql使用数据库预处理_php中对MYSQL操作之预处理技术(2)数据库dql查询语句
- linux 开启新端口号,linux 查看端口,开启新端口
- 一天教会三岁表弟HTML,你值得拥有
- Python format() 函数
- jquery获得下拉框的值
- 2015 湘潭大学程序设计比赛(Internet)--D题-最小的数
- ios app被自己从应用商店下架后可以再恢復上架吗
- python 批量重命名文件_Python批量重命名文件的方法
- 实用的 Python —— 快速进行相关计算
- 自动阅卷的原理很简单的,用python来简单解释一下工作原理❤
- 大M单纯形算法的MATLAB实现
- TRNSYS与MATLAB联合仿真
- request.getParameter、request.getParameterValues、request.getParameterMap用法详解
- 刨根究底字符编码之八——Unicode编码方案概述
- 团队管理:需求之殇——两个凡是
- Mac下使用Automator实现截屏编辑保存
- 高版本Android真机逆向测试环境搭建
- 大数至简,带您实现“数据自由”,炎凰数据免费社区版产品正式发布
- -XX:CMSInitiatingOccupancyFraction
热门文章
- 9种炫酷loading加载cssjs特效
- 招聘 | 小米-数据挖掘工程师-实习生-北京
- python双引号打不出来_python为什么会打不出单引号
- OMAP3630 Linux I2C总线驱动分析(1)
- 纯JS解决内嵌iframe全屏(兼容IE/火狐/谷歌)
- Python编程 数值类型 数学计算
- Android中的状态保存-SharedPreferences和Bundle(文末小彩蛋)
- vim编辑器的工作模式
- 教室预约微信小程序,教室预约小程序,教室预约系统小程序毕业设计作品
- 产业共融新势能,城链科技数字峰会厦门站成功举办