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。开始写代码:
- 主要代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
1 public class WordTest { 2 3 private Configuration configuration = null ; 4 5 public WordTest(){ 6 configuration = new Configuration(); 7 configuration.setDefaultEncoding( "UTF-8" ); 8 } 9 10 public static void main(String[] args) { 11 WordTest test = new WordTest(); 12 test.createWord(); 13 } 14 15 public void createWord(){ 16 Map<String,Object> dataMap= new HashMap<String,Object>(); 17 getData(dataMap); 18 configuration.setClassForTemplateLoading( this .getClass(), "" ); //模板文件所在路径 19 Template t= null ; 20 try { 21 t = configuration.getTemplate( "测试.ftl" ); //获取模板文件 22 } catch (IOException e) { 23 e.printStackTrace(); 24 } 25 File outFile = new File( "D:/outFile" +Math.random()* 10000 + ".doc" ); //导出文件 26 Writer out = null ; 27 try { 28 out = new BufferedWriter( new OutputStreamWriter( new FileOutputStream(outFile))); 29 } catch (FileNotFoundException e1) { 30 e1.printStackTrace(); 31 } 32 33 try { 34 t.process(dataMap, out); //将填充数据填入模板文件并输出到目标文件 35 } catch (TemplateException e) { 36 e.printStackTrace(); 37 } catch (IOException e) { 38 e.printStackTrace(); 39 } 40 } 41 42 private void getData(Map<String, Object> dataMap) { 43 dataMap.put( "title" , "标题" ); 44 dataMap.put( "nian" , "2016" ); 45 dataMap.put( "yue" , "3" ); 46 dataMap.put( "ri" , "6" ); 47 dataMap.put( "shenheren" , "lc" ); 48 49 List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); 50 for ( int i = 0 ; i < 10 ; i++) { 51 Map<String,Object> map = new HashMap<String,Object>(); 52 map.put( "xuehao" , i); 53 map.put( "neirong" , "内容" +i); 54 list.add(map); 55 } 56 57 58 dataMap.put( "list" , list); 59 } 60 } |
修改.ftl文件,找到列表所在位置,将其要加入的列表加入到文件中。在列表前加入<#list list as l>(在它的头上加一个<#list 你的集合名称 as xxxx>),并在结尾加上</#list>。修改list内容,在要输出的名字前面加上l.。如xuehao,修改为l.xuehao。这样有点像EL表达式的使用。
java导出word的6种方式(转发)的更多相关文章
- java导出word的6种方式(复制来的文章)
来自: http://www.cnblogs.com/lcngu/p/5247179.html 最近做的项目,需要将一些信息导出到word中.在网上找了好多解决方案,现在将这几天的总结分享一下. 目前 ...
- [转载]java导出word的5种方式
在网上找了好多天将数据库中信息导出到word中的解决方案,现在将这几天的总结分享一下.总的来说,java导出word大致有5种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Ja ...
- [原创]java导出word的5种方式
在网上找了好多天将数据库中信息导出到word中的解决方案,现在将这几天的总结分享一下.总的来说,java导出word大致有5种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Ja ...
- 【吉光片羽】MVC 导出Word的两种方式
1.直接将Html转成Word.MVC自带FileResult很好用.Html中我们也可以嵌入自己的样式. html: <div id="target"> <st ...
- JAVA生成word的几种方法对比
首先介绍几种java导出word方案 1.Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过JNI的方式实现 ...
- 对Java代码加密的两种方式,防止反编译
使用Virbox Protector对Java项目加密有两种方式,一种是对War包加密,一种是对Jar包加密.Virbox Protector支持这两种文件格式加密,可以加密用于解析class文件的j ...
- Java中创建对象的几种方式
Java中创建对象的五种方式: 作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字.使用Cl ...
- java产生随机数的几种方式
java产生随机数的几种方式 一.在j2se里我们可以使用Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double,我们可以把他乘以一定的数,比如说乘以100,他 ...
- Java读写文件的几种方式
自工作以后好久没有整理Java的基础知识了.趁有时间,整理一下Java文件操作的几种方式.无论哪种编程语言,文件读写操作时避免不了的一件事情,Java也不例外.Java读写文件一般是通过字节.字符和行 ...
随机推荐
- 上百例Silverlight网站及演示汇总,供友参考
毁灭2012 博客园 首页 新闻 新随笔 联系 管理 订阅 随笔- 125 文章- 0 评论- 446 上百例Silverlight网站及演示汇总,供友参考 今天我将发现的Silverlig ...
- POJ2069 最小球覆盖 几何法和退火法
对这种问题不熟悉的读者 可以先去看一看最小圆覆盖的问题 ZOJ1450 现在我们来看最小球覆盖问题POJ2069 题目很裸,给30个点 求能覆盖所有点的最小球的半径. 先给出以下几个事实: 1.对于一 ...
- POJ2503 Babelfish map或者hash_map
POJ2503 这是一道水题,用Map轻松AC. 不过,可以拿来测一下字符串散列, 毕竟,很多情况下map无法解决的映射问题需要用到字符串散列. 自己生成一个质数, 随便搞一下. #include&l ...
- nodejs实现验证码
http://www.9958.pw/post/nodejs_lesson http://www.9958.pw/post/nodejscapp
- v-contextmenu的使用(右键菜单)
先来个自己改写的图: 代码: 结构:<div class="wrap" v-contextmenu:contextmenu> <v-contextmenu ref ...
- Wannafly挑战赛29A御坂美琴
传送门 这套题很有意思2333 蠢了--首先先判总共加起来等不等于\(n\),不是的话就不行 然后dfs记录\(n\)不断分下去能分成哪些数,用map记录一下,判断是否所有数都能被分出来就是了 //m ...
- javascript检测基本类型值或引用类型值的类型方法
首先javascript的数据类型分为两种数据类型:基本数据数据类型和引用数据类型 基本数据类型:Number,String,Boolean,Undefined,Null.原始值,是简单的数据段,可按 ...
- git分支的理解
分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...
- JavaScript编程艺术-第8章-8.6.1-显示“缩略词语表”
8.6.1-显示“缩略词语表” ***代码亲测可用*** HTML: JS: ***end***
- MongoDB Built-In Roles(内置角色)
1. 数据库用户角色:read.readWrite; 2. 数据库管理角色:dbAdmin.dbOwner.userAdmin: 3. 集群管理角色:clusterAdmin.clusterManag ...