首页 > 基础资料 博客日记
Java Apache POI 生成Word文件的页码
2024-03-13 04:00:07基础资料围观337次
这篇文章介绍了Java Apache POI 生成Word文件的页码,分享给大家做个参考,收藏Java资料网收获更多编程知识
1、引用Apache POI
使用Apache POI操作Word文件,需要在项目中包含了Apache POI的依赖。如使用Maven,可以在pom.xml文件中添加以下依赖,如下,
<dependencies> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> </dependencies>
2、使用Apache POI生成页码
参考文档:Java Apache POI 生成Word文件的页码-CJavaPy
使用Apache POI在Word文档的页脚中添加页码,代码如下,
try (XWPFDocument document = new XWPFDocument()) { // 创建一个段落 XWPFParagraph paragraphMain = document.createParagraph(); XWPFRun runMain = paragraphMain.createRun(); runMain.setText("Sample paragraph text."); // 创建页脚并添加页码 //设置XWPFFooter类型脚标对象 XWPFFooter footer = document.createFooter(HeaderFooterType.DEFAULT);//创建一个新的XWPFFooter对象 XWPFParagraph paragraph = footer.createParagraph();//创建新的XWPFParagraph对象 paragraph.setAlignment(ParagraphAlignment.CENTER);//设置样式居中 //设置段落对象 XWPFRun runPre = paragraph.createRun();//新的段落对象 runPre.setText("- "); //setXWPFRunStyle(runPre,"宋体",14); XWPFRun run = paragraph.createRun();//新的段落对象 CTFldChar fldChar = run.getCTR().addNewFldChar();//新的CTFldChar对象 fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); CTText ctText = run.getCTR().addNewInstrText(); ctText.setStringValue("PAGE \\* MERGEFORMAT"); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); //setXWPFRunStyle(run,"宋体",14); fldChar = run.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); //设置段落对象 XWPFRun runSuf = paragraph.createRun();//新的段落对象 runSuf.setText(" -"); //setXWPFRunStyle(runSuf,"宋体",14); // 将页脚添加到所有的页面 XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy(document); headerFooterPolicy.createFooter(STHdrFtr.DEFAULT, new XWPFParagraph[]{paragraph}); // 保存文档 try (FileOutputStream out = new FileOutputStream("WordWithPageNumbers.docx")) { document.write(out); } } catch (IOException e) { e.printStackTrace(); }
3、设置页脚的字体样式
Word中生成的页码的页脚样式如需要调整,可以参考代码如下,
/** * 设置页脚的字体样式 * @param xr 段落元素 * @param font 段落元素 * @param fontSize 的大小 */ static void setXWPFRunStyle(XWPFRun xr, String font, int fontSize) { sr.setFontSize(fontSize); CTRPr rpr = xr.getCTR().isSetRPr() ? xr.getCTR().getRPr() : xr.getCTR().addNewRPr(); CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii(font); fonts.setEastAsia(font); fonts.setHAnsi(font); }
4、奇偶页格式
如奇数和偶数页的样式不同,可以先设置所有面的页码样式,之后在设置偶数页的样式。
1)设置所有页码
设置所有页码靠左显示。
XWPFFooter footer = document.createFooter(HeaderFooterType.DEFAULT);//创建一个新的XWPFFooter对象,HeaderFooterType.DEFAULT表示所有页 XWPFParagraph paragraph = footer.createParagraph();//创建新的XWPFParagraph对象 paragraph.setAlignment(ParagraphAlignment.LEFT);//设置页码靠左 //设置段落对象 XWPFRun runPre = paragraph.createRun();//新的段落对象 runPre.setText("- "); //setXWPFRunStyle(runPre,"宋体",14); XWPFRun run = paragraph.createRun();//新的段落对象 CTFldChar fldChar = run.getCTR().addNewFldChar();//新的CTFldChar对象 fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); CTText ctText = run.getCTR().addNewInstrText(); ctText.setStringValue("PAGE \\* MERGEFORMAT"); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); //setXWPFRunStyle(run,"宋体",14); fldChar = run.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); //设置段落对象 XWPFRun runSuf = paragraph.createRun();//新的段落对象 runSuf.setText(" -");
2)设置偶数页码
设置偶数的页码靠右显示。
XWPFFooter footer = document.createFooter(HeaderFooterType.EVEN);//创建一个新的XWPFFooter对象,HeaderFooterType.EVEN 表示偶数页 XWPFParagraph paragraph = footer.createParagraph();//创建新的XWPFParagraph对象 paragraph.setAlignment(ParagraphAlignment.RIGHT);//设置页码靠右 //设置段落对象 XWPFRun runPre = paragraph.createRun();//新的段落对象 runPre.setText("- "); //setXWPFRunStyle(runPre,"宋体",14); XWPFRun run = paragraph.createRun();//新的段落对象 CTFldChar fldChar = run.getCTR().addNewFldChar();//新的CTFldChar对象 fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); CTText ctText = run.getCTR().addNewInstrText(); ctText.setStringValue("PAGE \\* MERGEFORMAT"); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); //setXWPFRunStyle(run,"宋体",14); fldChar = run.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); //设置段落对象 XWPFRun runSuf = paragraph.createRun();//新的段落对象 runSuf.setText(" -");
5、页码和总页数
如显示页码时,需要添加总页数的显示。
参考文档:Java Apache POI 生成Word文件的页码-CJavaPy
文章来源:https://blog.csdn.net/weixin_42098295/article/details/135575890
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: