专业的JAVA编程教程与资源

网站首页 > java教程 正文

java调用PageOffice生成word(java pagebean)

temp10 2024-11-05 11:50:17 java教程 12 ℃ 0 评论

最近公司做一个项目,需要动态生成word文档。如是在网上找一点资料,,然而在这边方便又有很多资料,一时间不知道选择哪个适合我这个项目了,网上有jacob、poi、java2word、itext。jacob要求服务器必须是windows操作系统,服务器上还必须安装office软件,果断放弃!poi需要针对doc和docx两种格式写不同的代码,增加了程序的复杂度。java2doc 是对 jacob 的封装,同样放弃!最后选定了用itext来导出word,网上一些资料说itext导出word功能太简单,通过试用之后,封装工具类,使用起来确实挺方便,但是导出的word文档在细节方面很难达到要求,比如:字体、行距、字体间距、首行缩进等。

由于itext导出的word有各种各样的小问题,只能另找其他的解决方案,经过一个朋友推荐,可用PageOffice组件来导出word,其效果能与用户需求的word文档达到完美的一致,而且编程接口简单,调用很方便。总的来说就是制作模板(用PO_开头的书签作为数据占位符),然后编程调用PageOffice接口用真实数据替换模板中的占位符,最后生成word。下面看例子:

java调用PageOffice生成word(java pagebean)

1. 制作模板

打开word模板插入书签:PO_Dept、PO_Name、PO_Cause、PO_Num、PO_Date,如下图所示

2. 编写代码

调用PageOffice接口,给word模板填充数据生成word文档:

// 声明变量存储从数据库中读取的数据

String docName = "", docDept = "", docCause = "", docNum = "", docDate = "";

// 数据库数据读取操作(不同的数据库用不同的代码)

ResultSet rs = stmt.executeQuery("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.setServerPage(request.getContextPath()+"/poserver.zz"); //此行必须

//获取数据对象

poCtrl1.setWriter(doc);

// 打开文档

poCtrl1.webOpen("doc/template.doc", OpenModeType.docReadOnly, "Tom");

3. 生成效果图

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表