文章转载自: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种解决方案相关推荐

  1. 【Java用法】使用Java导出word文档的解决方案(适用于从服务器上下载到本地电脑)

    本文目录 一.Controller 二.Service 接口类 三.ServiceImpl 实现类 四.Content-Type 类型与MIME Type类型对照表 最近在做一个word导出功能,需求 ...

  2. 【Java用法】使用Java导出word文档的解决方案(适用于Windows电脑)

    目录 实现方式一.通过原生的POI 实现方式二.通过Hutool工具包 步骤1.添加pom依赖 步骤2.编写几行代码 步骤3.启动项目,大功告成 实现的效果 最近在做一个word导出功能,需求非常简单 ...

  3. java导出word的几种方式

    目前来看,java导出word大致有6种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过J ...

  4. java_导出_word_[转载]java导出word的5种方式

    在网上找了好多天将数据库中信息导出到word中的解决方案,现在将这几天的总结分享一下.总的来说,java导出word大致有5种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Ja ...

  5. java 桥 word_java导出word的6种方式(转发)

    最近做的项目,需要将一些信息导出到word中.在网上找了好多解决方案,现在将这几天的总结分享一下. 目前来看,java导出word大致有6种解决方案: 1:Jacob是Java-COM Bridge的 ...

  6. java导出word纸张方向_java导出word的几种方式

    目前来看,java导出word大致有6种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过J ...

  7. 导出Word的两种方式

    导出Word有两种方式,分别是前端和后端 这两种方式在实际开发中根据实际需要会选择不同的方式 方式对比: 前端导出: 优点:简单,快捷,对于样式的设定也比较方便 缺陷:只可以导出本页展示的数据,导出的 ...

  8. java导出word文件损坏_记录一次POI导出word文件的细节问题

    首先百科一下POI是什么: Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能.通过字面意思,我们大概知 ...

  9. Java导出word 图片重复

    Java导出word 需要的库 <dependency><groupId>org.freemarker</groupId><artifactId>fre ...

最新文章

  1. 带哨兵的冒泡排序_冒泡排序的优化以及快排过程及优化
  2. 浅析Postgres中的并发控制(Concurrency Control)与事务特性(上)
  3. 关于string,我今天科普的
  4. 【BZOJ 3831】【Poi2014】Little Bird(单调队列优化dp)
  5. c语言用链表对学生成绩排序,学生成绩排序和平均分计算利用c语言链表的创建插入删除.doc...
  6. opencv5-图像混合
  7. 帝国CMS仿写朵朵云棋牌游戏官网源码
  8. [Office一般性操作] 关闭Outlook重定向
  9. 异常值检测 —— MAD(median absolute deviation)
  10. 10个Mac电脑使用技巧
  11. 软件工程 第四章 概要设计
  12. 基于Java的在线购书系统
  13. EasyClick Html UI 第十四节 CSS 盒子模型
  14. 迪尼斯神奇英语全32集含教材
  15. 软件工程实践寒假作业
  16. 从现在开始,格外珍惜时间,让生活充实起来
  17. 小公司网络游戏可能出现的运维事故
  18. HTML九宫格-表格面板
  19. 蓝牙5.2协议、主从一体、低功耗、工业级蓝牙模组BLE105新品上市
  20. 【Python常微分方程】

热门文章

  1. Hive导出MySQL中文乱码问题
  2. ikbc f108键盘灯光设置
  3. photoshop2020入门笔记(三)——磨皮
  4. 联合证券|战略新兴产业火了,高增长低估值股曝光
  5. 雪鹰领主服务器维护,《雪鹰领主》7月11日停机维护更新公告
  6. 算法原理系列:木桶排序
  7. 2018.12.3日 COURSE_INDEX,FOOTER,INDEX,BODY代码记录DJANGO
  8. win10 + Qt5.14.0(mingw73_64) 下的 OpenCV4.5.1源码编译 注意事项
  9. 静态代理和动态代理案例介绍
  10. WebUI自动化测试框架搭建(三)-环境部署