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…

html5和c3属性,H5与C3不得不说的知识点

1 HTML 5html5包含htm5 css3 javascript1.1 新增语义标签头部导航栏块级内容侧边栏脚部注意&#xff1a;可以多次使用&#xff1b;ie9中需要转换为块级元素&#xff1b;针对搜索引擎&#xff1b;针对于移动端&#xff1b;1.2 新增多媒体标签1.2.1 音频标签 audio格式&#xf…

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

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

iOS项目架构 小谈

层级结构,自底向上 持久层(File,Realm,SQLite)<>网络层(相信每个公司都有自己的网络层吧)>业务层(ViewModel)>展示层(View,VC) 持久层 耦合到网络层 设计要点 持久模型的选择&#xff0c;我这里选择了文件&#xff0c;直接缓存了JSON.txt。并且维护一张表映射到文件…

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

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

spu和sku区别

SPU(Standard Product Unit) 标准化产品单元 SPU是能够描述一个产品的单元&#xff0c;比如说&#xff0c;iPhone8就是一个SPU&#xff0c;与商家、颜色、款式、套餐无关。 SKU(Stock Keeping Unit) 库存量单元 SKU是用来定价和管理库存的&#xff0c;比如说&#xff0c;iPhon…

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是一个快速、兼容而且简单的轻量级国产…

oracle sql日期比较

oracle sql日期比较: 在当前时间之前: select * from up_date where update < to_date(2007-09-07 00:00:00,yyyy-mm-dd hh24:mi:ss) select * from up_date where update < to_date(2007-09-07 00:00:00,yyyy-mm-dd hh24:mi:ss)在当前时间只后: select * from up_date w…

微信商户平台结算周期T+1是什么意思

我们在商户平台的管理后台&#xff0c;有的时候&#xff0c;用户支付了&#xff0c;可是却没有看到有资金信息&#xff0c;这个一般是因为您的账户类似的T1的原因。那结算周期T1是什么意思呢&#xff1f; 通俗的理解就是&#xff1a;交易日的次日。 T就是today &#xff08;今天…

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

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;接着一步一步安装就可…

小程序提供几种结算周期? T+1是什么意思?

小程序提供4种固定的阶梯周期选择:T1、T7、T14、T28;其中T代表“Today”&#xff0c;今天的收入会在1(第2天)后自 动结算至银行卡上。

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

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

计算机术语翻译在线,计算机术语翻译

小编为大家整理了计算机术语翻译&#xff0c;希望对你有帮助哦!计算机术语翻译&#xff1a;so-dimm(small outline dual in-line memory modules&#xff0c;小型双重内嵌式内存模块)spd(serial presence detect&#xff0c;串行存在检查)sram(static random access memory&…

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

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

JS中原型链的理解

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

返利是什么意思

就是将钱返给你。 按消费金额的10%返利&#xff1a; 如果你消费1000元&#xff0c;返给你100010%100元&#xff1b;