java导出生成word(类似简历导出)

最近做的项目,需要将一些信息导出到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表达式的使用。

 

参考帖子:

http://www.cnblogs.com/lcngu/p/5247179.html

http://www.cnblogs.com/splvxh/archive/2013/03/15/2960757.html

http://blog.csdn.net/lun379292733/article/details/18673081  生成普通的word文档

http://www.ahlinux.com/java/10228.html  插入图片

http://www.oschina.net/question/1860506_160921

 

 

转载于:https://www.cnblogs.com/abc8023/p/5607254.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271574.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机基础:存储系统知识笔记(一)

1、存储系统定义 由一个不同容量、成本和访问时间的存储结构构成的层次结构&#xff0c;这些存储器通过适当的硬件和软件有机的组合在一起。 存储器的层次&#xff1a;CPU内部的寄存器、高速缓存Cache、主存储器、辅助存储器 2、存储器的分类 2.1 存储位置分类 内存&#xff1a…

ae绘图未指定错误怎么办_早晨深化设计研究院47个快捷键50个CAD技巧助你神速绘图,玩转CAD...

终于知道为什么别人用CAD总比我快了&#xff0c;原来他们早就掌握了这些实用的CAD技巧&#xff0c;还没看完我就默默地转了&#xff0c;总有用得到的时候。一、47个快捷键1. 创建直线的快捷方式是L空格2. 创建圆的快捷方式是C空格3. 创建圆弧的快捷方式是A空格4. 创建矩形的快捷…

计算机基础:存储系统知识笔记(二)

1、高速缓存 1.1 定义 用来存放当前最活跃的程序和数据。 特点&#xff1a;容量在几千字节到几兆之间&#xff0c;速度比主存快5~10倍左右。快速半导体组成。 1.2 高速缓存的组成 一般位于CPU和主存之间。主要包括管理模块、由相联存储器构成的存储表、小容量的高速存储器。 1.…

2020html5开发工具,2020web前端学习路线

原标题&#xff1a;2020web前端学习路线2020年最新web前端学习路线&#xff01;接下来&#xff0c;教大家如何从零基础小白学习web前端&#xff0c;没有基础的伙伴也不要着急&#xff0c;有给大家整理视频教程&#xff0c;文末&#xff0c;大家按需学习就好&#xff01;一、入门…

layuiajax提交表单控制层代码_漏洞预警|ThinkPHP 5.0 远程代码执行

漏洞预警|ThinkPHP 5.0 远程代码执行2019-01-11事件来源2019年1月11日&#xff0c;ThinkPHP Github仓库发布了新的版本v5.0.24&#xff0c;包含重要的安全更新&#xff0c;山石安服团队经过分析把该漏洞危险级别定为严重。漏洞描述ThinkPHP是一个快速、兼容而且简单的轻量级国产…

计算机基础:存储系统知识笔记(三)

1、相联存储器 1、相联存储器介绍 属于按内容访问的存储器。 原理&#xff1a;把数据或数据某一独立单元作为关键字&#xff0c;用该关键字和存储器的每个存储单元比较&#xff0c;相同则表示找到对应的存储单元。 2、相联存储器的组成部件 1、输入检索寄存器&#xff1a;存放要…

事业单位考试题库计算机网络,2015年事业单位计算机基础知识试题及答案

2015年事业单位计算机基础知识试题及答案一、单选题1、根据报文交换的基本原理&#xff0c;可以将其交换系统的功能概括为A)存储系统 B)转发系统C)存储-转发系统 D) 传输-控制系统2、TCP/IP网络类型中&#xff0c;提供端到端的通信的是A)应用层 B) 传输层C)网络层 D)网络接口层…

list 排序_十个必知的排序算法|Python实例系列

十大排序:1.冒泡排序2.选择排序3.插入排序4.希尔排序5.归并排序6.快速排序7.堆排序8.计数排序9.桶排序10.基数排序完整代码和注释如下# -*- coding: UTF-8 -*-#Space: https://github.com/Tri-x/exercise#Space: https://space.bilibili.com/187492698#Author: Trix#Descriptio…

MySQL的安装及使用教程

MySQL的安装及使用教程 一、 MySQL的下载及安装 首先登陆MySQL的官网&#xff0c;选择Downloads→Windows→MySQL Installer→Windows(x86,32-bit),MSI Installer 在安装的时候&#xff0c;可能要下载 .net Framework&#xff0c;直接下载就行&#xff0c;接着一步一步安装就可…

提高国内访问GitHub速度的9种方案~

