javaword类型_[转载]java导出word的5种方式
javaword类型_[转载]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:Apache POI包括⼀系列的API,它们可以操作基于MicroSoft OLE 2 Compound Document Format的各种格式⽂件,可以通过这些API在Java中读写Excel、Word等⽂件。
刀郎新歌优点:跨平台⽀持windows、unix和linux。word打开是乱码
缺点:相对与对word⽂件的处理来说,POI更适合excel处理,对于word实现⼀些简单⽂件的操作凑合,不能设置样式且⽣成的word⽂件格式不够规范。
3:Java2word是⼀个在java程序中调⽤ MS Office Word ⽂档的组件(类库)。该组件提供了⼀组简单的接⼝,以便java程序调⽤他的服务操作Word ⽂档。 这些服务包括: 打开⽂档、新建⽂档、查⽂字、替换⽂字,插⼊⽂字、插⼊图⽚、插⼊表格,在书签处插⼊⽂字、插⼊图⽚、插⼊表格等。
最早的轮胎是什么颜
优点:⾜够简单,操作起来要⽐FreeMarker简单的多。
缺点:没有FreeMarker强⼤,不能够根据模版⽣成Word⽂档,word的⽂档的样式等信息都不能够很好的操作。
清明谚语4:FreeMarker⽣成word⽂档的功能是由XML+FreeMarker来实现的。先把word⽂件另存为xml,在xml⽂件中插⼊特殊的字符串占位符,将xml翻译为FreeMarker模板,最后⽤java来解析FreeMarker模板,编码调⽤FreeMarker实现⽂本替换并输出Doc。
优点:⽐Java2word功能强⼤,也是纯Java编程。
缺点:⽣成的⽂件本质上是xml,不是真正的word⽂件格式,有很多常⽤的word格式⽆法处理或表现怪异,⽐如:超链、换⾏、乱码、部分⽣成的⽂件打不开等。
5:PageOffice⽣成word⽂件。PageOffice封装了微软Office繁琐的vba接⼝,提供了简洁易⽤的Java编程对象,⽀持⽣成word⽂件,同时实现了在线编辑word⽂档和读取word⽂档内容。
优点:跨平台⽀持windows、unix和linux,⽣成word⽂件格式标准,⽀持⽂本、图⽚、表格、字体、段落、颜⾊、超链、页眉等各种格式的操作,⽀持多word合并,⽆需处理并发,不耗费服务器资源,运⾏稳定。
缺点:必须在客户端⽣成⽂件(可以不显⽰界⾯),不⽀持纯服务器端⽣成⽂件。
综合以上资料的参考,和⽹上的⼀些意见,最后选择了,第5种⽤PageOffice做导出⽅案。
下⾯是基本的例⼦,以实现简单的word导出:
羽毛球双打规则
读取数据库表中的信息记录填充到⼀个请假条的模板中,替换“部门、姓名、原因、天数、⽇期”⼏个数据位置的⽂本内容。
主要代码:
// 声明变量存储从数据库中读取的数据
String docName = "", docDept = "", docCause = "", docNum = "", docDate = "";
夏至吃什么传统美食
// 数据库数据读取操作(不同的数据库⽤不同的代码)
ResultSet rs = uteQuery("select * from leaveRecord where ID = " + id); if (rs.next()) {
docName = rs.getString("Name");
docDept = rs.getString("Dept");
docCause = rs.getString("Cause");
docNum = rs.getString("Num");
docDate = rs.getString("SubmitTime");
}
rs.close();
//创建PageOffice的WordDocument对象,操作Word⽂件
WordDocument doc = new WordDocument();
doc.openDataRegion("PO_name").setValue(docName);
doc.openDataRegion("PO_dept").setValue(docDept);
doc.openDataRegion("PO_cause").setValue(docCause);
doc.openDataRegion("PO_num").setValue(docNum);
doc.openDataRegion("PO_date").setValue(docDate);
//创建PageOfficeCtrl对象打开⽂件
PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request);
poCtrl1.ContextPath()+"/"); //此⾏必须//获取数据对象
poCtrl1.setWriter(doc);
// 打开⽂档
poCtrl1.webOpen("doc/template.doc", OpenModeType.docReadOnly, "Tom");
⽣成的⽂件效果:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。