使用Apache POI为docx添加带偏移量的页码实现问题咨询
Apache POI 生成docx文档设置页码起始值解决方案
你遇到的问题根源是Word的页码起始值属于节属性配置,不是通过修改PAGE域参数实现的,只需要给文档对应节添加页码起始值配置即可,修改后的代码如下:
import java.math.BigInteger; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPageNumber; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr; import org.apache.poi.xwpf.usermodel.*; import org.apache.poi.wp.usermodel.HeaderFooterType; private void createDocFooter(XWPFDocument docx, int startPageNum) { // 1. 设置当前节的页码起始值 CTSectPr sectPr = docx.getDocument().getBody().isSetSectPr() ? docx.getDocument().getBody().getSectPr() : docx.getDocument().getBody().addNewSectPr(); CTPageNumber pgNum = sectPr.isSetPgNumType() ? sectPr.getPgNumType() : sectPr.addNewPgNumType(); // 配置自定义起始页码 pgNum.setStart(BigInteger.valueOf(startPageNum)); // 2. 原有页脚插入PAGE域逻辑保持不变 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"); }
说明
- 调用方法时直接传入目标起始值即可,例如要从第5页开始计数,调用方式为
createDocFooter(docx, 5) - 如果你的文档存在多个分节,需要给每个需要自定义起始页码的节单独设置对应
CTSectPr的pgNumType.start属性,每个节可独立配置页码规则
内容的提问来源于stack exchange,提问作者anlar
相关产品推荐
相关产品推荐

