2017-10-15 116 views
0

如何在docx文件中創建三個或更多TOC,其中一個用於標題級別1,2,3等,另一個用於由程序創建的另一個樣式?例如,我爲表格標題創建了一個樣式,我想爲這個樣式的段落創建一個TOC。 我希望這些TOC在特殊段落中不在文件末尾。如何在java中由docx創建三種不同風格的TOC?

哪一個更好地做到這一點,Apache-poi? docx4j?閱讀Aspose?

我用apache-poi編寫我的其他代碼。

+0

您需要在TOC字段中指定樣式:http://webapp.docx4java.org/OnlineDemo/ecma376/WordML/TOC.html我想你可以用你提到的3個庫中的任何一個來做到這一點,但生成該領域的TOC可能會更難一些。你可以用docx4j做到這一點;請參閱https://github.com/plutext/docx4j/tree/master/src/samples/docx4j/org/docx4j/samples上的Toc *示例 – JasonPlutext

回答

0

使用Aspose.Words for Java,可以使用帶有所需開關參數的insertTableOfContents()方法在Word文檔中添加TOC字段。您可以根據需要添加儘可能多的TOC字段。以下代碼添加了三種不同風格的TOC字段。

指定開關的最簡單方法是使用插入 - >參考 - >索引和表格菜單插入和配置目錄到Word文檔,然後切換字段代碼的顯示以查看開關。您可以在Microsoft Word中按Alt + F9來打開或關閉字段代碼的顯示。

例如,創建目錄後,以下字段被插入到文檔中:{TOC \ o「1-3」\ h \ z \ u}。您可以複製\「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作爲開發人員傳播者。

相關問題