Здесь мы покажем Вам, как создать документ с правильно отформатированным оглавлением. В результате Вы увидите документ DOCX с TOC содержащий два Chapters и SubChapters.
с помощью SautinSoft.Document;
DocumentCore document = new DocumentCore();
DocumentCore является корневым классом, он представляет сам документ.
// Create and add Heading1 style. For "Chapter 1" and "Chapter 2".
ParagraphStyle Heading1Style = (ParagraphStyle)Style.CreateStyle(StyleTemplateType.Heading1, dc);
Heading1Style.ParagraphFormat.LineSpacing = 3;
Heading1Style.CharacterFormat.Size = 18;
// #358CCB - blue
Heading1Style.CharacterFormat.FontColor = new Color("#358CCB");
dc.Styles.Add(Heading1Style);
// Create and add Heading2 style. For "SupChapter 1-1" and "SubChapter 2-1".
ParagraphStyle Heading2Style = (ParagraphStyle)Style.CreateStyle(StyleTemplateType.Heading2, dc);
Heading2Style.ParagraphFormat.LineSpacing = 2;
Heading2Style.CharacterFormat.Size = 14;
// #FF9900 - orange
Heading2Style.CharacterFormat.FontColor = new Color("#FF9900");
dc.Styles.Add(Heading2Style);
// Create and add TOC style.
ParagraphStyle TOCStyle = (ParagraphStyle)Style.CreateStyle(StyleTemplateType.Subtitle, dc);
TOCStyle.ParagraphFormat.OutlineLevel = OutlineLevel.BodyText;
TOCStyle.ParagraphFormat.Alignment = HorizontalAlignment.Center;
TOCStyle.CharacterFormat.Bold = true;
// #358CCB - blue
TOCStyle.CharacterFormat.FontColor = new Color("#358CCB");
dc.Styles.Add(TOCStyle);
Стили заголовков Word называются Heading 1, Heading 2 и далее до Heading 9. Используйте их для идентификации различных частей документа, но они также используют преимущества других функций Word.В Word стиль - это набор инструкций по форматированию. Вы используете стили для форматирования абзацев в вашем документе. Таким образом, вы должны использовать стиль "Title" для своего заголовка, стиль "Body Text" для основного текста, стиль "Caption" для подписей к изображениям и "Heading 1" для основных заголовков.
// Add TOC Header.
section.Blocks.Add(
new Paragraph(dc, "Table of Contents")
{ParagraphFormat = {Style = TOCStyle}});
// Create and add TOC (Table of Contents).
section.Blocks.Add(new TableOfEntries(dc, FieldType.TOC));
// Add TOC Ending.
section.Blocks.Add(
new Paragraph(dc, "The End")
{ParagraphFormat = { Alignment = HorizontalAlignment.Center, BackgroundColor = Color.Gray}});
Мы получили такой результат:
/// Add the document content (Chapter 1).
// Add Chapter 1.
section.Blocks.Add(
new Paragraph(dc, "Chapter 1")
{
ParagraphFormat =
{
Style = Heading1Style,
PageBreakBefore=true
}
});
// Add SubChapter 1-1.
section.Blocks.Add(
new Paragraph(dc, String.Format("Subchapter 1-1"))
{
ParagraphFormat =
{
Style = Heading2Style
}
});
Paragraph -это производный от Block элемент, используемый для группировки встроенных элементов, таких как бег, фигура,
изображение, поле и т.д.
var tableofcontents = (TableOfEntries)dc.GetChildElements(true, ElementType.TableOfEntries).FirstOrDefault();
tableofcontents.Update();
// Apply the style for the TOC.
foreach (Paragraph par in tableofcontents.Entries)
{
par.ParagraphFormat.Style = TOCStyle;
}
// Update TOC's page numbers.
// Page numbers are automatically updated in that case.
dc.GetPaginator(new PaginatorOptions() { UpdateFields = true });
Разбиение на страницы используется для разделения документа на отдельные страницы.
// Save DOCX to a file
document.Save("Extended-Table-Of-Contents.docx");
Загрузите полученный файл Docx: Extended-Table-Of-Contents.docx
Полный код
using System;
using System.Linq;
using SautinSoft.Document;
namespace Example
{
class Sample
{
static void Main(string[] args)
{
// Get your free 100-day key here:
// https://sautinsoft.com/start-for-free/
ExtendedTOC();
}
/// <summary>
/// Create extended table of contents in word document.
/// </summary>
/// <remarks>
/// Details: https://sautinsoft.com/products/document/help/net/developer-guide/create-extended-table-of-contents-in-word-document-net-csharp-vb.php
/// </remarks>
public static void ExtendedTOC()
{
string resultFile = "Extended-Table-Of-Contents.docx";
// First of all, create an instance of DocumentCore.
DocumentCore dc = new DocumentCore();
// Create and add Heading1 style. For "Chapter 1" and "Chapter 2".
ParagraphStyle Heading1Style = (ParagraphStyle)Style.CreateStyle(StyleTemplateType.Heading1, dc);
Heading1Style.ParagraphFormat.LineSpacing = 3;
Heading1Style.CharacterFormat.Size = 18;
// #358CCB - blue
Heading1Style.CharacterFormat.FontColor = new Color("#358CCB");
dc.Styles.Add(Heading1Style);
// Create and add Heading2 style. For "SupChapter 1-1" and "SubChapter 2-1".
ParagraphStyle Heading2Style = (ParagraphStyle)Style.CreateStyle(StyleTemplateType.Heading2, dc);
Heading2Style.ParagraphFormat.LineSpacing = 2;
Heading2Style.CharacterFormat.Size = 14;
// #FF9900 - orange
Heading2Style.CharacterFormat.FontColor = new Color("#FF9900");
dc.Styles.Add(Heading2Style);
// Create and add TOC style.
ParagraphStyle TOCStyle = (ParagraphStyle)Style.CreateStyle(StyleTemplateType.Subtitle, dc);
TOCStyle.ParagraphFormat.OutlineLevel = OutlineLevel.BodyText;
TOCStyle.ParagraphFormat.Alignment = HorizontalAlignment.Center;
TOCStyle.CharacterFormat.Bold = true;
// #358CCB - blue
TOCStyle.CharacterFormat.FontColor = new Color("#358CCB");
dc.Styles.Add(TOCStyle);
// Add new section.
Section section = new Section(dc);
dc.Sections.Add(section);
// Add TOC Header.
section.Blocks.Add(
new Paragraph(dc, "Table of Contents")
{ ParagraphFormat = { Style = TOCStyle } });
// Create and add TOC (Table of Contents).
section.Blocks.Add(new TableOfEntries(dc, FieldType.TOC));
// Add TOC Ending.
section.Blocks.Add(
new Paragraph(dc, "The End")
{ ParagraphFormat = { Alignment = HorizontalAlignment.Center, BackgroundColor = Color.Gray } });
// Add the document content (Chapter 1).
// Add Chapter 1.
section.Blocks.Add(
new Paragraph(dc, "Chapter 1")
{
ParagraphFormat =
{
Style = Heading1Style,
PageBreakBefore=true
}
});
// Add SubChapter 1-1.
section.Blocks.Add(
new Paragraph(dc, String.Format("Subchapter 1-1"))
{
ParagraphFormat =
{
Style = Heading2Style
}
});
// Add the content of Chapter 1 / Subchapter 1-1.
section.Blocks.Add(
new Paragraph(dc,
"Document.Net will help you in development of applications which operates with DOCX, RTF, PDF, HTML and Text documents.After adding of the reference to(SautinSoft.Document.dll) - it's 100% C# managed assembly you will be able to create a new document, parse an existing, modify anything what you want.")
{
ParagraphFormat = new ParagraphFormat
{
LeftIndentation = 10,
RightIndentation = 10,
SpecialIndentation = 20,
LineSpacing = 20,
LineSpacingRule = LineSpacingRule.Exactly,
SpaceBefore = 20,
SpaceAfter = 20
}
});
// Let's add another page break into.
section.Blocks.Add(
new Paragraph(dc,
new SpecialCharacter(dc, SpecialCharacterType.PageBreak)));
// Add the document content (Chapter 2).
// Add Chapter 2.
section.Blocks.Add(
new Paragraph(dc, "Chapter 2")
{
ParagraphFormat =
{
Style = Heading1Style
}
});
// Add SubChapter 2-1.
section.Blocks.Add(
new Paragraph(dc, String.Format("Subchapter 2-1"))
{
ParagraphFormat =
{
Style = Heading2Style
}
});
// Add the content of Chapter 2 / Subchapter 2-1.
section.Blocks.Add(
new Paragraph(dc,
"Requires only .Net 4.0 or above. Our product is compatible with all .Net languages and supports all Operating Systems where .Net Framework can be used. Note that Document .Net is entirely written in managed C#, which makes it absolutely standalone and an independent library. Of course, No dependency on Microsoft Word.")
{
ParagraphFormat = new ParagraphFormat
{
LeftIndentation = 10,
RightIndentation = 10,
SpecialIndentation = 20,
LineSpacing = 20,
LineSpacingRule = LineSpacingRule.Exactly,
SpaceBefore = 20,
SpaceAfter = 20
}
});
// Update TOC (TOC can be updated only after all document content is added).
var tableofcontents = (TableOfEntries)dc.GetChildElements(true, ElementType.TableOfEntries).FirstOrDefault();
tableofcontents.Update();
// Apply the style for the TOC.
foreach (Paragraph par in tableofcontents.Entries)
{
par.ParagraphFormat.Style = TOCStyle;
}
// Update TOC's page numbers.
// Page numbers are automatically updated in that case.
dc.GetPaginator(new PaginatorOptions() { UpdateFields = true });
// Save the document as DOCX file.
dc.Save(resultFile);
// Open the result for demonstration purposes.
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(resultFile) { UseShellExecute = true });
}
}
}
Option Infer On
Imports System
Imports System.Linq
Imports SautinSoft.Document
Module Sample
Sub Main()
ExtendedTOC()
End Sub
''' Get your free 100-day key here:
''' https://sautinsoft.com/start-for-free/
''' <summary>
''' Create extended table of contents in word document.
''' </summary>
''' <remarks>
''' Details: https://sautinsoft.com/products/document/help/net/developer-guide/create-extended-table-of-contents-in-word-document-net-csharp-vb.php
''' </remarks>
Sub ExtendedTOC()
Dim resultFile As String = "Extended-Table-Of-Contents.docx"
' First of all, create an instance of DocumentCore.
Dim dc As New DocumentCore()
' Create and add Heading1 style. For "Chapter 1" and "Chapter 2".
Dim Heading1Style As ParagraphStyle = CType(Style.CreateStyle(StyleTemplateType.Heading1, dc), ParagraphStyle)
Heading1Style.ParagraphFormat.LineSpacing = 3
Heading1Style.CharacterFormat.Size = 18
' #358CCB - blue
Heading1Style.CharacterFormat.FontColor = New Color("#358CCB")
dc.Styles.Add(Heading1Style)
' Create and add Heading2 style. For "SupChapter 1-1" and "SubChapter 2-1".
Dim Heading2Style As ParagraphStyle = CType(Style.CreateStyle(StyleTemplateType.Heading2, dc), ParagraphStyle)
Heading2Style.ParagraphFormat.LineSpacing = 2
Heading2Style.CharacterFormat.Size = 14
' #FF9900 - orange
Heading2Style.CharacterFormat.FontColor = New Color("#FF9900")
dc.Styles.Add(Heading2Style)
' Create and add TOC style.
Dim TOCStyle As ParagraphStyle = CType(Style.CreateStyle(StyleTemplateType.Subtitle, dc), ParagraphStyle)
TOCStyle.ParagraphFormat.OutlineLevel = OutlineLevel.BodyText
TOCStyle.ParagraphFormat.Alignment = HorizontalAlignment.Center
TOCStyle.CharacterFormat.Bold = True
' #358CCB - blue
TOCStyle.CharacterFormat.FontColor = New Color("#358CCB")
dc.Styles.Add(TOCStyle)
' Add new section.
Dim section As New Section(dc)
dc.Sections.Add(section)
' Add TOC Header.
section.Blocks.Add(New Paragraph(dc, "Table of Contents") With {
.ParagraphFormat = New ParagraphFormat With {.Style = TOCStyle}
})
' Create and add TOC (Table of Contents).
section.Blocks.Add(New TableOfEntries(dc, FieldType.TOC))
' Add TOC Ending.
section.Blocks.Add(New Paragraph(dc, "The End") With {
.ParagraphFormat = New ParagraphFormat With {
.Alignment = HorizontalAlignment.Center,
.BackgroundColor = Color.Gray
}
})
' Add the document content (Chapter 1).
' Add Chapter 1.
section.Blocks.Add(New Paragraph(dc, "Chapter 1") With {
.ParagraphFormat = New ParagraphFormat With {
.Style = Heading1Style,
.PageBreakBefore = True
}
})
' Add SubChapter 1-1.
section.Blocks.Add(New Paragraph(dc, String.Format("Subchapter 1-1")) With {
.ParagraphFormat = New ParagraphFormat With {.Style = Heading2Style}
})
' Add the content of Chapter 1 / Subchapter 1-1.
section.Blocks.Add(New Paragraph(dc, "Document.Net will help you in development of applications which operates with DOCX, RTF, PDF, HTML and Text documents.After adding of the reference to(SautinSoft.Document.dll) - it's 100% C# managed assembly you will be able to create a new document, parse an existing, modify anything what you want.") With {
.ParagraphFormat = New ParagraphFormat With {
.LeftIndentation = 10,
.RightIndentation = 10,
.SpecialIndentation = 20,
.LineSpacing = 20,
.LineSpacingRule = LineSpacingRule.Exactly,
.SpaceBefore = 20,
.SpaceAfter = 20
}
})
' Let's add another page break into.
section.Blocks.Add(New Paragraph(dc, New SpecialCharacter(dc, SpecialCharacterType.PageBreak)))
' Add the document content (Chapter 2).
' Add Chapter 2.
section.Blocks.Add(New Paragraph(dc, "Chapter 2") With {
.ParagraphFormat = New ParagraphFormat With
{.Style = Heading1Style}
})
' Add SubChapter 2-1.
section.Blocks.Add(New Paragraph(dc, String.Format("Subchapter 2-1")) With {
.ParagraphFormat = New ParagraphFormat With {.Style = Heading2Style}
})
' Add the content of Chapter 2 / Subchapter 2-1.
section.Blocks.Add(New Paragraph(dc, "Requires only .Net 4.0 or above. Our product is compatible with all .Net languages and supports all Operating Systems where .Net Framework can be used. Note that Document .Net is entirely written in managed C#, which makes it absolutely standalone and an independent library. Of course, No dependency on Microsoft Word.") With {
.ParagraphFormat = New ParagraphFormat With {
.LeftIndentation = 10,
.RightIndentation = 10,
.SpecialIndentation = 20,
.LineSpacing = 20,
.LineSpacingRule = LineSpacingRule.Exactly,
.SpaceBefore = 20,
.SpaceAfter = 20
}
})
' Update TOC (TOC can be updated only after all document content is added).
Dim tableofcontents = CType(dc.GetChildElements(True, ElementType.TableOfEntries).FirstOrDefault(), TableOfEntries)
tableofcontents.Update()
' Apply the style for the TOC.
For Each par As Paragraph In tableofcontents.Entries
par.ParagraphFormat.Style = TOCStyle
Next par
' Update TOC's page numbers.
' Page numbers are automatically updated in that case.
dc.GetPaginator(New PaginatorOptions() With {.UpdateFields = True})
' Save the document as DOCX file.
dc.Save(resultFile)
' Open the result for demonstration purposes.
System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo(resultFile) With {.UseShellExecute = True})
End Sub
End Module
Если вам нужен пример кода или у вас есть вопрос: напишите нам по адресу support@sautinsoft.ru или спросите в онлайн-чате (правый нижний угол этой страницы) или используйте форму ниже: