如何通过java在docx中创建具有不同样式的三个TOC?

时间:2017-10-15 20:48:07

标签: java apache-poi docx docx4j aspose

如何在docx文件中创建三个或更多TOC,其中一个用于标题级别1,2,3,而其他TOC用于由程序创建的另一个样式?例如,我为表标题创建了一个样式,我想为这个样式的段落创建一个TOC。 我希望这些TOC位于文件末尾的特殊段落中。

哪一个更好,Apache-poi? docx4j?的Aspose?

我用apache-poi编写了我的其他代码。

1 个答案:

答案 0 :(得分:0)

使用Aspose.Words for Java,您可以使用insertTableOfContents()方法和必需的开关参数在Word文档中添加TOC字段。您可以根据需要添加任意数量的TOC字段。以下代码添加了三个不同样式的TOC字段。

指定开关的最简单方法是使用Insert-> Reference-> Index and Tables菜单在Word文档中插入和配置目录,然后切换字段代码的显示以查看开关。您可以在Microsoft Word中按Alt + F9以打开或关闭字段代码的显示。

例如,在创建目录后,将在文档中插入以下字段:{TOC \ o" 1-3" \ h \ z \ u}。你可以复制\ o" 1-3" \ h \ z \ u并将其用作开关参数。

请注意insertTableOfContents方法只添加TOC字段,要填充TOC字段,您需要在代码中调用updateFields()方法或在MS Word中按F9。

// Use a blank document
com.aspose.words.Document doc = new com.aspose.words.Document();

// Create a document builder to insert content with into document.
DocumentBuilder builder = new DocumentBuilder(doc);

// Insert a table of contents at the beginning of the document.
//TOC for Heading 1,2 and 3 styles
builder.insertTableOfContents("\\o \"1-3\" \\h \\z \\u");
//TOC for specific style e.g. Heading 2
builder.insertTableOfContents("\\h \\z \\t \"Heading 2,1\"");
//TOC for specific style e.g. Heading 3
builder.insertTableOfContents("\\h \\z \\t \"Heading 3,1\"");


// Start the actual document content on the second page.
builder.insertBreak(BreakType.PAGE_BREAK);

// Build a document with complex structure by applying different heading styles thus creating TOC entries.
builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_1);

builder.writeln("Heading 1");

builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_2);

builder.writeln("Heading 1.1");
builder.writeln("Heading 1.2");

builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_1);

builder.writeln("Heading 2");
builder.writeln("Heading 3");

builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_2);

builder.writeln("Heading 3.1");

builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_3);

builder.writeln("Heading 3.1.1");
builder.writeln("Heading 3.1.2");
builder.writeln("Heading 3.1.3");

builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_2);

builder.writeln("Heading 3.2");
builder.writeln("Heading 3.3");

// Call the method below to update the TOC.
doc.updateFields();
doc.save("Sample_out_1710.docx");

我与Aspose一起担任开发人员Evangelist。