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 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表达式的使用。

时间: 2024-11-06 23:05:00

java导出word的6种方式(复制来的文章)的相关文章

[原创]java导出word的5种方式

在网上找了好多天将数据库中信息导出到word中的解决方案,现在将这几天的总结分享一下.总的来说,java导出word大致有5种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.通过Jacob实现了在Java平台上对微软Office的COM接口进行调用. 优点:调用微软Office的COM接口,生成的word文件格式规范. 缺点:服务器只能是windows平台,不支持unix和linux,且服务器上必须安装微软Office. 2:Ap

【吉光片羽】MVC 导出Word的两种方式

1.直接将Html转成Word.MVC自带FileResult很好用.Html中我们也可以嵌入自己的样式. html: <div id="target"> <style> table{border-collapse: collapse;border: 1px solid black;} td{border: 1px royalblue solid} </style> <img src="../../Content/eman_sm.pn

Java基础知识强化之IO流笔记30:字节流4种方式复制mp4并测试效率

1. 需求:把e:\\哥有老婆.mp4 复制到当前项目目录下的copy.mp4中 字节流四种方式复制文件: • 基本字节流一次读写一个字节 • 基本字节流一次读写一个字节数组 • 高效字节流一次读写一个字节 • 高效字节流一次读写一个字节数组 2. 代码示例: 1 package cn.itcast_06; 2 3 import java.io.BufferedInputStream; 4 import java.io.BufferedOutputStream; 5 import java.io

javaIO流之字节流的四种方式复制文件方式总结

/* * 需求:把e:\\a.mp4复制到当前项目目录下的copy.mp4中 * * 字节流四种方式复制文件: * 基本字节流一次读写一个字节: 共耗时:117235毫秒 * 基本字节流一次读写一个字节数组: 共耗时:156毫秒 * 高效字节流一次读写一个字节: 共耗时:1141毫秒 * 高效字节流一次读写一个字节数组: 共耗时:47毫秒 */ package cn.itcast_06; import java.io.BufferedInputStream; import java.io.Buf

对Java代码加密的两种方式,防止反编译

使用Virbox Protector对Java项目加密有两种方式,一种是对War包加密,一种是对Jar包加密.Virbox Protector支持这两种文件格式加密,可以加密用于解析class文件的java.exe,并且可以实现项目源码绑定制定设备,防止部署到客户服务器的项目被整体拷贝. 两种加密方式 War 包加密 当你的项目在没有完成竣工的时候,不适合使用 war 文件,因为你的类会由于调试之类的经常改,这样来回删除.创建 war 文件很不爽,最好是你的项目已经完成了,不改了,那么就打个 w

Java创建Timestamp的几种方式

1.java创建Timestamp的几种方式 Timestamp time1 = new Timestamp(System.currentTimeMillis()); Timestamp time2 = new Timestamp(new Date().getTime()); Timestamp time3 = new Timestamp(Calendar.getInstance().getTimeInMillis()); //不建议使用 Timestamp time4 = new Timest

Java中创建对象的几种方式

Java中创建对象的五种方式: 作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字.使用Class类的newInstance方法.使用Constructor类的newInstance方法.使用Clone方法.使用反序列化. 使用new关键字:这是我们最常见的也是最简单的创建对象的方式,通过这种方式我们还可以调用任意的够赞函数(无参的和有参的).比如:Student student = ne

Java读写文件的几种方式

自工作以后好久没有整理Java的基础知识了.趁有时间,整理一下Java文件操作的几种方式.无论哪种编程语言,文件读写操作时避免不了的一件事情,Java也不例外.Java读写文件一般是通过字节.字符和行三种方式来进行文件的操作. import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.F

java产生随机数的几种方式

java产生随机数的几种方式 一.在j2se里我们可以使用Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double,我们可以把他乘以一定的数,比如说乘以100,他就是个100以内的随机,这个在j2me中没有. 二.在java.util这个包里面提供了一个Random的类,我们可以新建一个Random的对象来产生随机数,他可以产生随机整数.随机float.随机double,随机long,这个也是我们在j2me的程序里经常用的一个取随机数的方法. 三.在我们的S