Hoe te werken met secties in .NET
Deze gids laat zien hoe je sectie-scheidingen maakt, de paginainstelling configureert en kopteksten, voetteksten en een meerkolomsindeling beheert in Aspose.Words FOSS voor .NET, met de Section and PageSetup klassen. Het behandelt het lezen van de secties die al in een document aanwezig zijn, het starten van een nieuwe sectie met DocumentBuilder, configureren van paginadimensies en marges, toevoegen van header- en footer-varianten, en het opmaken van hoofdtekst in meerdere kolommen.
Stapsgewijze handleiding
Stap 1: Installeer het pakket
Aspose.Words FOSS voor .NET publiceert nog geen NuGet pakket – bouw de bibliotheek in plaats daarvan vanuit de bron. Clone https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, bouw daarna Aspose.Words.sln in Release-configuratie met de .NET SDK en verwijs naar de resulterende Aspose.Words assembly vanuit je project. De bibliotheek richt zich op .NET Standard 2.0, dus hij draait op .NET Framework 4.6.2+ en .NET 6/8/10.
Stap 2: Importeer vereiste klassen
Voeg een using Aspose.Words; directive toe – Section, PageSetup, HeaderFooter, en de gerelateerde enumeraties die in deze gids worden gebruikt, bevinden zich direct in de Aspose.Words namespace naast Document en DocumentBuilder.
Stap 3: Lees de secties die al in een document staan
Document.Sections retourneert een SectionCollection die elke Section in het document bevat, elk een CompositeNode die ook deel uitmaakt van de algemene knooppuntboom. Document.FirstSection en Document.LastSection geven directe toegang tot de grenssecties zonder de collectie te itereren. Elke Section bevat één Body – op dezelfde manier bereikt als elke andere Story – en, indien aanwezig, header- en footergedeelte bereikt via Section.HeadersFooters.
Stap 4: Start een nieuwe sectie met een sectie-einde
Call DocumentBuilder.InsertBreak(BreakType) bij de cursor om een nieuwe sectie te starten. Geef BreakType.SectionBreakNewPage wanneer de nieuwe sectie altijd op een nieuwe pagina moet beginnen, BreakType.SectionBreakContinuous wanneer alleen een wijziging in de paginainstelling nodig is (bijvoorbeeld overschakelen naar meerkolomtekst) zonder een pagina-onderbreking af te dwingen, of BreakType.SectionBreakNewColumn, SectionBreakEvenPage, en SectionBreakOddPage voor de andere sectie-startgedragingen die Word ondersteunt. Een sectie-einde draagt de opmaak voor de sectie die follows het, dus stel PageSetup eigenschappen in de nieuwe Section – niet de vorige – zodra het einde is ingevoegd. DocumentBuilder.MoveToSection(sectionIndex) verplaatst de cursor naar het begin van het lichaam van een specifieke sectie, en PageSetup.SectionStart leest of stelt de SectionStart type van het einde dat al is vastgelegd in een bestaande sectie.
Stap 5: Configureer paginadimensies en marges
Elke Section.PageSetup is een PageSetup instantie. Stel PageWidth, PageHeight, LeftMargin, RightMargin, TopMargin, BottomMargin en Gutter in voor paginadimensies en marges, of ken een Margins voorinstelling direct toe aan PageSetup.Margins. Orientation en PaperSize regelen de paginarichting en papierformaat. Paginakaders worden geconfigureerd met Borders (een BorderCollection), BorderAppliesTo (PageBorderAppliesTo), BorderDistanceFrom (PageBorderDistanceFrom), BorderAlwaysInFront, BorderSurroundsHeader en BorderSurroundsFooter. Roep PageSetup.ClearFormatting() aan om de paginainstelling van een sectie terug te zetten naar de standaardwaarden voordat je deze vanaf nul configureert.
Stap 6: Voeg kopteksten en voetteksten toe en koppel ze
Section.HeadersFooters is een HeaderFooterCollection met getypeerde accessors – HeaderPrimary, HeaderFirst, HeaderEven, FooterPrimary, FooterFirst, FooterEven – naast GetByHeaderFooterType() voor opzoeking via HeaderFooterType en Add() om een nieuwe toe te voegen. Elke HeaderFooter is een Story, gemarkeerd als IsHeader en IsLinkedToPrevious. Schakel PageSetup.DifferentFirstPageHeaderFooter of PageSetup.OddAndEvenPagesHeaderFooter in voordat je de overeenkomstige HeaderFirst/FooterFirst of HeaderEven/FooterEven variant toevoegt – de vlag en de variant werken alleen samen. Roep HeaderFooterCollection.LinkToPrevious() aan om de header of footer van een sectie opnieuw te verbinden zodat deze de inhoud van de vorige sectie erft, of om deze los te koppelen zodat de nieuwe sectie met onafhankelijke inhoud begint.
Stap 7: Bodytekst in meerdere kolommen rangschikken
PageSetup.TextColumns geeft een TextColumnCollection voor de sectie terug. Roep SetCount() aan met het aantal kolommen waarin de bodytekst moet vloeien, pas vervolgens EvenlySpaced, Spacing, LineBetween en Width aan om te bepalen hoe de kolommen worden opgemaakt. Zodra de collectie meer dan één kolom bevat, geven individuele TextColumn instanties hun eigen Width en SpaceAfter vrij.
Stap 8: Sectie-inhoud wissen of massaal bewerken
Section.AppendContent() en PrependContent() kopiëren de body-inhoud van een andere sectie naar deze; ClearContent() leegt de body van een sectie in bulk. ClearHeadersFooters() en DeleteHeaderFooterShapes() wissen header- en footer-inhoud in de hele sectie zonder de sectie zelf te verwijderen.
Veelvoorkomende problemen en oplossingen
De paginainstelling van een nieuwe sectie komt niet overeen met wat ik heb ingesteld PageSetup was ingesteld op de verkeerde Section instance. Een sectieonderbreking draagt de opmaak voor de sectie die erop volgt – stel PageSetup in te stellen op de sectie die volgt InsertBreak(), niet de vorige.
Kop- of voettekstinhoud van de vorige sectie verschijnt onverwacht in een nieuwe De kop- of voettekst van de nieuwe sectie is nog steeds gekoppeld aan de vorige sectie. Bel HeaderFooterCollection.LinkToPrevious(false), of voeg afzonderlijke kop-/voettekstinhoud toe aan de nieuwe sectie om deze los te koppelen.
Eerste-pagina of even-pagina header/footer wordt genegeerd DifferentFirstPageHeaderFooter or OddAndEvenPagesHeaderFooter is false, of de overeenkomende HeaderFooterType variant bestaat niet in Section.HeadersFooters. Stel de vlag in op PageSetup en voeg de overeenkomstige header/footer-variant samen.
Multi-kolomlay-out is niet van toepassing TextColumns.SetCount() werd aangeroepen met een telling van één, of op de verkeerde sectie’s PageSetup. Roep SetCount() met meer dan één kolom op de doelsectie PageSetup.TextColumns.
Sectie-einde ingevoegd op de verkeerde documentpositie DocumentBuilder.InsertBreak(BreakType) voegt in op de huidige cursor van de builder. Gebruik DocumentBuilder.MoveToSection() of de andere cursor-positioneringselementen van de builder om de cursor te positioneren voordat u aanroept InsertBreak().
Veelgestelde vragen
Hoe begin ik een nieuwe sectie zonder een nieuwe pagina te starten?
Voeg een SectionBreakContinuous onderbreking in met DocumentBuilder.InsertBreak(BreakType.SectionBreakContinuous).
Hoe geef ik een sectie zijn eigen marges en oriëntatie?
Voeg een sectie-einde in, stel vervolgens TopMargin, BottomMargin, LeftMargin, RightMargin, Orientation en PaperSize in op de PageSetup van de nieuwe sectie.
Hoe zorg ik ervoor dat de eerste pagina van een sectie een andere header gebruikt?
Stel PageSetup.DifferentFirstPageHeaderFooter = true in op die sectie, en voeg een HeaderFooter van type HeaderFirst (en FooterFirst, indien nodig) toe aan de HeadersFooters collectie.
Hoe kan ik de bodytekst van een sectie in twee kolommen indelen?
Roep PageSetup.TextColumns.SetCount(2) aan op de sectie, en pas vervolgens Spacing, EvenlySpaced of individuele TextColumn.Width waarden aan indien nodig.
Hoe krijg ik direct toegang tot de eerste en laatste secties?
Lees Document.FirstSection en Document.LastSection in plaats van te indexeren in Document.Sections.