请问生成的目录页面布局有问题,详情如下

原始文档:
cshi .docx (28.4 KB)

代码:

Document document = new Document("D:\\Users\\Desktop\\cshi .docx");
for (Section section : document.getSections())
{
    PageSetup pageSetup = section.getPageSetup();
    pageSetup.setHeaderDistance(42.55);
    pageSetup.setFooterDistance(49.6);
    pageSetup.setTopMargin(72.0);
    pageSetup.setBottomMargin(72.0);
    pageSetup.setLeftMargin(89.85);
    pageSetup.setRightMargin(89.85);
}
Paragraph firstParagraph = document.getFirstSection().getBody().getFirstParagraph();
DocumentBuilder builder = new DocumentBuilder(document);
builder.moveTo(firstParagraph);
builder.insertTableOfContents("TOC \\o\"1-3\"\\h \\z \\u");
document.updateFields();

document.save("D:\\Users\\实例文档\\aa.docx");

最后生成的文档:
aa.docx (25.3 KB)

为什么布局跑出右边界外了呢?

@ouchli 在您的代码中,您更新了页面设置,但没有更新目录样式。需要在目录样式中调整标签位置。请参阅以下代码:

Document doc = new Document("C:\\Temp\\in.docx");

for (Section section : doc.getSections())
{
    PageSetup pageSetup = section.getPageSetup();
    pageSetup.setHeaderDistance(42.55);
    pageSetup.setFooterDistance(49.6);
    pageSetup.setTopMargin(72.0);
    pageSetup.setBottomMargin(72.0);
    pageSetup.setLeftMargin(89.85);
    pageSetup.setRightMargin(89.85);
}

// update tab position in the TOC1 style
PageSetup ps = doc.getFirstSection().getPageSetup();
Style toc1 = doc.getStyles().getByStyleIdentifier(StyleIdentifier.TOC_1);
toc1.getParagraphFormat().getTabStops().clear();
toc1.getParagraphFormat().getTabStops().add(ps.getPageWidth() - ps.getLeftMargin() - ps.getRightMargin(), TabAlignment.RIGHT, TabLeader.DOTS);

Paragraph firstParagraph = doc.getFirstSection().getBody().getFirstParagraph();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.moveTo(firstParagraph);
builder.insertTableOfContents("TOC \\o\"1-3\"\\h \\z \\u");
doc.updateFields();

doc.save("C:\\Temp\\out.docx");

out.docx (25.3 KB)

请问 StyleIdentifier.TOC_1 TOC_2 TOC_3 。。。
有什么区别呢?

@ouchli TOC_1 ... TOC_9 样式定义了不同级别的目录格式。您的情况只有一个级别,因此在代码示例中,只有 TOC_1 样式被修改。