//
// This code is part of Document Solutions for Word demos.
// Copyright (c) MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using System.Collections.Generic;
using System.Linq;
using System.Globalization;
using GrapeCity.Documents.Word;
using GrapeCity.Documents.Word.Fields;
namespace DsWordWeb.Demos
{
// This sample shows how to add a TOC (Table of Contents) to a Word document,
// and specify its options.
public class TocFieldOpts
{
public GcWordDocument CreateDocx()
{
var doc = new GcWordDocument();
// The TocFieldOptions class provides a convenient strong-typed access
// to tocOpts specific to the 'TOC' MS Word field.
var tocOpts = new TocFieldOptions(doc);
tocOpts.EntryFormatting.CreateHyperlink = true;
// build TOC with paragraphs that formatted only 'Heading 1' or 'Heading 2' or 'Heading 3' styles
foreach (TocStyleLevel style in tocOpts.Styles)
{
switch (style.Level)
{
case OutlineLevel.Level1:
case OutlineLevel.Level2:
case OutlineLevel.Level3:
style.Collect = true;
break;
default:
style.Collect = false;
break;
}
}
// Add TOC and a section break to the document:
var toc = doc.Body.Paragraphs.Add().AddComplexField(tocOpts);
doc.Body.Paragraphs.Last().AddSectionBreak();
// Create random content with 3 levels of headers:
var rnd = Util.NewRandom();
for (int i = 0; i < rnd.Next(2, 4); i++)
{
var p = doc.Body.AddParagraph($"This is top-level header {i + 1}", doc.Styles[BuiltInStyleId.Heading1]);
var par = Util.LoremIpsumPar();
doc.Body.AddParagraph(par);
for (int j = 0; j < rnd.Next(3, 5); j++)
{
p = doc.Body.AddParagraph($"This is second-level header {j + 1}", doc.Styles[BuiltInStyleId.Heading2]);
par = Util.LoremIpsumPar();
doc.Body.AddParagraph(par);
for (int k = 0; k < rnd.Next(2, 3); k++)
{
p = doc.Body.AddParagraph($"This is third-level header {k + 1}", doc.Styles[BuiltInStyleId.Heading3]);
par = Util.LoremIpsumPar();
doc.Body.AddParagraph(par);
}
}
}
// For reference add a simple page header with page number to the document:
var phdr = doc.Body.Sections.First.Headers[HeaderFooterType.Primary].Body.AddParagraph(doc.Styles[BuiltInStyleId.Closing]);
phdr.AddComplexField(new PageFieldOptions(doc) { NumberFormat = "'Page '0" });
// Update fields using a specific culture:
doc.UpdateFields(new GrapeCity.Documents.Word.Layout.WordLayoutSettings() { FontCollection = Util.FontCollection, Culture = CultureInfo.GetCultureInfo("en-US") });
// Done:
return doc;
}
}
}