Jak pracować z sekcjami w .NET
Ten przewodnik pokazuje, jak tworzyć podziały sekcji, konfigurować ustawienia strony oraz zarządzać nagłówkami, stopkami i układem wielokolumnowym w Aspose.Words FOSS dla .NET, używając Section and PageSetup klasy. Obejmuje czytanie sekcji już znajdujących się w dokumencie, rozpoczynanie nowej sekcji za pomocą DocumentBuilder, konfigurowanie wymiarów i marginesów strony, dodawanie wariantów nagłówka i stopki oraz układanie tekstu głównego w wielu kolumnach.
Przewodnik krok po kroku
Krok 1: Zainstaluj pakiet
Aspose.Words FOSS dla .NET nie publikuje jeszcze pakietu NuGet — zamiast tego zbuduj bibliotekę ze źródeł. Sklonuj https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, a następnie zbuduj Aspose.Words.sln w konfiguracji Release przy użyciu SDK .NET i odwołaj się do powstałego zestawu Aspose.Words w swoim projekcie. Biblioteka jest skierowana na .NET Standard 2.0, więc działa na .NET Framework 4.6.2+ oraz .NET 6/8/10.
Krok 2: Zaimportuj wymagane klasy
Dodaj dyrektywę using Aspose.Words; — Section, PageSetup, HeaderFooter oraz powiązane wyliczenia użyte w tym przewodniku znajdują się bezpośrednio w przestrzeni nazw Aspose.Words razem z Document i DocumentBuilder.
Krok 3: Odczytaj sekcje już istniejące w dokumencie
Document.Sections zwraca SectionCollection zawierający każdy Section w dokumencie, każdy jest CompositeNode, który jest również częścią całego node tree. Document.FirstSection i Document.LastSection zapewniają bezpośredni dostęp do sekcji granicznych bez iteracji kolekcji. Każdy Section zawiera jeden Body — osiągany w ten sam sposób co każdy inny Story — i, jeśli jest obecny, zawartość header i footer osiągana przez Section.HeadersFooters.
Krok 4: Rozpocznij nową sekcję przy użyciu section break
Call DocumentBuilder.InsertBreak(BreakType) przy kursorsie, aby rozpocząć nową sekcję. Przekaż BreakType.SectionBreakNewPage gdy nowa sekcja powinna zawsze zaczynać się na nowej stronie, BreakType.SectionBreakContinuous gdy potrzebna jest tylko zmiana ustawień strony (na przykład przejście na tekst wielokolumnowy) bez wymuszania podziału strony, lub BreakType.SectionBreakNewColumn, SectionBreakEvenPage, i SectionBreakOddPage dla innych zachowań rozpoczynania sekcji obsługiwanych przez Word. Przerwa sekcji przenosi formatowanie dla sekcji, która follows ją, więc ustaw PageSetup właściwości w nowej Section – nie w tej poprzedniej – po wstawieniu przerwy. DocumentBuilder.MoveToSection(sectionIndex) przesuwa kursor na początek treści określonej sekcji i PageSetup.SectionStart odczytuje lub ustawia SectionStart typ przerwy już zarejestrowany w istniejącej sekcji.
Krok 5: Skonfiguruj page dimensions i margins
Każdy Section.PageSetup jest instancją PageSetup. Ustaw PageWidth, PageHeight, LeftMargin, RightMargin, TopMargin, BottomMargin i Gutter dla page dimensions i margins, albo przypisz preset Margins bezpośrednio do PageSetup.Margins. Orientation i PaperSize kontrolują page orientation i paper size. Page borders konfiguruje się przy użyciu Borders (jest to BorderCollection), BorderAppliesTo (PageBorderAppliesTo), BorderDistanceFrom (PageBorderDistanceFrom), BorderAlwaysInFront, BorderSurroundsHeader i BorderSurroundsFooter. Wywołaj PageSetup.ClearFormatting(), aby przywrócić ustawienia page setup sekcji do wartości domyślnych przed ich pełną konfiguracją.
Krok 6: Dodaj i połącz Headers i Footers
Section.HeadersFooters jest HeaderFooterCollection z typowanymi dostępnikami — HeaderPrimary, HeaderFirst, HeaderEven, FooterPrimary, FooterFirst, FooterEven — oraz GetByHeaderFooterType() do wyszukiwania po HeaderFooterType i Add(), aby dodać nowy element. Każdy HeaderFooter jest Story, oznaczony jako IsHeader i IsLinkedToPrevious. Włącz PageSetup.DifferentFirstPageHeaderFooter lub PageSetup.OddAndEvenPagesHeaderFooter przed dodaniem odpowiadającej wariantu HeaderFirst/FooterFirst lub HeaderEven/FooterEven — flaga i wariant działają tylko razem. Wywołaj HeaderFooterCollection.LinkToPrevious(), aby ponownie połączyć header lub footer sekcji, aby odziedziczyć zawartość poprzedniej sekcji, lub odłączyć je, aby nowa sekcja zaczęła się od niezależnej treści.
Krok 7: Rozmieść tekst główny w wielu kolumnach
PageSetup.TextColumns zwraca TextColumnCollection dla sekcji. Wywołaj SetCount() z liczbą kolumn, do których ma płynąć tekst główny, a następnie dostosuj EvenlySpaced, Spacing, LineBetween i Width, aby kontrolować układ kolumn. Gdy kolekcja zawiera więcej niż jedną kolumnę, poszczególne wystąpienia TextColumn udostępniają własne Width i SpaceAfter.
Krok 8: Wyczyść lub masowo edytuj zawartość sekcji
Section.AppendContent() i PrependContent() kopiują treść główną innej sekcji do tej; ClearContent() opróżnia treść główną sekcji masowo. ClearHeadersFooters() i DeleteHeaderFooterShapes() czyszczą zawartość nagłówka i stopki w całej sekcji, nie usuwając samej sekcji.
Typowe problemy i rozwiązania
Ustawienia strony nowej sekcji nie odpowiadają temu, co ustawiłem PageSetup zostało ustawione na niewłaściwym Section instancji. Przerwa sekcji przenosi formatowanie dla sekcji, która następuje po niej – ustaw PageSetup na sekcji, która następuje po niej InsertBreak(), nie tej przed nią.
Treść nagłówka lub stopki z poprzedniej sekcji nieoczekiwanie pojawia się w nowej sekcji Nagłówek lub stopka nowej sekcji jest nadal powiązana z poprzednią sekcją. Call HeaderFooterCollection.LinkToPrevious(false), lub dodaj odrębną treść nagłówka/stopki do nowej sekcji, aby odłączyć ją.
Nagłówek/stopka pierwszej lub parzystej strony jest ignorowany DifferentFirstPageHeaderFooter or OddAndEvenPagesHeaderFooter is false, lub dopasowanie HeaderFooterType wariant nie istnieje w Section.HeadersFooters. Ustaw flagę na PageSetup i dodaj razem odpowiedni wariant nagłówka/stopki.
Układ wielokolumnowy nie ma zastosowania TextColumns.SetCount() został wywołany z liczbą jeden, lub w niewłaściwej sekcji PageSetup. Wywołaj SetCount() z więcej niż jedną kolumną w docelowej sekcji’s PageSetup.TextColumns.
Podział sekcji wstawiony w niewłaściwej pozycji dokumentu DocumentBuilder.InsertBreak(BreakType) wstawia w bieżącym kursorze konstruktora. Use DocumentBuilder.MoveToSection() lub inne członki pozycjonowania kursora konstruktora, aby ustawić kursor przed wywołaniem InsertBreak().
Najczęściej zadawane pytania
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 TopMargin, BottomMargin, LeftMargin, RightMargin, Orientation i PaperSize w PageSetup nowej sekcji.
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 treści sekcji w dwóch kolumnach?
Wywołaj PageSetup.TextColumns.SetCount(2) na sekcji, a następnie dostosuj Spacing, EvenlySpaced lub poszczególne wartości TextColumn.Width, w razie potrzeby.
Jak uzyskać dostęp do pierwszej i ostatniej sekcji bezpośrednio?
Odczytaj Document.FirstSection i Document.LastSection zamiast indeksować Document.Sections.