Hur man arbetar med sektioner i .NET
Den här guiden visar hur man skapar sektionsbrytningar, konfigurerar sidinställningar och hanterar sidhuvuden, sidfötter och flerkolumnslayout i Aspose.Words FOSS för .NET, med hjälp av Section and PageSetup klasser. Den täcker att läsa avsnitten som redan finns i ett dokument, att starta ett nytt avsnitt med DocumentBuilder, konfigurera sidmått och marginaler, lägga till varianter av sidhuvud och sidfot, samt layouta brödtext i flera kolumner.
Steg-för-steg-guide
Steg 1: Installera paketet
Aspose.Words FOSS för .NET har ännu inte publicerat ett NuGet-paket – bygg biblioteket från källkod istället. Klona https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, bygg sedan Aspose.Words.sln i Release-konfiguration med .NET SDK och referera till den resulterande Aspose.Words assemblyn från ditt projekt. Biblioteket riktar sig mot .NET Standard 2.0, så det körs på .NET Framework 4.6.2+ och .NET 6/8/10.
Steg 2: Importera nödvändiga klasser
Lägg till en using Aspose.Words;-direktiv – Section, PageSetup, HeaderFooter och de relaterade enumen som används i den här guiden finns direkt i Aspose.Words-namnutrymmet tillsammans med Document och DocumentBuilder.
Steg 3: Läs avsnitten som redan finns i ett dokument
Document.Sections returnerar en SectionCollection som innehåller varje Section i dokumentet, var och en en CompositeNode som också är en del av det övergripande nodträdet. Document.FirstSection och Document.LastSection ger direkt åtkomst till gränsavsnitten utan att iterera samlingen. Varje Section innehåller en Body – nås på samma sätt som vilken annan Story som helst – och, om den finns, header- och footersinnehåll nås via Section.HeadersFooters.
Steg 4: Starta ett nytt avsnitt med en avsnittsbrytning
Call DocumentBuilder.InsertBreak(BreakType) vid markören för att starta ett nytt avsnitt. Skicka BreakType.SectionBreakNewPage när det nya avsnittet alltid ska börja på en ny sida, BreakType.SectionBreakContinuous när endast en sidinställningsändring behövs (t.ex. byte till flerkolumnstext) utan att tvinga en sidbrytning, eller BreakType.SectionBreakNewColumn, SectionBreakEvenPage, och SectionBreakOddPage för de andra sektion-startbeteendena som Word stöder. En sektionsbrytning bär formateringen för den sektion som follows den, så sätt PageSetup egenskaper på den nya Section – inte den som föregick den – när brytningen har infogats. DocumentBuilder.MoveToSection(sectionIndex) flyttar markören till början av en specifik sektionens kropp, och PageSetup.SectionStart läser eller sätter den SectionStart bryttyp som redan har registrerats på en befintlig sektion.
Steg 5: Konfigurera siddimensioner och marginaler
Varje Section.PageSetup är en PageSetup instans. Ställ in PageWidth, PageHeight, LeftMargin, RightMargin, TopMargin, BottomMargin och Gutter för siddimensioner och marginaler, eller tilldela en Margins förinställning direkt till PageSetup.Margins. Orientation och PaperSize styr sidorientering och papperstorlek. Sidramar konfigureras med Borders (en BorderCollection), BorderAppliesTo (PageBorderAppliesTo), BorderDistanceFrom (PageBorderDistanceFrom), BorderAlwaysInFront, BorderSurroundsHeader och BorderSurroundsFooter. Anropa PageSetup.ClearFormatting() för att återställa ett avsnitts sidinställning till standardvärden innan du konfigurerar det från grunden.
Steg 6: Lägg till och länka rubriker och sidfötter
Section.HeadersFooters är en HeaderFooterCollection med typade åtkomstmetoder – HeaderPrimary, HeaderFirst, HeaderEven, FooterPrimary, FooterFirst, FooterEven – samt GetByHeaderFooterType() för uppslagning via HeaderFooterType och Add() för att lägga till en ny. Varje HeaderFooter är en Story, flaggad IsHeader och IsLinkedToPrevious. Aktivera PageSetup.DifferentFirstPageHeaderFooter eller PageSetup.OddAndEvenPagesHeaderFooter innan du lägger till motsvarande HeaderFirst/FooterFirst eller HeaderEven/FooterEven variant – flaggan och varianten gäller bara tillsammans. Anropa HeaderFooterCollection.LinkToPrevious() för att återansluta ett avsnitts rubrik eller sidfot så att den ärver föregående avsnitts innehåll, eller för att koppla loss den så att det nya avsnittet börjar med eget innehåll.
Steg 7: Lägg ut brödtext i flera kolumner
PageSetup.TextColumns returnerar en TextColumnCollection för sektionen. Anropa SetCount() med antalet kolumner som brödtexten ska flöda in i, justera sedan EvenlySpaced, Spacing, LineBetween och Width för att styra hur kolumnerna läggs ut. När samlingen har mer än en kolumn visar enskilda TextColumn-instanser sina egna Width och SpaceAfter.
Steg 8: Rensa eller massredigera sektionsinnehåll
Section.AppendContent() och PrependContent() kopierar en annan sektions brödtextinnehåll till denna; ClearContent() tömmer en sektions brödtext i bulk. ClearHeadersFooters() och DeleteHeaderFooterShapes() rensar rubrik- och sidfotsinnehåll i hela sektionen utan att ta bort själva sektionen.
Vanliga problem och lösningar
En ny sektions sidinställning stämmer inte med vad jag angav PageSetup sattes på fel Section instans. Ett sektionsbrytning bär formatering för sektionen som följer den – sätt PageSetup på sektionen som kommer efter InsertBreak(), inte den som föregår den.
Sidhuvud- eller sidfotinnehåll från föregående sektion visas oväntat i en ny sektion Den nya sektionens sidhuvud eller sidfot är fortfarande länkat till föregående sektion. Ring HeaderFooterCollection.LinkToPrevious(false), eller lägg till tydligt sidhuvud-/sidfotinnehåll i den nya sektionen, för att koppla bort det.
Förstasidans eller jämnsidans sidhuvud/sidfot ignoreras DifferentFirstPageHeaderFooter or OddAndEvenPagesHeaderFooter is false, eller den matchande HeaderFooterType varianten finns inte i Section.HeadersFooters. Ställ in flaggan på PageSetup och lägg till den motsvarande sidhuvud/sidfot-varianten tillsammans.
Flerkolumnlayout gäller inte TextColumns.SetCount() anropades med en räkning på ett, eller på fel sections PageSetup. Anropa SetCount() med mer än en kolumn på målsektionens PageSetup.TextColumns.
Avsnittsbrytning infogad på fel dokumentposition DocumentBuilder.InsertBreak(BreakType) infogar vid byggarens aktuella markör. Använd DocumentBuilder.MoveToSection() eller byggarens andra markörpositioneringsmedlemmar för att placera markören innan du anropar InsertBreak().
Vanliga frågor
Hur startar jag ett nytt avsnitt utan att starta en ny sida?
Infoga en SectionBreakContinuous-brytning med DocumentBuilder.InsertBreak(BreakType.SectionBreakContinuous).
Hur ger jag ett avsnitt sina egna marginaler och orientering?
Infoga en avsnittsbrytning, sedan sätt TopMargin, BottomMargin, LeftMargin, RightMargin, Orientation och PaperSize på den nya avsnittets PageSetup.
Hur får jag en sektions första sida att använda ett annat sidhuvud?
Ställ in PageSetup.DifferentFirstPageHeaderFooter = true på den sektionen, och lägg till en HeaderFooter av typen HeaderFirst (och FooterFirst, om det behövs) till dess HeadersFooters samling.
Hur lägger jag upp en sektions brödtext i två kolumner?
Anropa PageSetup.TextColumns.SetCount(2) på sektionen, justera sedan Spacing, EvenlySpaced eller enskilda TextColumn.Width-värden efter behov.
Hur får jag direkt åtkomst till den första och sista sektionerna?
Läs Document.FirstSection och Document.LastSection istället för att indexera in i Document.Sections.