Files
docx-js/docs/usage/table-of-contents.md

5.5 KiB

Table of Contents

You can generate table of contents with docx. More information can be found here.

Tables of Contents are fields and, by design, it's content is only generated or updated by Word. We can't do it programatically. This is why, when you open a the file, Word you will prompt the message "This document contains fields that may refer to other files. Do you want to update the fields in this document?". You have say yes to Word generate the content of all table of contents.

The complete documentation can be found here (at Part 1, Page 1251).

How to

All you need to do is create a TableOfContents object and assign it to the document.

const toc = new TableOfContents("Summary", {
    hyperlink: true,
    headingStyleRange: "1-5",
    stylesWithLevels: [new StyleLevel("MySpectacularStyle", 1)]
});

doc.addTableOfContents(toc);

Table of Contents Options

Here is the list of all options that you can use to generate your tables of contents:

Option Type TOC Field Switch Description
captionLabel string \a Includes captioned items, but omits caption labels and numbers. The identifier designated by text in this switch's field-argument corresponds to the caption label. Use \c to build a table of captions with labels and numbers.
entriesFromBookmark string \b Includes entries only from the portion of the document marked by the bookmark named by text in this switch's field-argument.
captionLabelIncludingNumbers string \c Includes figures, tables, charts, and other items that are numbered by a SEQ field (§17.16.5.56). The sequence identifier designated by text in this switch's field-argument, which corresponds to the caption label, shall match the identifier in the corresponding SEQ field.
sequenceAndPageNumbersSeparator string \d When used with \s, the text in this switch's field-argument defines the separator between sequence and page numbers. The default separator is a hyphen (-).
tcFieldIdentifier string \f Includes only those TC fields whose identifier exactly matches the text in this switch's field-argument (which is typically a letter).
hyperlink boolean \h Makes the table of contents entries hyperlinks.
tcFieldLevelRange string \l Includes TC fields that assign entries to one of the levels specified by text in this switch's field-argument as a range having the form startLevel-endLevel, where startLevel and endLevel are integers, and startLevel has a value equal-to or less-than endLevel. TC fields that assign entries to lower levels are skipped.
pageNumbersEntryLevelsRange string \n Without field-argument, omits page numbers from the table of contents. Page numbers are omitted from all levels unless a range of entry levels is specified by text in this switch's field-argument. A range is specified as for \l.
headingStyleRange string \o Uses paragraphs formatted with all or the specified range of builtin heading styles. Headings in a style range are specified by text in this switch's field-argument using the notation specified as for \l, where each integer corresponds to the style with a style ID of HeadingX (e.g. 1 corresponds to Heading1). If no heading range is specified, all heading levels used in the document are listed.
entryAndPageNumberSeparator string \p text in this switch's field-argument specifies a sequence of characters that separate an entry and its page number. The default is a tab with leader dots.
seqFieldIdentifierForPrefix string \s For entries numbered with a SEQ field (§17.16.5.56), adds a prefix to the page number. The prefix depends on the type of entry. text in this switch's field-argument shall match the identifier in the SEQ field.
stylesWithLevels StyleLevel[] \t Uses paragraphs formatted with styles other than the built-in heading styles. text in this switch's field-argument specifies those styles as a set of comma-separated doublets, with each doublet being a comma-separated set of style name and table of content level. \t can be combined with \o.
useAppliedParagraphOutlineLevel boolean \u Uses the applied paragraph outline level.
preserveTabInEntries boolean \w Preserves tab entries within table entries.
preserveNewLineInEntries boolean \x Preserves newline characters within table entries.
hideTabAndPageNumbersInWebView boolean \z Hides tab leader and page numbers in web page view (§17.18.102).

Examples

// Let's define the options for generate a TOC for heading 1-5 and MySpectacularStyle,
// making the entries be hyperlinks for the paragraph
const toc = new TableOfContents("Summary", {
    hyperlink: true,
    headingStyleRange: "1-5",
    stylesWithLevels: [new StyleLevel("MySpectacularStyle", 1)]
});

doc.addTableOfContents(toc);

doc.add(new Paragraph("Header #1").heading1().pageBreakBefore());
doc.add(new Paragraph("I'm a little text, very nicely written.'"));

doc.add(new Paragraph("Header #2").heading1().pageBreakBefore());
doc.add(new Paragraph("I'm another text very nicely written.'"));
doc.add(new Paragraph("Header #2.1").heading2());
doc.add(new Paragraph("I'm another text very nicely written.'"));

doc.add(new Paragraph("My Spectacular Style #1").style("MySpectacularStyle").pageBreakBefore());

Complete example

Example

Source: https://github.com/dolanmiu/docx/blob/master/demo/demo28.ts