Praca z sekcjami
Praca z sekcjami
Dokument Word jest podzielony na jedną lub więcej sekcji, z których każda ma własne ustawienia strony, marginesy, nagłówki i stopki. Aspose.Words FOSS dla .NET reprezentuje sekcję jako Section węzeł, zawierający Body oraz, opcjonalnie, nagłówki i stopki, plus PageSetup który kontroluje jej układ. Ta strona opisuje model obiektowy sekcji, ustawienia strony, nagłówki i stopki oraz układ tekstu w wielokolumnowy sposób.
Model obiektowy sekcji
Document.Sections zwraca SectionCollection — każdy Section w dokumencie, będący jednocześnie CompositeNode i częścią drzewa węzłów. Section zawiera jeden Body ( Story przechowujący główne akapity i tabele sekcji) oraz, gdy występują, węzły HeaderFooter dostępne poprzez Section.HeadersFooters, czyli HeaderFooterCollection. Document.FirstSection i Document.LastSection zapewniają bezpośredni dostęp do sekcji granicznych. Section.AppendContent(), PrependContent() i ClearContent() manipulują zawartością ciała sekcji zbiorczo, podczas gdy ClearHeadersFooters() i DeleteHeaderFooterShapes() czyszczą zawartość nagłówka/stopki.
Tworzenie sekcji i podziałów sekcji
DocumentBuilder.InsertBreak(BreakType) wstawia podział w miejscu kursora; BreakType obejmuje SectionBreakNewPage, SectionBreakContinuous, SectionBreakNewColumn, SectionBreakEvenPage i SectionBreakOddPage służące do rozpoczęcia nowej sekcji, wraz z wartościami niebędącymi sekcjami PageBreak, ColumnBreak, LineBreak i ParagraphBreak. DocumentBuilder.MoveToSection() przenosi kursor na początek ciała określonej sekcji. PageSetup.SectionStart odczytuje lub ustawia typ podziału SectionStart zapisany w istniejącej sekcji.
Ustawienia strony
Section.PageSetup jest PageSetup instancją obejmującą wymiary strony i marginesy (PageWidth, PageHeight, TopMargin, BottomMargin, LeftMargin, RightMargin, Gutter), Orientation i PaperSize, oraz obramowania strony po każdej stronie (Borders, BorderAppliesTo via PageBorderAppliesTo, BorderDistanceFrom via PageBorderDistanceFrom, BorderAlwaysInFront, BorderSurroundsHeader, BorderSurroundsFooter). Numeracja wierszy jest kontrolowana przez LineNumberRestartMode, LineNumberCountBy, LineNumberDistanceFromText i LineStartingNumber. PageSetup.ClearFormatting() przywraca domyślne ustawienia.
Nagłówki i stopki
Section.HeadersFooters jest HeaderFooterCollection z typowanymi akcesorami – HeaderPrimary, HeaderFirst, HeaderEven, FooterPrimary, FooterFirst, FooterEven – obok GetByHeaderFooterType(), Add() i LinkToPrevious(). Każdy HeaderFooter jest Story (np. Body) zidentyfikowany przez jego HeaderFooterType i oznaczony jako IsHeader / IsLinkedToPrevious. PageSetup.DifferentFirstPageHeaderFooter i PageSetup.OddAndEvenPagesHeaderFooter kontrolują, czy Word oczekuje użycia wariantów nagłówka/stopki dla pierwszej strony i stron parzystych.
Wiele kolumn tekstu
PageSetup.TextColumns zwraca TextColumnCollection (Count, EvenlySpaced, LineBetween, Spacing, Width) z SetCount(), aby ułożyć treść sekcji w wielu kolumnach. Poszczególne kolumny są instancjami TextColumn (Width, SpaceAfter) po tym, jak kolekcja zostanie wypełniona więcej niż jedną kolumną.
Wskazówki i najlepsze praktyki
- Podział sekcji przenosi formatowanie dla sekcji, która follows to – ustawiając
PageSetupwłaściwości na aSectionwłaśnie utworzyłeś (poInsertBreak) wpływa na treść, która pojawia się po przerwie, a nie przed nią. - Użyj
SectionBreakContinuous, gdy potrzebujesz jedynie zmiany ustawień strony (na przykład przełączenia na tekst w wielu kolumnach) bez rozpoczynania nowej strony; użyjSectionBreakNewPage, gdy nowa sekcja powinna zawsze zaczynać się na nowej stronie. HeaderFooterCollection.LinkToPrevious()ponownie łączy nagłówek/stopkę sekcji, aby odziedziczyła zawartość poprzedniej sekcji – wykonaj to przed zapisaniem nowej treści nagłówka/stopki, jeśli chcesz, aby nowa sekcja zaczynała się niezależnie od poprzedniej.PageSetup.DifferentFirstPageHeaderFooteriOddAndEvenPagesHeaderFooterdziałają tylko wtedy, gdy odpowiadające wariantyHeaderFooterType(HeaderFirst,HeaderEveni tak dalej) faktycznie istnieją wSection.HeadersFooters– włącz flagę i dodaj odpowiedni nagłówek/stopkę razem.Section.Bodyi każdyHeaderFootersą oddzielnymi instancjamiStory–Range.Fields, zakładki i inne operacje zakresowe naBodysekcji nie obejmują automatycznie jej nagłówków i stopek.
Typowe problemy
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
| Ustawienia strony nowej sekcji nie odpowiadają temu, co ustawiłem | PageSetup został ustawiony na niewłaściwej instancji Section | Ustaw PageSetup w sekcji, która follows przerwę, nie tę przed nią |
| Zawartość nagłówka/stopki z poprzedniej sekcji nieoczekiwanie pojawia się w nowej sekcji | Nagłówki/stopki nowej sekcji są nadal połączone z poprzednią sekcją | Wywołaj HeaderFooterCollection.LinkToPrevious(false) (lub dodaj odrębną zawartość nagłówka/stopki), aby je odłączyć |
| Nagłówek/stopka pierwszej lub parzystej strony jest ignorowana | DifferentFirstPageHeaderFooter / OddAndEvenPagesHeaderFooter jest false, lub pasująca wariant HeaderFooterType nie istnieje | Ustaw flagę na PageSetup i upewnij się, że odpowiedni wariant nagłówka/stopki jest obecny |
| Układ wielokolumnowy nie ma zastosowania | TextColumns.SetCount() został wywołany z liczbą 1 lub w niewłaściwej sekcji PageSetup | Wywołaj SetCount() z więcej niż jedną kolumną w sekcji docelowej PageSetup.TextColumns |
FAQ
Jak rozpocząć nową sekcję bez rozpoczynania nowej strony?
Wstaw przerwę SectionBreakContinuous przy użyciu DocumentBuilder.InsertBreak(BreakType.SectionBreakContinuous).
Jak nadać sekcji własne marginesy i orientację?
Wstaw podział sekcji, a następnie ustaw właściwości nowej sekcji PageSetup – TopMargin, BottomMargin, LeftMargin, RightMargin, Orientation i PaperSize.
Jak sprawić, aby pierwsza strona sekcji używała innego nagłówka?
Ustaw PageSetup.DifferentFirstPageHeaderFooter = true w tej sekcji i dodaj HeaderFooter typu HeaderFirst (oraz FooterFirst, jeśli potrzebne) do jej kolekcji HeadersFooters.
Jak rozłożyć tekst główny sekcji w dwóch kolumnach?
Wywołaj PageSetup.TextColumns.SetCount(2) na sekcji, a następnie dostosuj Spacing i EvenlySpaced / poszczególne wartości TextColumn.Width w razie potrzeby.
API Reference Podsumowanie
| Klasa / Enum | Opis |
|---|---|
Section | Węzeł sekcji; Body, HeadersFooters, PageSetup |
SectionCollection | Każdy Section w dokumencie, poprzez Document.Sections |
Body / Story | Główny kontener zawartości dla sekcji (Body) lub nagłówka/stopki (HeaderFooter) |
PageSetup | Wymiary strony, marginesy, orientacja, obramowania i kolumny dla sekcji |
HeaderFooter / HeaderFooterCollection | Zawartość nagłówka/stopki i typowane akcesory dla sekcji |
HeaderFooterType | Określa, który wariant nagłówka/stopki (primary, first, even) jest HeaderFooter |
TextColumn / TextColumnCollection | Układ tekstu wielokolumnowego dla sekcji |
PaperSize / Orientation / Margins | Rozmiar strony, orientacja i wstępnie ustawione wartości marginesów |
PageBorderAppliesTo / PageBorderDistanceFrom | Na których stronach drukowany jest obramowanie strony oraz jego krawędź odniesienia |
SectionStart / BreakType | Typ podziału sekcji zapisany w sekcji oraz rodzaje podziałów, które akceptuje DocumentBuilder.InsertBreak() |
LineNumberRestartMode | Kiedy automatyczna numeracja linii rozpoczyna się ponownie w sekcji |