1、在开发OA办公或与文档相关的Web系统中,不免会遇到动态生成word文档的需求,为了解决工做中遇到导出word文档的需求,前一段时间上网找了一些资料,在word导出这方面有不少工具可使用,jacob、poi、java2word、itext。jacob要求服务器必须是windows操做系统,服务器上还必须安装office软件,果断放弃!poi须要针对doc和docx两种格式写不一样的代码,增长了程序的复杂度。java2doc 是对 jacob 的封装,一样放弃!最后选定了用itext来导出word,网上一些资料说itext导出word功能太简单,经过试用以后,封装工具类,使用起来确实挺方便,可是导出的word文档在细节方面很难达到要求,好比:字体、行距、字体间距、首行缩进等。java
2、因为itext导出的word有各类各样的小问题,只能另找其余的解决方案,通过一个朋友推荐,可用PageOffice组件来导出word,其效果能与用户需求的word文档达到完美的一致,并且编程接口简单,调用很方便。总的来讲就是制做模板(用PO_开头的书签做为数据占位符),而后编程调用PageOffice接口用真实数据替换模板中的占位符,最后生成word。下面看例子:web
1. 制做模板数据库
打开word模板插入书签:PO_Dept、PO_Name、PO_Cause、PO_Num、PO_Date,以下图所示编程
2. 编写代码windows
调用PageOffice接口,给word模板填充数据生成word文档:服务器
1 // 声明变量存储从数据库中读取的数据 2 String docName = "", docDept = "", docCause = "", docNum = "", docDate = ""; 3 // 数据库数据读取操做(不一样的数据库用不一样的代码) 4 ResultSet rs = stmt.executeQuery("select * from leaveRecord where ID = " + id); 5 if (rs.next()) { 6 docName = rs.getString("Name"); 7 docDept = rs.getString("Dept"); 8 docCause = rs.getString("Cause"); 9 docNum = rs.getString("Num"); 10 docDate = rs.getString("SubmitTime"); 11 } 12 rs.close(); 13 //建立PageOffice的WordDocument对象,操做Word文件 14 WordDocument doc = new WordDocument(); 15 doc.openDataRegion("PO_name").setValue(docName); 16 doc.openDataRegion("PO_dept").setValue(docDept); 17 doc.openDataRegion("PO_cause").setValue(docCause); 18 doc.openDataRegion("PO_num").setValue(docNum); 19 doc.openDataRegion("PO_date").setValue(docDate); 20 //建立PageOfficeCtrl对象打开文件 21 PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request); 22 poCtrl1.setServerPage(request.getContextPath()+"/poserver.zz"); //此行必须 23 //获取数据对象 24 poCtrl1.setWriter(doc); 25 // 打开文档 26 poCtrl1.webOpen("doc/template.doc", OpenModeType.docReadOnly, "Tom");
3. 生成效果图工具
3、 源码下载字体
https://download.csdn.net/download/zi_wu_xian/10399345操作系统