How to: Create a Table of Contents in Code
- 5 minutes to read
This topic demonstrates how to create a table of contents of different types using the RichEdit API.
To create a TOC, perform the following steps.
-
To include the desired headings into the table of contents, mark the corresponding paragraphs as table entries.
-
The table of contents in RichEditControl is represented by the TOC field.
Mark the Entries
RichEditControl provides the following approaches to mark a document text (heading) to include it into the table of contents.
- Outline Levels
Set the outline level to paragraphs that should be included into the table of contents. To do that, use the Paragraph.OutlineLevel property as shown in the code sample below. Note that the maximum outline level is 9.
Note
A complete sample project is available at https://github.com/DevExpress-Examples/how-to-manually-create-a-table-of-contents-t488553.
richEditControl1.LoadDocument("Documents//Table of Contents.docx")
'Set the outline level to every chapter title in the document
For i As Integer = 0 To richEditControl1.Document.Paragraphs.Count - 1
Dim var As String = richEditControl1.Document.GetText(richEditControl1.Document.Paragraphs(i).Range)
If var.Contains("CHAPTER ") Then
richEditControl1.Document.Paragraphs(i).OutlineLevel = 2
End If
Next i
- Heading Styles
Create a new heading style or retrieve an existing one from the ParagraphStyleCollection collection (can be accessed through the Document.ParagraphStyles property) and apply it to the target paragraphs. For that, use the ParagraphProperties.Style property as shown in the following code snippet.
Note
A complete sample project is available at https://github.com/DevExpress-Examples/how-to-manually-create-a-table-of-contents-t488553.
richEditControl1.LoadDocument("Documents//Table of Contents.docx") 'Apply the "heading 1" style to every chapter title in the document For i As Integer = 0 To richEditControl1.Document.Paragraphs.Count - 1 Dim var As String = richEditControl1.Document.GetText(richEditControl1.Document.Paragraphs(i).Range) If var.Contains("CHAPTER ") Then richEditControl1.Document.Paragraphs(i).Style = richEditControl1.Document.ParagraphStyles("heading 1") End If Next i
- TC Fields
Insert a TC field at the beginning of the target paragraph. Type the caption in the field switch, and it will be reflected in the table of contents instead of the original title.
Note
A complete sample project is available at https://github.com/DevExpress-Examples/how-to-manually-create-a-table-of-contents-t488553.
richEditControl1.LoadDocument("Documents//Table of Contents.docx")
Dim j As Integer = 1
'Mark every chapter title in the document by the TC field
For i As Integer = 0 To richEditControl1.Document.Paragraphs.Count - 1
Dim var As String = richEditControl1.Document.GetText(richEditControl1.Document.Paragraphs(i).Range)
If var.Contains("CHAPTER ") Then
Dim field As Field = richEditControl1.Document.Fields.Create(richEditControl1.Document.Paragraphs(i).Range.Start, String.Format("TC {0} \f bvz ", j))
richEditControl1.Document.Fields.Update()
j += 1
End If
Next i
- SEQ Fields
Use these fields to mark the captions of document figures/tables/equations and include them into the corresponding table. Insert a caption into the target figure and mark it with the SEQ field as shown n the code snippet below.
Note
A complete sample project is available at https://github.com/DevExpress-Examples/how-to-manually-create-a-table-of-contents-t488553.
richEditControl1.LoadDocument("Documents//Table of Contents.docx")
document.BeginUpdate()
For i As Integer = 0 To document.Images.Count - 1
Dim shape As DocumentImage = document.Images(i)
Dim paragraph As Paragraph = document.Paragraphs.Insert(shape.Range.End)
'Insert caption to every image in the document
Dim range As DocumentRange = document.InsertText(paragraph.Range.Start, "Image ")
'Mark the captions with the SEQ fields
Dim field As Field = document.Fields.Create(range.End, "SEQ Image \*ARABIC")
Next i
document.Fields.Update()
document.EndUpdate()
2. Build the Table of Contents
Insert the TOC field with the corresponding switch into the desired position within the document using the following API.
Member | Description |
---|---|
Initialize the document modification. | |
Provides access to the target paragraph. | |
Inserts a field into the given position within the document. Depending on the selected approach, use one of the following field switches.
| |
Updates the given field. | |
Finalizes the document update. |
Tip
To insert all TOC entries as hyperlinks, use the \h switch. You can use other TOC field switches to modify any kind of TOC to fit your needs.
The code sample below inserts a TOC field into the given document position.
Note
A complete sample project is available at https://github.com/DevExpress-Examples/how-to-manually-create-a-table-of-contents-t488553.
Dim document As Document = richEditControl1.Document
document.BeginUpdate()
Dim paragraph As Paragraph = document.Paragraphs.Insert(document.Paragraphs(1).Range.Start)
'Insert the table of contents to the beginning of the document
document.InsertText(paragraph.Range.Start, "Table of Contents (Heading Styles) " & ControlChars.Cr)
Dim field As Field = document.Fields.Create(paragraph.Range.Start, "TOC \h ")
field.Update()
'Update all fields to apply changes
document.Fields.Update()
document.EndUpdate()