builder.insertNode(new Run(document, "图"));
builder.insertField("STYLEREF \"customHeading_1\" \\s");
builder.insertNode(new Run(document, seperator));
builder.insertField("SEQ 图 \\* ARABIC \\s 1");
你好 我现在有这样的一段代码。我的章标题的样式是customHeading_1 ,是自定义的样式。我希望SEQ 图 \* ARABIC \s 1 这个代码可以在每一个章标题后自动重置为1,这样是正确的。但是现在是错误的。
请问我应该如何修改代码?或者我也可以不使用域代码, 只要可以实现我想要的功能就可以
@qhkyqhfe 您应该对每个部分使用不同的 SEQ 字段标识来重新开始编号。
例如:
{ SEQ firstSection \* ARABIC \s 1 }
{ SEQ secondSection \* ARABIC \s 1 }
{ SEQ thirdSection \* ARABIC \s 1 }
etc...
您好。我其实想使用多级列表实现这个功能。这样的话 我删除一个图题,后面的序号可以及时更新。比如我删除了一个名为 “图1.3 风景图” 这样的图题, 后面的“图1.4 美工图” 可以自动变成“图1.3 美工图”。这样应该如何实现呢
包括我需要生成一个插图和列表清单 这个如何使用TOC 将这个多级列表的内容添加到特定的地方
@qhkyqhfe 如果您想在这种情况下使用列表,则需要创建具有特定数字格式的新列表,并配置将用于创建 TOC 的基于标题样式。以下是如何实现这一功能的示例代码:
Document doc = new Document("input.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
List newList = doc.getLists().add(ListTemplate.NUMBER_DEFAULT);
newList.getListLevels().get(1).setNumberFormat("Figure \u0000.\u0001");
newList.getListLevels().get(1).setNumberStyle(NumberStyle.ARABIC);
newList.isRestartAtEachSection(true);
NodeCollection shapes = doc.getChildNodes(NodeType.SHAPE, true);
for (Shape shape : (Iterable<Shape>) shapes) {
if (shape.hasImage()) {
builder.moveTo(shape.getParentParagraph());
builder.insertParagraph();
builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_5);
builder.getListFormat().setList(newList);
builder.getListFormat().setListLevelNumber(1);
builder.write("Image name");
}
}
builder.moveToDocumentStart();
builder.insertTableOfContents("\\o \"5-5\" \\h \\z \\u");
doc.updateFields();
doc.save("output.docx");
另一种方法是使用 SEQ 字段:
Document doc = new Document("input.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
NodeCollection shapes = doc.getChildNodes(NodeType.SHAPE, true);
for (Shape shape : (Iterable<Shape>) shapes) {
if (shape.hasImage()) {
builder.moveTo(shape.getParentParagraph());
builder.insertParagraph();
builder.write("Figure: 1.");
builder.insertField("SEQ Section1 \\* ARABIC", "");
}
}
builder.moveToDocumentStart();
builder.insertTableOfContents("\\h \\z \\c \"Section1\"");
doc.updateFields();
doc.save("output.docx");
在这种情况下,您需要将 “Figure: 1. “和 ”SEQ Section1 “更改为 ”Figure: 2.“ 和 ”SEQ Section2”,等等。如果删除了 SEQ 字段中的一个,则需要更新文档中的字段以更新所有数字。