Arbeiten mit Abschnitten
Arbeiten mit Abschnitten
Ein Word-Dokument ist in ein oder mehrere Abschnitte unterteilt, von denen jeder seine eigene Seiteneinrichtung, Ränder, Kopf- und Fußzeilen hat. Aspose.Words FOSS für .NET repräsentiert einen Abschnitt als ein Section Knoten, der ein Body und optional Kopf- und Fußzeilen, plus ein PageSetup die sein Layout steuert. Diese Seite behandelt das Abschnitt-Objektmodell, die Seiteneinrichtung, Kopf- und Fußzeilen sowie das mehrspaltige Textlayout.
Das Abschnitts-Objektmodell
Document.Sections gibt ein SectionCollection zurück – jedes Section im Dokument, jeweils ein CompositeNode und Teil des Knotensbaums. Ein Section enthält einen Body (ein Story, das die Hauptabsätze und Tabellen des Abschnitts hält) und, falls vorhanden, HeaderFooter-Knoten, die über Section.HeadersFooters erreichbar sind, ein HeaderFooterCollection. Document.FirstSection und Document.LastSection bieten direkten Zugriff auf die Randabschnitte. Section.AppendContent(), PrependContent() und ClearContent() manipulieren den Body-Inhalt eines Abschnitts in großen Mengen, während ClearHeadersFooters() und DeleteHeaderFooterShapes() Kopf-/Fußzeilen-Inhalte löschen.
Erstellen von Abschnitten und Abschnittsumbrüchen
DocumentBuilder.InsertBreak(BreakType) fügt an der Cursorposition einen Umbruch ein; BreakType umfasst SectionBreakNewPage, SectionBreakContinuous, SectionBreakNewColumn, SectionBreakEvenPage und SectionBreakOddPage zum Starten eines neuen Abschnitts, zusammen mit den Nicht-Abschnitts-Werten PageBreak, ColumnBreak, LineBreak und ParagraphBreak. DocumentBuilder.MoveToSection() bewegt den Cursor zum Beginn des Body eines bestimmten Abschnitts. PageSetup.SectionStart liest oder setzt den SectionStart-Umbruchtyp, der für einen bestehenden Abschnitt gespeichert ist.
Seiteneinrichtung
Section.PageSetup ist eine PageSetup-Instanz, die Seitenabmessungen und -ränder abdeckt (PageWidth, PageHeight, TopMargin, BottomMargin, LeftMargin, RightMargin, Gutter), Orientation und PaperSize, sowie seitenbezogene Seitenränder (Borders, BorderAppliesTo über PageBorderAppliesTo, BorderDistanceFrom über PageBorderDistanceFrom, BorderAlwaysInFront, BorderSurroundsHeader, BorderSurroundsFooter). Die Zeilennummerierung wird von LineNumberRestartMode, LineNumberCountBy, LineNumberDistanceFromText und LineStartingNumber gesteuert. PageSetup.ClearFormatting() setzt sie auf die Vorgaben zurück.
Kopf- und Fußzeilen
Section.HeadersFooters ist ein HeaderFooterCollection mit typisierten Zugriffen – HeaderPrimary, HeaderFirst, HeaderEven, FooterPrimary, FooterFirst, FooterEven – sowie GetByHeaderFooterType(), Add() und LinkToPrevious(). Jeder HeaderFooter ist ein Story (wie Body), der durch sein HeaderFooterType identifiziert und als IsHeader / IsLinkedToPrevious gekennzeichnet wird. PageSetup.DifferentFirstPageHeaderFooter und PageSetup.OddAndEvenPagesHeaderFooter steuern, ob Word die Varianten für erste Seite und gerade Seite von Kopf-/Fußzeilen überhaupt verwendet.
Mehrere Textspalten
PageSetup.TextColumns liefert ein TextColumnCollection (Count, EvenlySpaced, LineBetween, Spacing, Width) mit SetCount(), um den Abschnittsinhalt in mehreren Spalten anzuordnen. Einzelne Spalten sind TextColumn-Instanzen (Width, SpaceAfter), sobald die Sammlung mit mehr als einer Spalte gefüllt ist.
Tipps und bewährte Vorgehensweisen
- Ein Abschnittsumbruch übernimmt die Formatierung für den Abschnitt, der follows es – Einstellung
PageSetupEigenschaften auf einerSectiondie du gerade erstellt hast (nachInsertBreak) wirkt sich auf den Inhalt aus, der nach dem Umbruch kommt, nicht davor. - Verwenden Sie
SectionBreakContinuous, wenn Sie nur eine Seitenlayout-Änderung benötigen (zum Beispiel das Umschalten auf mehrspaltigen Text), ohne eine neue Seite zu beginnen; verwenden SieSectionBreakNewPage, wenn der neue Abschnitt immer auf einer frischen Seite beginnen soll. HeaderFooterCollection.LinkToPrevious()verbindet die Kopf-/Fußzeile eines Abschnitts neu, um den Inhalt des vorherigen Abschnitts zu übernehmen – führen Sie dies aus, bevor Sie neue Kopf-/Fußzeileninhalte schreiben, wenn der neue Abschnitt unabhängig vom vorherigen beginnen soll.PageSetup.DifferentFirstPageHeaderFooterundOddAndEvenPagesHeaderFooterwirken nur, wenn die entsprechendenHeaderFooterType-Varianten (HeaderFirst,HeaderEvenusw.) tatsächlich inSection.HeadersFootersvorhanden sind – aktivieren Sie das Flag und fügen Sie die entsprechende Kopf-/Fußzeile zusammen.Section.Bodyund jedesHeaderFootersind separateStory-Instanzen –Range.Fields, Lesezeichen und andere bereichsbezogene Operationen amBodydes Abschnitts greifen nicht automatisch auf dessen Kopf-/Fußzeilen zu.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
| Die Seiteneinrichtung des neuen Abschnitts stimmt nicht mit dem überein, was ich festgelegt habe | PageSetup wurde auf der falschen Section-Instanz gesetzt | Festlegen PageSetup auf den Abschnitt, der follows den Umbruch, nicht den vorherigen |
| Header/footer-Inhalt aus dem vorherigen Abschnitt erscheint unerwartet in einem neuen Abschnitt | Die Header/Footers des neuen Abschnitts sind noch mit dem vorherigen Abschnitt verknüpft | Rufen Sie HeaderFooterCollection.LinkToPrevious(false) (oder fügen Sie unterschiedliche Header/footer-Inhalte hinzu) auf, um sie zu entkoppeln |
| Header/footer der ersten Seite oder einer geraden Seite wird ignoriert | DifferentFirstPageHeaderFooter / OddAndEvenPagesHeaderFooter ist false, oder die passende HeaderFooterType-Variante existiert nicht | Setzen Sie das Flag auf PageSetup und stellen Sie sicher, dass die entsprechende Header-/Footer-Variante vorhanden ist |
| Mehrspaltiges Layout gilt nicht | TextColumns.SetCount() wurde mit einer Anzahl von 1 aufgerufen, oder im falschen Abschnitts PageSetup | Rufen Sie SetCount() mit mehr als einer Spalte im PageSetup.TextColumns des Zielabschnitts auf |
FAQ
Wie starte ich einen neuen Abschnitt, ohne eine neue Seite zu beginnen?
Fügen Sie einen SectionBreakContinuous-Umbruch mit DocumentBuilder.InsertBreak(BreakType.SectionBreakContinuous) ein.
Wie gebe ich einem Abschnitt eigene Ränder und Orientierung?
Fügen Sie einen Abschnittsumbruch ein, dann setzen Sie die Eigenschaften des neuen Abschnitts PageSetup – TopMargin, BottomMargin, LeftMargin, RightMargin, Orientation und PaperSize.
Wie kann ich bewirken, dass die erste Seite eines Abschnitts eine andere Kopfzeile verwendet?
Setzen Sie PageSetup.DifferentFirstPageHeaderFooter = true für diesen Abschnitt und fügen Sie seiner HeadersFooters-Sammlung ein HeaderFooter vom Typ HeaderFirst (und FooterFirst, falls nötig) hinzu.
Wie lege ich den Fließtext eines Abschnitts in zwei Spalten an?
Rufen Sie PageSetup.TextColumns.SetCount(2) für den Abschnitt auf und passen Sie dann Spacing und EvenlySpaced / einzelne TextColumn.Width-Werte nach Bedarf an.
API Reference Zusammenfassung
| Klasse / Enum | Beschreibung |
|---|---|
Section | Ein Abschnittsknoten; Body, HeadersFooters, PageSetup |
SectionCollection | Jedes Section im Dokument, über Document.Sections |
Body / Story | Haupt-Content-Container für einen Abschnitt (Body) oder Kopf-/Fußzeile (HeaderFooter) |
PageSetup | Seitengrößen, Ränder, Ausrichtung, Rahmen und Spalten für einen Abschnitt |
HeaderFooter / HeaderFooterCollection | Kopf-/Fußzeileninhalt und die typisierten Accessoren für einen Abschnitt |
HeaderFooterType | Identifiziert, welche Header/Footer-Variante (primary, first, even) ein HeaderFooter ist |
TextColumn / TextColumnCollection | Mehrspaltiges Textlayout für einen Abschnitt |
PaperSize / Orientation / Margins | Seitengröße, Ausrichtung und vordefinierte Randwerte |
PageBorderAppliesTo / PageBorderDistanceFrom | Auf welchen Seiten ein Seitenrand gedruckt wird und welche Referenzkante er hat |
SectionStart / BreakType | Abschnittstrennungsart, die auf einem Abschnitt aufgezeichnet wird, und die Trennungsarten, die DocumentBuilder.InsertBreak() akzeptiert |
LineNumberRestartMode | Wenn die automatische Zeilennummerierung innerhalb eines Abschnitts neu startet |