使用 Apache POI 将带有偏移量的页码添加到 docx

Add page number with offset to docx using Apache POI

我正在使用 Apache POI 生成 docx 文档。使用以下代码,我可以将自动生成的数字添加到页脚:

private void createDocFooter(XWPFDocument docx) {

    XWPFFooter footer = docx.createFooter(HeaderFooterType.DEFAULT);

    XWPFParagraph paragraph = footer.getParagraphArray(0);
    if (paragraph == null) {
        paragraph = footer.createParagraph();
    }

    paragraph.setAlignment(ParagraphAlignment.CENTER);

    paragraph.getCTP().addNewFldSimple().setInstr("PAGE");
}

问题是它总是从 1 开始。如何为该指令提供偏移量以从例如开始编号? 5?

页码起始值在节属性中设置。如果只有一个节,那么这是文档正文的节属性。

Apache POI 不提供任何方法来在其高级 类 中设置部分属性。因此需要使用 ooxml.

的底层低水平 类

以下方法应该可以满足您的要求。它将页码类型的开始设置为 start.

中给定的页面
 private void setPageNumberStart(XWPFDocument doc, java.math.BigInteger start) {
  if(doc.getDocument().getBody().isSetSectPr()) {
   if (doc.getDocument().getBody().getSectPr().isSetPgNumType()) {
    doc.getDocument().getBody().getSectPr().getPgNumType().setStart(start);
   } else {
    doc.getDocument().getBody().getSectPr().addNewPgNumType().setStart(start);
   }
  } else {
   doc.getDocument().getBody().addNewSectPr().addNewPgNumType().setStart(start);
  }  
 }

像这样调用时:

...
XWPFDocument doc = ...
...
setPageNumberStart(doc, java.math.BigInteger.valueOf(5));
...

它将页码类型的开始设置为第 5 页。