DEV Community

E-iceblue Product Family
E-iceblue Product Family

Posted on • Updated on

Create and Update Table of Contents (TOC) in Word in Java

A table of contents (TOC) provides a quick reference point for your document and gives the readers a brief overview of where to find what content.

In this article, we’re going to show you how to create and update Table of Contents (TOC) in a Word document within Java application using Free Spire.Doc for Java library.

The following example shows how to create a table of contents with default appearance that includes all text formatted with built-in styles Heading 1, Heading 2, Heading 3, and page numbers right-aligned with tab leaders.

import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.*;

import java.awt.*;

public class TableofContents {
    public static void main(String[] args){
        //instantiate a Document object
        Document doc = new Document();
        //add a section
        Section section = doc.addSection();

        //add a paragraph
        Paragraph para = section.addParagraph();
        TextRange tr = para.appendText("Table of Contents");
        //set font size and text color
        tr.getCharacterFormat().setFontSize(11);
        tr.getCharacterFormat().setTextColor(Color.blue);       
        //set the space after the paragraph
        para.getFormat().setAfterSpacing(10);

        //add a paragraph
        para = section.addParagraph();
        //add a table of contents with default appearance by specifying lower heading level and upper heading level. The heading level range must be from 1 to 9.
        para.appendTOC(1, 3);

        //add a new section
        section = doc.addSection();
        //add a paragraph
        para = section.addParagraph();
        para.appendText("Heading 1");
        //apply Heading 1 style to the paragraph
        para.applyStyle(BuiltinStyle.Heading_1);
        section.addParagraph();

        //add a paragraph
        para = section.addParagraph();
        para.appendText("Heading 2");
        //apply Heading 2 style to the paragraph
        para.applyStyle(BuiltinStyle.Heading_2);
        section.addParagraph();

        //add a paragraph
        para = section.addParagraph();
        para.appendText("Heading 3");
        //apply Heading 3 style to the paragraph
        para.applyStyle(BuiltinStyle.Heading_3);
        section.addParagraph();

        //update Table of Contents
        doc.updateTableOfContents();

        //save the resultant document
        doc.saveToFile("createTableOfContents.docx", FileFormat.Docx);
    }
}

Create Table of Contents

We can also create a custom table of contents and determine what entries to appear in the table of contents by using TOC switches.

Serial No. Switches Description
1 \o Builds a table of contents from paragraphs formatted with styles that include outline levels (most commonly, heading styles).
2 \t Builds a table of contents from paragraphs formatted with styles other than the built-in styles.
3 \u Builds a table of contents from paragraphs whose formatting includes outline levels applied directly, in paragraph settings.
4 \c Lists figures, tables, charts, or other items that are numbered by a SEQ (Sequence) field.
5 \a Lists items captioned with the Caption command (References > Insert Caption) but omits caption labels and numbers.
6 \f Builds a table from TC fields.
7 \l Builds a table of contents from TC fields that assign entries to one of the specified levels.
8 \b Collects entries only from the portion of the document marked by the specified bookmark.
9 \s Includes a number such as a chapter number before the page number.
10 \d When used with the \s switch, specifies the character that separates the sequence numbers and page numbers.
11 \p Specifies the character that separates an entry and its page number.
12 \n Omits page numbers from the table of contents.
13 \w Preserves tab entries within table entries.
14 \x Preserves manual line breaks within table entries.
15 \z Hides tab leader and page numbers in Web layout view.
16 \h Inserts TOC entries as hyperlinks.

For more information regarding TOC switches, check here.

The following example shows how to create a custom table of contents that includes all text formatted with built-in styles Heading 1, Heading 2 and Heading 3 but omits page numbers from heading levels 1-3.

import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.*;

import java.awt.*;

public class TableofContents {
    public static void main(String[] args){
        //instantiate a Document object
        Document doc = new Document();
        //add a section
        Section section = doc.addSection();

        //add a paragraph
        Paragraph para = section.addParagraph();
        TextRange tr = para.appendText("Table of Contents");
        //set font size and text color
        tr.getCharacterFormat().setFontSize(11);
        tr.getCharacterFormat().setTextColor(Color.blue);
        //set the space after the paragraph
        para.getFormat().setAfterSpacing(10);

        //create a custom table of contents that omits page numbers from heading levels 1-3.
        TableOfContent toc = new TableOfContent(doc, "{\\o \"1-3\" \\n 1-3}");
        para = section.addParagraph();
        para.getItems().add(toc);
        para.appendFieldMark(FieldMarkType.Field_Separator);
        para.appendText("TOC");
        para.appendFieldMark(FieldMarkType.Field_End);
        doc.setTOC(toc);

        //add a new section
        section = doc.addSection();
        //add a paragraph
        para = section.addParagraph();
        para.appendText("Heading 1");
        //apply Heading 1 style to the paragraph
        para.applyStyle(BuiltinStyle.Heading_1);
        section.addParagraph();

        //add a paragraph
        para = section.addParagraph();
        para.appendText("Heading 2");
        //apply Heading 2 style to the paragraph
        para.applyStyle(BuiltinStyle.Heading_2);
        section.addParagraph();

        //add a paragraph
        para = section.addParagraph();
        para.appendText("Heading 3");
        //apply Heading 3 style to the paragraph
        para.applyStyle(BuiltinStyle.Heading_3);
        section.addParagraph();

        //update Table of Contents
        doc.updateTableOfContents();

        //save the resultant document
        doc.saveToFile("customTableOfContents.docx", FileFormat.Docx);

    }
}

Custom Table of Contents

Top comments (0)