Werken met afdelingen
Soms wil je een document dat niet dezelfde opmaak heeft op alle pagina’s. Bijvoorbeeld, je kan nodig hebben om paginanummer formaten te wijzigen, hebben verschillende pagina grootte en oriëntatie, of hebben de eerste document pagina als een cover pagina zonder nummering. Je kunt dat bereiken met secties.
Secties zijn niveauknooppunten die headers en voetteksten, oriëntatie, kolommen, marges, paginanummeropmaak, en anderen controleren.
Aspose.Words Hiermee kunt u secties beheren, een document in secties verdelen en wijzigingen aanbrengen die alleen van toepassing zijn op een specifieke sectie. Aspose.Words slaat informatie op over sectieopmaak zoals headers en voetteksten, pagina-instellingen en kolominstellingen in de sectieafbreking.
Dit artikel legt uit hoe te werken met secties en sectie pauzes.
Wat Section en Section Break is
De afdelingen Documenten worden vertegenwoordigd door de Section en SectionCollection lessen. Sectie objecten zijn directe kinderen van de Document knooppunt en kan worden benaderd via de Sections eigendom. U kunt deze knooppunten beheren met behulp van een aantal methoden zoals Remove, Add, IndexOf, en anderen.
Sectie break is een optie die documentpagina’s verdeelt in secties met aanpasbare lay-outs.
Soorten sectiebreuk
Aspose.Words kunt u documenten splitsen en formatteren met behulp van verschillende sectie pauzes van de BreakType Lijst:
- SectionBreakContinuous
- SectieBreekNieuwColumbus
- SectionBreakNewPage
- SectionBreakEvenPage
- SectieBreakOddPage
U kunt ook de SectionStart Lijst om een breektype te kiezen dat alleen geldt voor de eerste sectie zoals NewColumn, NewPage, EvenPage en OddPage.
Een sectie beheren
Aangezien een sectie is een normale samengestelde knooppunt, de hele node manipulatie API kan worden gebruikt om secties te manipuleren: toe te voegen, verwijderen en andere bewerkingen op secties. U kunt meer lezen over nodes in het artikel Aspose.Words Document Object Model (DOM).
Aan de andere kant kunt u ook gebruik maken van de DocumentBuilder
API werken met secties. In dit artikel zullen we ons richten op deze specifieke manier van werken met secties.
Een sectiepauze invoegen of verwijderen
Aspose.Words kunt u een sectie in te breken in tekst met behulp van de InsertBreak methode.
Het volgende voorbeeld van code laat zien hoe een sectie in een document kan worden ingebroken:
// 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(); | |
} | |
} | |
} |
Gebruik de Remove methode om een sectiebreuk te verwijderen. Als u niet hoeft te verwijderen een specifieke sectie te breken en in plaats daarvan de inhoud van die sectie te verwijderen, kunt u de ClearContent methode.
Het volgende voorbeeld van code laat zien hoe secties pauzes verwijderen:
// 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(); | |
} | |
} |
Deel verplaatsen
Als je een sectie wilt verplaatsen van de ene positie naar de andere in je document, moet je de index van die sectie krijgen. Aspose.Words kunt u een sectie positie van een SectionCollection door het gebruik van de Item eigendom. U kunt de Sections eigendom om alle secties in uw document te krijgen. Maar als u alleen de eerste sectie wilt krijgen, kunt u de FirstSection eigendom.
Het volgende voorbeeld van code laat zien hoe u de eerste sectie kunt openen en itereren via de kinderen van een samengesteld knooppunt:
// 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."); | |
} | |
} | |
} |
Specificeer een sectieindeling
Soms wil je dat je document er beter uitziet door creatieve lay-outs te maken voor verschillende documentsecties. Als u het type van het huidige sectieraster wilt opgeven, kunt u een sectieopmaakmodus kiezen met behulp van de SectionLayoutMode Lijst:
- Standaard
- Raster
- LineGrid
- SnapToChars
Het volgende codevoorbeeld laat zien hoe het aantal regels dat elke pagina kan hebben te beperken:
// 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"); |
Een sectie bewerken
Wanneer u een nieuwe sectie aan uw document toevoegt, zal er geen lichaam of paragraaf zijn die u kunt bewerken. Aspose.Words kunt u garanderen dat een sectie bevat een lichaam met ten minste een paragraaf met behulp van de EnsureMinimum method
Het volgende voorbeeld van code laat zien hoe een nieuwe sectie knooppunt te bereiden met behulp van 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!")); |
Inhoud toevoegen of prepend
Als u een vorm wilt tekenen of tekst of afbeelding wilt toevoegen aan het begin/einde van een sectie, kunt u de AppendContent en PrependContent methoden van de Section Klasse.
Het volgende voorbeeld van code laat zien hoe inhoud van een bestaande sectie kan worden toegevoegd:
// 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); |
Kloon een sectie
Aspose.Words kunt u een sectie dupliceren door een volledige kopie van het met behulp van de Clone methode.
Het volgende voorbeeld van code laat zien hoe je de eerste sectie in je document kunt klonen:
// 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(); |
Delen tussen documenten kopiëren
In sommige gevallen kunt u grote documenten met vele secties hebben en u wilt de inhoud van een sectie van het ene document naar het andere kopiëren.
Aspose.Words kunt u delen tussen documenten kopiëren met behulp van de ImportNode methode.
Het volgende voorbeeld van de code laat zien hoe u secties tussen documenten kunt kopiëren:
// 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"); |
Werken met sectie kop en voettekst
De basisregels voor het weergeven van een header of voettekst voor elke sectie zijn vrij eenvoudig:
- Als de sectie geen eigen headers/voeters van een bepaald type heeft, dan wordt deze genomen uit de vorige sectie.
- Het type header/voeter dat op de pagina wordt weergegeven wordt bestuurd door de “Different First Page” en “Different Odd & Even pages” sectieinstellingen als ze uitgeschakeld zijn, dan worden de eigen titels van de sectie genegeerd.
Het volgende code voorbeeld laat zien hoe 2 secties met verschillende headers te maken:
Als u de tekst van headers en voetteksten wilt verwijderen zonder te verwijderen HeaderFooter objecten in uw document, kunt u de ClearHeadersFooters methode. Daarnaast kunt u de DeleteHeaderFooterShapes methode om alle vormen uit headers en voetteksten in uw document te verwijderen.
Het volgende voorbeeld van code laat zien hoe inhoud van alle headers en voetteksten in een sectie te wissen:
Het volgende codevoorbeeld hoe alle vormen uit alle headers voetteksten in een sectie te verwijderen:
Paginaeigenschappen aanpassen in een sectie
Voordat u een pagina of document afdrukt, kunt u de grootte en lay-out van een enkele pagina of het hele document aanpassen. Met pagina-instellingen kunt u de instellingen van documentpagina’s wijzigen, zoals marges, oriëntatie en grootte voor het afdrukken van verschillende eerste pagina’s of oneven pagina’s.
Aspose.Words kunt u pagina en sectie eigenschappen aanpassen met behulp van de PageSetup Klasse.
Het volgende voorbeeld van code laat zien hoe u eigenschappen zoals paginagrootte en oriëntatie voor de huidige sectie kunt instellen:
// 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"); |
Het volgende code voorbeeld laat zien hoe de pagina eigenschappen in alle secties te wijzigen:
// 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"); |