AddTocToDocx.cs
C# VB
//// This code is part of Document Solutions for Word demos.// Copyright (c) MESCIUS inc. All rights reserved.//using System.IO;using System.Linq;using System.Globalization;using GrapeCity.Documents.Word;using GrapeCity.Documents.Word.Fields;
namespace DsWordWeb.Demos{ // This sample shows how to insert a TOC (Table of Contents) field // into an existing DOCX Word document. public class AddTocToDocx { public GcWordDocument CreateDocx() { // Load an existing Word document that contains some heading paragraphs into a GcWordDocument: var doc = new GcWordDocument(); doc.Load(Path.Combine("Resources", "WordDocs", "JsFrameworkExcerpt.docx"));
// Create a TocFieldOptions instance that will be used to insert a TOC field // into the loaded document. The TOC will be updated to show the document's // Table of Contents based on heading paragraphs present in the original document: var tocOpts = new TocFieldOptions(doc); // Specify TOC options as needed: tocOpts.EntryFormatting.CreateHyperlink = true;
// The original document starts with the title page, followed by // content with the first paragraph having the PageBreakBefore style on. // Knowing that, we want to insert the TOC between the title page // and the content that follows, so we look for the first paragraph // with PageBreakBefore on, and insert the TOC before it: var fo = new FindOptions(doc); fo.FormattingOptions.ParagraphFormat.PageBreakBefore = true; // Empty search pattern because we're looking for a style regardless of text: var find = doc.Body.Find("", fo).FirstOrDefault(); Paragraph para; if (find != null) { // We found the point between the title page and the content: para = find.Range.ParentParagraph.GetRange().Paragraphs.Insert("Table of Contents", doc.Styles[BuiltInStyleId.TocHeading], InsertLocation.Before); para = para.GetRange().Paragraphs.Insert(InsertLocation.After); } else { // Otherwise, just insert the TOC at the beginning of the document: para = doc.Body.Paragraphs.Insert("Table of Contents", doc.Styles[BuiltInStyleId.TocHeading], InsertLocation.Start); }
// Add the TOC field with our options, and update it so that it shows the actual document contents: para.AddComplexField(tocOpts).Update(new GrapeCity.Documents.Word.Layout.WordLayoutSettings() { FontCollection = Util.FontCollection, Culture = CultureInfo.GetCultureInfo("en-US") });
// Done: return doc; } }}