Работа с раздели
Понякога искате документ, който няма един и същ формат във всички страници. Например, може да се наложи да промените форматите на номера на страниците, да имате различен размер и ориентация на страниците, или да имате първата страница на документа като страница за корицата без номерация. Можете да постигнете това с секции.
Раздели са нива възли, които контролират заглавни части и подножици, ориентация, колони, маржове, форматиране на страница номер и други.
Aspose.Words ви позволява да управлявате секции, да разделяте документ на раздели и да правите промени във форматирането, които се прилагат само към определен раздел. Aspose.Words съхранява информация за раздел форматиране като заглавни части и подметки, настройка на страница, и настройките на колона в раздел пробив.
Тази статия обяснява как да работите с раздели и раздели прекъсвания.
Какво е раздел и раздел почивка е
Разделите на документите са представени от Section както и SectionCollection Класове. Обекти на раздел са незабавни деца на Document Възел и може да бъде достъпен чрез Sections собственост. Можете да управлявате тези възли, като използвате някои методи като Remove, Add, IndexOf, и други.
Пробив на раздел е опция, която разделя страниците на документи в раздели с персонализирани оформление.
Видове прекъсване на раздел
Aspose.Words позволява да разделите и форматирате документи с помощта на различни прекъсвания на раздел BreakType Изброяване:
- SectionBreakContinulous
- Раздел BreakNewColumn
- SectionBreakNewPage
- SectionBreakEvenPage
- SectionBreakOddPage
Можете също така да използвате SectionStart изброяване за избор на вид пробив, който се прилага само за първия раздел като NewColumn, NewPage, EvenPage и OddPage.
Управление на раздел
Тъй като секцията е нормален композитен възел, цялата манипулация на възела API може да се използва за манипулиране на секции: за добавяне, премахване и други операции на секции. Можете да прочетете повече за възлите в статията Aspose.Words Document Object Model (DOM).
От друга страна, можете да използвате DocumentBuilder
API да работя с секции. В тази статия ще се съсредоточим върху този конкретен начин на работа с разделите.
Вмъкване или премахване на прекъсване на раздел
Aspose.Words позволява да вмъкнете раздел за прекъсване на текста с помощта на InsertBreak метод.
Следният пример с код показва как да се вмъкне раздел, който да пробие в документ:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
/// <summary> | |
/// Insert section breaks before the specified paragraphs. | |
/// </summary> | |
private void InsertSectionBreaks(List<Paragraph> topicStartParas) | |
{ | |
DocumentBuilder builder = new DocumentBuilder(mDoc); | |
foreach (Paragraph para in topicStartParas) | |
{ | |
Section section = para.ParentSection; | |
// Insert section break if the paragraph is not at the beginning of a section already. | |
if (para != section.Body.FirstParagraph) | |
{ | |
builder.MoveTo(para.FirstChild); | |
builder.InsertBreak(BreakType.SectionBreakNewPage); | |
// This is the paragraph that was inserted at the end of the now old section. | |
// We don't really need the extra paragraph, we just needed the section. | |
section.Body.LastParagraph.Remove(); | |
} | |
} | |
} |
Използвайте Remove метод за изтриване на прекъсване на раздел. Ако не е необходимо да премахнете конкретен раздел пробив и вместо това изтрийте съдържанието на този раздел, можете да използвате ClearContent метод.
Следният пример за код показва как се премахват разделите:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
private void RemoveSectionBreaks(Document doc) | |
{ | |
// Loop through all sections starting from the section that precedes the last one and moving to the first section. | |
for (int i = doc.Sections.Count - 2; i >= 0; i--) | |
{ | |
// Copy the content of the current section to the beginning of the last section. | |
doc.LastSection.PrependContent(doc.Sections[i]); | |
// Remove the copied section. | |
doc.Sections[i].Remove(); | |
} | |
} |
Преместване на раздел
Ако искате да преместите раздел от една позиция в друга във вашия документ, трябва да получите индекса на този раздел. Aspose.Words ви позволява да получите позиция раздел от а SectionCollection като използвате Item собственост. Можеш да използваш Sections собственост, за да получите всички раздели в документа си. Но ако искате да получите само първата част, можете да използвате FirstSection собственост.
Следният пример за код показва как да се влезе в първата секция и да се итерат през децата на композитен възел:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.Write("Section 1"); | |
builder.MoveToHeaderFooter(HeaderFooterType.HeaderPrimary); | |
builder.Write("Primary header"); | |
builder.MoveToHeaderFooter(HeaderFooterType.FooterPrimary); | |
builder.Write("Primary footer"); | |
Section section = doc.FirstSection; | |
// A Section is a composite node and can contain child nodes, | |
// but only if those child nodes are of a "Body" or "HeaderFooter" node type. | |
foreach (Node node in section) | |
{ | |
switch (node.NodeType) | |
{ | |
case NodeType.Body: | |
{ | |
Body body = (Body)node; | |
Console.WriteLine("Body:"); | |
Console.WriteLine($"\t\"{body.GetText().Trim()}\""); | |
break; | |
} | |
case NodeType.HeaderFooter: | |
{ | |
HeaderFooter headerFooter = (HeaderFooter)node; | |
Console.WriteLine($"HeaderFooter type: {headerFooter.HeaderFooterType}:"); | |
Console.WriteLine($"\t\"{headerFooter.GetText().Trim()}\""); | |
break; | |
} | |
default: | |
{ | |
throw new Exception("Unexpected node type in a section."); | |
} | |
} | |
} |
Посочете подреждане на раздел
Понякога искате документът ви да изглежда по-добре, като направите творчески макети за различни раздели от документи. Ако искате да посочите вида на текущата мрежа на раздел, можете да изберете режим на оформление на раздел с помощта на SectionLayoutMode Изброяване:
- По подразбиране
- Мрежа
- LineGrid
- SnapToChars
Следният пример за код показва как да се ограничи броят на редовете, които всяка страница може да има:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// Enable pitching, and then use it to set the number of lines per page in this section. | |
// A large enough font size will push some lines down onto the next page to avoid overlapping characters. | |
builder.PageSetup.LayoutMode = SectionLayoutMode.LineGrid; | |
builder.PageSetup.LinesPerPage = 15; | |
builder.ParagraphFormat.SnapToGrid = true; | |
for (int i = 0; i < 30; i++) | |
builder.Write("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "); | |
doc.Save(ArtifactsDir + "WorkingWithDocumentOptionsAndSettings.LinesPerPage.docx"); |
Редактиране на раздел
Когато добавите нов раздел към вашия документ, няма да има тяло или параграф, който можете да редактирате. Aspose.Words ви позволява да гарантирате, че даден раздел съдържа орган с най-малко един параграф, като използвате EnsureMinimum метод го добавя автоматично Body (или HeaderFooter) възел към документа и след това добавя § към него.
Следният пример за код показва как да се подготви нов възел раздел използване EnsureMinimum:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
// If we add a new section like this, it will not have a body, or any other child nodes. | |
doc.Sections.Add(new Section(doc)); | |
// Run the "EnsureMinimum" method to add a body and a paragraph to this section to begin editing it. | |
doc.LastSection.EnsureMinimum(); | |
doc.Sections[0].Body.FirstParagraph.AppendChild(new Run(doc, "Hello world!")); |
Добавяне или предварително използване на съдържание
Ако искате да начертаете някаква форма или да добавите текст или изображение в началото/ края на раздел, можете да използвате AppendContent както и PrependContent методи на Section Клас.
Следният пример за код показва как да се добави съдържание в съществуващ раздел:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.Write("Section 1"); | |
builder.InsertBreak(BreakType.SectionBreakNewPage); | |
builder.Write("Section 2"); | |
builder.InsertBreak(BreakType.SectionBreakNewPage); | |
builder.Write("Section 3"); | |
Section section = doc.Sections[2]; | |
// Insert the contents of the first section to the beginning of the third section. | |
Section sectionToPrepend = doc.Sections[0]; | |
section.PrependContent(sectionToPrepend); | |
// Insert the contents of the second section to the end of the third section. | |
Section sectionToAppend = doc.Sections[1]; | |
section.AppendContent(sectionToAppend); |
Клониране на раздел
Aspose.Words ви позволява да дублирате раздел чрез създаване на пълно копие от него с помощта на Clone метод.
Следният пример за код показва как да клонирате първия раздел във вашия документ:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(MyDir + "Document.docx"); | |
Section cloneSection = doc.Sections[0].Clone(); |
Копиране на раздели между документи
В някои случаи може да имате големи документи с много раздели и искате да копирате съдържанието на раздел от един документ в друг.
Aspose.Words позволява да копирате раздели между документи, използвайки ImportNode метод.
Следният пример за код показва как да копирате раздели между документи:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document srcDoc = new Document(MyDir + "Document.docx"); | |
Document dstDoc = new Document(); | |
Section sourceSection = srcDoc.Sections[0]; | |
Section newSection = (Section)dstDoc.ImportNode(sourceSection, true); | |
dstDoc.Sections.Add(newSection); | |
dstDoc.Save(ArtifactsDir + "WorkingWithSection.CopySection.docx"); |
Работа с раздел Header и Footer
Основните правила за показване на заглавна част или стъпало за всеки раздел са доста прости:
- Ако секцията няма собствени заглавни части/футови части от определен тип, тогава тя се взема от предишния раздел.
- Видът на заглавната част/футъра, показан на страницата, се контролира от “Различните първа страница” и “Различните страници на Odd & Even” в раздел.
Следният пример за код показва как да се създадат 2 секции с различни заглавни части:
Ако искате да премахнете текста на заглавните части и подметките, без да премахвате HeaderFooter обекти в документа, можете да използвате ClearHeadersFooters метод. В допълнение, можете да използвате DeleteHeaderFooterShapes метод за премахване на всички форми от заглавните части и подметките във вашия документ.
Следният пример за код показва как да изчистите съдържанието на всички заглавни части и подметки в раздел:
Следният пример за код как да премахнете всички форми от всички заглавни ленти в раздел:
Настройки на страницата в раздел
Преди да отпечатате страница или документ, може да искате да персонализирате и модифицирате размера и оформлението на една страница или целия документ. С настройката на страницата можете да промените настройките на страниците с документи като полета, ориентация и размер за отпечатване на различни първи страници или нечетни страници.
Aspose.Words позволява да персонализирате свойствата на страницата и секцията с помощта на PageSetup Клас.
Следният пример за код показва как да зададете такива свойства като размер на страница и ориентация за текущата секция:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.PageSetup.Orientation = Orientation.Landscape; | |
builder.PageSetup.LeftMargin = 50; | |
builder.PageSetup.PaperSize = PaperSize.Paper10x14; | |
doc.Save(ArtifactsDir + "WorkingWithDocumentOptionsAndSettings.PageSetupAndSectionFormatting.docx"); |
Следният пример за код показва как да се променят свойствата на страницата във всички раздели:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.Writeln("Section 1"); | |
doc.AppendChild(new Section(doc)); | |
builder.Writeln("Section 2"); | |
doc.AppendChild(new Section(doc)); | |
builder.Writeln("Section 3"); | |
doc.AppendChild(new Section(doc)); | |
builder.Writeln("Section 4"); | |
// It is important to understand that a document can contain many sections, | |
// and each section has its page setup. In this case, we want to modify them all. | |
foreach (Section section in doc) | |
section.PageSetup.PaperSize = PaperSize.Letter; | |
doc.Save(ArtifactsDir + "WorkingWithSection.ModifyPageSetupInAllSections.doc"); |