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 PageSetup właściwości na a Section właśnie utworzyłeś (po InsertBreak) 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żyj SectionBreakNewPage, 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.DifferentFirstPageHeaderFooter i OddAndEvenPagesHeaderFooter działają tylko wtedy, gdy odpowiadające warianty HeaderFooterType (HeaderFirst, HeaderEven i tak dalej) faktycznie istnieją w Section.HeadersFooters – włącz flagę i dodaj odpowiedni nagłówek/stopkę razem.
  • Section.Body i każdy HeaderFooter są oddzielnymi instancjami Story – Range.Fields, zakładki i inne operacje zakresowe na Body sekcji nie obejmują automatycznie jej nagłówków i stopek.

Typowe problemy

ProblemPrzyczynaRozwiązanie
Ustawienia strony nowej sekcji nie odpowiadają temu, co ustawiłemPageSetup został ustawiony na niewłaściwej instancji SectionUstaw PageSetup w sekcji, która follows przerwę, nie tę przed nią
Zawartość nagłówka/stopki z poprzedniej sekcji nieoczekiwanie pojawia się w nowej sekcjiNagłó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 ignorowanaDifferentFirstPageHeaderFooter / OddAndEvenPagesHeaderFooter jest false, lub pasująca wariant HeaderFooterType nie istniejeUstaw flagę na PageSetup i upewnij się, że odpowiedni wariant nagłówka/stopki jest obecny
Układ wielokolumnowy nie ma zastosowaniaTextColumns.SetCount() został wywołany z liczbą 1 lub w niewłaściwej sekcji PageSetupWywoł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 / EnumOpis
SectionWęzeł sekcji; Body, HeadersFooters, PageSetup
SectionCollectionKażdy Section w dokumencie, poprzez Document.Sections
Body / StoryGłówny kontener zawartości dla sekcji (Body) lub nagłówka/stopki (HeaderFooter)
PageSetupWymiary strony, marginesy, orientacja, obramowania i kolumny dla sekcji
HeaderFooter / HeaderFooterCollectionZawartość nagłówka/stopki i typowane akcesory dla sekcji
HeaderFooterTypeOkreśla, który wariant nagłówka/stopki (primary, first, even) jest HeaderFooter
TextColumn / TextColumnCollectionUkład tekstu wielokolumnowego dla sekcji
PaperSize / Orientation / MarginsRozmiar strony, orientacja i wstępnie ustawione wartości marginesów
PageBorderAppliesTo / PageBorderDistanceFromNa których stronach drukowany jest obramowanie strony oraz jego krawędź odniesienia
SectionStart / BreakTypeTyp podziału sekcji zapisany w sekcji oraz rodzaje podziałów, które akceptuje DocumentBuilder.InsertBreak()
LineNumberRestartModeKiedy automatyczna numeracja linii rozpoczyna się ponownie w sekcji

Zobacz także

 Polski