java调用PageOffice生成word

一、在开发OA办公或与文档相关的Web系统中,难免会遇到动态生成word文档的需求,为了解决工作中遇到导出word文档的需求,前一段时间上网找了一些资料,在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。下面看例子:

  1. 制作模板

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

  java调用PageOffice生成word

  1. 编写代码

  调用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");
复制代码

  1. 生成效果图

  java调用PageOffice生成word

  

三、 ×××

  https://download.csdn.net/download/zi_wu_xian/10399345

转载于:https://blog.51cto.com/11430719/2113925

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,可以使用Apache POI库来生成Word图片水印。具体步骤如下: 1. 创建一个Word文档 2. 用addPicture将图片添加到文档中 3. 创建一个文本段落,并设置文本样式 4. 创建一个文字水印,将文本段落设置为水印 5. 将水印添加到文档中 您可以参考以下代码: ```java import java.io.FileOutputStream; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.xwpf.usermodel.XWPFPicture; import org.apache.poi.xwpf.usermodel.XWPFPictureData; import org.apache.poi.xwpf.usermodel.XWPFPictureFormat; import org.apache.poi.xwpf.usermodel.XWPFPictureRun; import org.apache.xmlbeans.XmlException; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTextCharacterProperties; public class WordWaterMark { public static void main(String[] args) throws Exception { String imagePath = "watermark.png"; String text = "Draft"; // create a new document XWPFDocument doc = new XWPFDocument(); // add picture to the document XWPFPictureData pictureData = doc.addPictureData(new FileInputStream(imagePath), XWPFPictureFormat.PNG); XWPFPicture picture = doc.createPicture(pictureData, doc.getNextPicNameNumber(XWPFPicture.SIGNATURE_PICT_TYPE), 1000, 1000); // set position and size of the picture XWPFPictureRun pictureRun = (XWPFPictureRun) picture.getParagraph().createRun(); pictureRun.addPicture(pictureData); pictureRun.getCTR().getTxbx().addNewTxbxContent().addNewP().addNewR().addNewT().setStringValue(""); pictureRun.getCTR().getTxbx().addNewTxbxContent().addNewPict().set(picture.getCTPicture()); // create a paragraph for the watermark text XWPFParagraph waterMarkParagraph = doc.createParagraph(); waterMarkParagraph.setSpacingBefore(0); waterMarkParagraph.setSpacingAfter(0); waterMarkParagraph.setSpacingBetween(1.5); // create a run for the watermark text XWPFRun run = waterMarkParagraph.createRun(); run.setText(text); // set font and color for the watermark text CTR ct = run.getCTR(); CTText textElement = ct.getTArray(0); CTTextCharacterProperties textProps = textElement.addNewRPr(); textProps.setSz(STMUtils.pt2dxa(48)); textProps.setColor("999999"); textProps.setShadow(null); // create a watermark CTR cTR = CTR.Factory.parse( "<w:p xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:wx=\"http://schemas.microsoft.com/office/word/2003/auxHint\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:schemas-microsoft-com:vml\" mc:Ignorable=\"w14 w15 wx\" w:rsidR=\"00A81A2C\" w:rsidRPr=\"00A81A2C\">" + "<w:pPr>" + "<w:pStyle w:val=\"NoSpacing\"/>" + "<w:rPr>" + "<w:b/>" + "<wx:font wx:val=\"Cambria\"/>" + "<w:color w:val=\"auto\"/>" + "<w:sz w:val=\"20\"/>" + "<w:szCs w:val=\"20\"/>" + "</w:rPr>" + "</w:pPr>" + "<w:r>" + "<w:rPr>" + "<w:b/>" + "<wx:font wx:val=\"Cambria\"/>" + "<w:color w:val=\"auto\"/>" + "<w:sz w:val=\"20\"/>" + "<w:szCs w:val=\"20\"/>" + "</w:rPr>" + "<w:t xml:space=\"preserve\">" + text + "</w:t>" + "</w:r>" + "</w:p>"); XWPFParagraph waterMark = new XWPFParagraph(cTR, doc); waterMark.setAlignment(ParagraphAlignment.CENTER); waterMark.setVerticalAlignment(TextAlignment.CENTER); // set watermark as background of each page for (XWPFParagraph paragraph : doc.getParagraphs()) { for (XWPFRun r : paragraph.getRuns()) { r.getCTR().getTArray(0).insertNewRPr(0).addNewNoProof(); } } doc.addParagraph(waterMark); // write the document to a file FileOutputStream out = new FileOutputStream("watermark.docx"); doc.write(out); out.close(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值