poi设置页脚页码奇偶数不同展示

2020年10月11日13:12:30 2 13 2759字阅读9分11秒

最近遇到一个问题,就是导出word设置页脚的页码且奇偶数不同,效果如下。

poi设置页脚页码奇偶数不同展示

贴一下代码,记录一下。

  1. /**
  2.  * 创建页脚
  3.  *
  4.  * @param document doc对象
  5.  * @throws IOException
  6.  * @throws NoSuchFieldException
  7.  * @throws IllegalAccessException
  8.  */
  9. public static void createFooter(XWPFDocument document) throws IOException, NoSuchFieldException, IllegalAccessException {
  10.     Field _settings = XWPFDocument.class.getDeclaredField("settings");
  11.     _settings.setAccessible(true);
  12.     XWPFSettings xwpfsettings = (XWPFSettings) _settings.get(document);
  13.     Field _ctSettings = XWPFSettings.class.getDeclaredField("ctSettings");
  14.     _ctSettings.setAccessible(true);
  15.     org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSettings ctSettings =
  16.             (org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSettings) _ctSettings.get(xwpfsettings);
  17.     ctSettings.addNewEvenAndOddHeaders();
  18.     XWPFFooter footer = document.createFooter(HeaderFooterType.DEFAULT);
  19.     //奇数
  20.     XWPFParagraph paragraph = footer.createParagraph();
  21.     paragraph.setAlignment(ParagraphAlignment.RIGHT);
  22.     XWPFRun run;
  23.     run = paragraph.createRun();
  24.     run.setText("— ");
  25.     CTFldChar fldChar = run.getCTR().addNewFldChar();
  26.     fldChar.setFldCharType(STFldCharType.Enum.forString("begin"));
  27.     setXWPFRunStyle(run, "宋体"14);
  28.     CTText ctText = run.getCTR().addNewInstrText();
  29.     ctText.setStringValue("PAGE  \\* MERGEFORMAT");
  30.     ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve"));
  31.     setXWPFRunStyle(run, "宋体"14);
  32.     fldChar = run.getCTR().addNewFldChar();
  33.     fldChar.setFldCharType(STFldCharType.Enum.forString("end"));
  34.     run.setText(" —");
  35.     //偶数
  36.     XWPFParagraph paragraph1 = document.createFooter(HeaderFooterType.EVEN).createParagraph();
  37.     paragraph1.setAlignment(ParagraphAlignment.LEFT);
  38.     XWPFRun run1;
  39.     run1 = paragraph1.createRun();
  40.     run1.setText("— ");
  41.     CTFldChar fldChar1 = run1.getCTR().addNewFldChar();
  42.     fldChar1.setFldCharType(STFldCharType.Enum.forString("begin"));
  43.     setXWPFRunStyle(run1, "宋体"14);
  44.     CTText ctText1 = run1.getCTR().addNewInstrText();
  45.     ctText1.setStringValue("PAGE  \\* MERGEFORMAT");
  46.     ctText1.setSpace(SpaceAttribute.Space.Enum.forString("preserve"));
  47.     setXWPFRunStyle(run1, "宋体"14);
  48.     fldChar1 = run1.getCTR().addNewFldChar();
  49.     fldChar1.setFldCharType(STFldCharType.Enum.forString("end"));
  50.     run1.setText(" —");
  51. }
  52. /**
  53.  * 设置页脚的字体样式
  54.  *
  55.  * @param r1       段落元素
  56.  * @param font     字体
  57.  * @param fontSize 字体大小
  58.  */
  59. private static void setXWPFRunStyle(XWPFRun r1, String font, int fontSize) {
  60.     r1.setFontSize(fontSize);
  61.     CTRPr rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr();
  62.     CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts();
  63.     fonts.setAscii(font);
  64.     fonts.setEastAsia(font);
  65.     fonts.setHAnsi(font);
  66. }

参考文档:poi设置word奇偶页不同-segmentfault 

继续阅读
weinxin
微信公众号
博客微信公众号,欢迎关注。
avatar
  • 本文由 发表于 2020年10月11日13:12:30
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接。
稳定云服务器,香港VPS_美国VPS,高防服务器 硅云免费虚拟主机
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

评论:2   其中:访客  1   博主  1
    • avatar 珂泽 1

      自从用了markdown之后,很久没碰过word了

        • avatar 萧瑟

          @ 珂泽 我这个是工作中碰到的业务需求,做一个笔记简单记录一下,word平时就写写开发手册之类的。