使用 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 页。
我正在使用 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 页。