gpt4 book ai didi

java - 如何在使用 Apache POI 和 java 创建的 .docx 上添加页码

转载 作者:行者123 更新时间:2023-12-02 10:59:46 25 4
gpt4 key购买 nike

我在这个网站上使用了一些建议,但我发现 NullPointerException在这一行:

policy.createFooter(XWPFHeaderFooterPolicy.DEFAULT, parsFooter);

最佳答案

这就是我在 POI 3.14 中创建页脚的方法。不过,3.15 以后可能需要进行一些更改。

public static XWPFFooter createFooter(XWPFDocument doc) {
XWPFFooter ftr;
XWPFHeaderFooterPolicy hfp = doc.createHeaderFooterPolicy();
try {
ftr = hfp.createFooter(XWPFHeaderFooterPolicy.DEFAULT);
} catch (IOException e) {
return null;
}
ftr.removeParagraph(0);
return ftr;
}

注意最后的removeParagraph(0)。 POI 目前创建带有空白段落的页眉和页脚(如果做得正确,则填充一些内容),但我喜欢创建页脚,然后添加段落。它简化了我的代码,不必以与其余部分不同的方式处理第一段。如果您在第一次创建页脚时同意存在空段落,那么您可以删除该行,但在后续版本中 POI 不会生成空段落。不确定何时进行更改,但我认为是 3.16 左右的某个时间。

仍然适用于 3.14:要向页脚添加页码,您需要放入 CT 类中以插入字段。我用一种新方法来做到这一点。注意:CT 类只是为了让您能够获得 POI 中未实现的功能,您不应该依赖它们来实现功能。

public static XWPFRun createSimpleField(XWPFParagraph p, String instr, String dft) {
CTP ctp = p.getCTP();
CTSimpleField field = ctp.addNewFldSimple();
field.setInstr(instr);
CTR r = field.addNewR();
CTText t = r.addNewT();
t.setStringValue(dft);
return new XWPFFieldRun(field, r, p);
}

现在把它们放在一起,假设这两个静态方法包含在 MyUtilClass 中,我们可以将页码添加到页脚,如下所示:

XWPFFooter ftr = MyUtilClass.createFooter(doc);
XWPFParagraph p = ftr.createParagraph();
XWPFRun r = p.createRun();
r.setText("Page ");
r = MyUtilClass.createSimpleField(p, "PAGE", "1");
r = p.createRun();
r.setText(" of ");
r = MyUtilClass.createSimpleField(p, "NUMPAGES", "1");

关于java - 如何在使用 Apache POI 和 java 创建的 .docx 上添加页码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51422109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com