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 つしかありません (ドキュメント内に存在するリスト項目の数は 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
したがって、基本的には、私が持っているスタイルを使用する方法を理解しようとしていますが、ドキュメント内のさまざまな場所でページ番号を付け直しています. 誰かがこれがどのように機能するかのサンプルを提供できますか?