我正在尝试使用 Apache POI XWPF 库在 Word docx 文件中生成报告。
我的方法是使用现有的 Word 文档作为样式模板。在模板中,我定义了一个名为“SRINumberList”的样式。
因此,要加载模板并删除不在页眉或页脚中的所有内容:
protected void createDocFromTemplate() {
try {
document = new XWPFDocument(this.getClass().getResourceAsStream(styleTemplate));
int pos = document.getBodyElements().size()-1;
while (pos >= 0) {
IBodyElement element = document.getBodyElements().get(pos);
if (!EnumSet.of(BodyType.HEADER, BodyType.FOOTER).contains(element.getPartType())) {
boolean success = document.removeBodyElement(pos);
logger.log(Level.INFO, "Removed body element "+pos+": "+success);
}
pos--;
}
} catch (IOException e) {
logger.log(Level.WARNING, "Not able to load style template", e);
document = new XWPFDocument();
}
}
现在在我的文档中有几个不同的部分包含一个编号列表。每个都应该从 1 重新开始编号。这是我这样做的典型方式:
if (itemStem.getItems().size() > 0) {
p = document.createParagraph();
p.setStyle(ParaStyle.StemAndItemTitle.styleId);
final BigInteger bulletNum = newBulletNumber();
run = p.createRun();
run.setText("Sub Items");
itemStem.getItems().stream().forEach(item -> {
XWPFParagraph p2 = document.createParagraph();
p2.setStyle(ParaStyle.NumberList.styleId);
XWPFRun run2 = p2.createRun();
run2.setText(item.getSubItemText());
});
p = document.createParagraph();
p.createRun();
}
因此,这正确应用了包含数字格式的样式,但只有一个序列(1 ... 到文档中存在的许多列表项)。例如:
Heading 1
1. item a
2. item b
3. item c
Heading 2
4. item a
5. item d
6. item g
但我想要的是:
Heading 1
1. item a
2. item b
3. item c
Heading 2
1. item a
2. item d
3. item g
所以基本上我想弄清楚如何使用我拥有的样式,但重新开始对文档中的各个位置进行页码编号。有人可以提供一个如何工作的样本吗?