GitHub 镜像访问GitHub文件加速Github 加速下载加速你的 Github谷歌浏览器 GitHub 加速插件(推荐)GitHub raw 加速GitHub Jsdelivr通过 Gitee 中转 fork 仓库下载通过修改 HOSTS 文件进行加速为什么 github 下载速度这么慢&#xff1f;如何提高 github 的下载速度&#xff1f;…

python数据可视化源码_Python数据分析:基于Plotly的动态可视化绘图 随书源码[101MB]...

随着信息技术的发展和硬件设备成本的降低&#xff0c;当今的互联网存在海量的数据&#xff0c;要想快速从这些数据中获取更多有效的信息&#xff0c;数据可视化是重要的一环。对于Python语言来说&#xff0c;比较传统的数据可视化模块是Matplotlib&#xff0c;但它存在不够美观…

JS中原型链的理解

在谈原型链之前&#xff0c;我们首先要了解自定义函数与 Function 之间是什么关系&#xff0c;而构造函数、原型和实例之间又存在什么千丝万缕的关系呢&#xff1f;其实&#xff0c;所有的函数都是 Function 的实例。在构造函数上都有一个原型属性 prototype&#xff0c;该属性…

计算机系统基础:总线结构知识笔记

1、总线定义 计算机和设备之间传输信息的公共数据通道&#xff0c;是连接计算机硬件内多种设备的通信线路。它实现了总线上所有设备共享。 2、总线的分类 2.1 数据总线&#xff08;DB&#xff09; 用来传递数据信息&#xff0c;双向的。数据总线的宽度决定了CPU和计算机奇特设备…

linux python开发环境_如何在Linux系统中搭建Python编程环境

1 在大多数的Linux系统中&#xff0c;基本上都默认安装了Python&#xff0c;也就是说&#xff0c;在Linux的系统中基本上是不需要安装什么软件&#xff0c;就可以使用Python。 下面以ubuntu操作系统为例&#xff0c;看看如何在Linux操作系统中搭建Python编程环境。2 检查Ubuntu…

当你的电脑C盘满了怎么办?这两种方法都能解决

用了好几年的电脑&#xff0c;在分区的时候C盘空间分的太小&#xff1b;有的喜欢把下载的软件、工作时的文件都放在桌面上方便自己使用&#xff1b;有的安装软件的时候不选择安装目录或一些软件必须要安装在C盘&#xff0c;这样你的C盘的空间就会变得不够&#xff0c;今天分享下…

一个html有几个css,几个CSS的黑科技_html/css_WEB-ITnose

原文出处&#xff1a; JellyBool(JellyBool) 欢迎分享原创到伯乐头条昨天由于某些原因没有写博客&#xff0c;之前说好的每天一篇的&#xff0c;这篇是为了补昨天的了。然后我就要当一次标题党了。这里的黑科技其实就是一些CSS中不怎么为人所知但在解决某些问题的时候很溜的属性…

python递归函数讲解_带你深入学习Python——Python递归详解!

一、递归 递归:在调用一个函数的过程中&#xff0c;直接或间接地调用了函数本身这个就叫递归 注&#xff1a;Python在递归中没有像别的语言对递归进行优化&#xff0c;所以他的每一次调用都会基于上一次的调用进行&#xff0c;并且他设置了最大的递归数量防止递归外溢 递归调用…

51nod 1040最大公约数和(欧拉函数)

1040 最大公约数之和题目来源&#xff1a; rihkddd基准时间限制&#xff1a;1 秒 空间限制&#xff1a;131072 KB 分值: 80 难度&#xff1a;5级算法题收藏关注给出一个n&#xff0c;求1-n这n个数&#xff0c;同n的最大公约数的和。比如&#xff1a;n 61,2,3,4,5,6 同6的最大公…

计算机安全基础:加密技术知识笔记

1、加密技术介绍 加密技术是最常用的数据安全保密的手段&#xff0c;加密技术的关键在于加密/解密算法和密钥管理。 数据加密的过程&#xff1a;对明文文件或数据按照某种算法进行处理&#xff0c;变成密文。密文需要根据相应的密钥才能获得原来的明文信息&#xff0c;通过这种…

JAVA 获取格林威治时间(GMT)

记录下获取GMT时间的方法&#xff1a; //格式可根据需要自定义&#xff0c;如yyyy-MM-dd HH:mm:ss 等等 SimpleDateFormat sdf new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss GMT", Locale.US); Calendar calendar Calendar.getInstance(); sdf.setTimeZone(Tim…