Arbeiten mit Abschnitten

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 PageSetup Eigenschaften auf einer Section die du gerade erstellt hast (nach InsertBreak) 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 Sie SectionBreakNewPage, 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.DifferentFirstPageHeaderFooter und OddAndEvenPagesHeaderFooter wirken nur, wenn die entsprechenden HeaderFooterType-Varianten (HeaderFirst, HeaderEven usw.) tatsächlich in Section.HeadersFooters vorhanden sind – aktivieren Sie das Flag und fügen Sie die entsprechende Kopf-/Fußzeile zusammen.
  • Section.Body und jedes HeaderFooter sind separate Story-Instanzen – Range.Fields, Lesezeichen und andere bereichsbezogene Operationen am Body des Abschnitts greifen nicht automatisch auf dessen Kopf-/Fußzeilen zu.

Häufige Probleme

ProblemUrsacheLösung
Die Seiteneinrichtung des neuen Abschnitts stimmt nicht mit dem überein, was ich festgelegt habePageSetup wurde auf der falschen Section-Instanz gesetztFestlegen PageSetup auf den Abschnitt, der follows den Umbruch, nicht den vorherigen
Header/footer-Inhalt aus dem vorherigen Abschnitt erscheint unerwartet in einem neuen AbschnittDie Header/Footers des neuen Abschnitts sind noch mit dem vorherigen Abschnitt verknüpftRufen 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 ignoriertDifferentFirstPageHeaderFooter / OddAndEvenPagesHeaderFooter ist false, oder die passende HeaderFooterType-Variante existiert nichtSetzen Sie das Flag auf PageSetup und stellen Sie sicher, dass die entsprechende Header-/Footer-Variante vorhanden ist
Mehrspaltiges Layout gilt nichtTextColumns.SetCount() wurde mit einer Anzahl von 1 aufgerufen, oder im falschen Abschnitts PageSetupRufen 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 / EnumBeschreibung
SectionEin Abschnittsknoten; Body, HeadersFooters, PageSetup
SectionCollectionJedes Section im Dokument, über Document.Sections
Body / StoryHaupt-Content-Container für einen Abschnitt (Body) oder Kopf-/Fußzeile (HeaderFooter)
PageSetupSeitengrößen, Ränder, Ausrichtung, Rahmen und Spalten für einen Abschnitt
HeaderFooter / HeaderFooterCollectionKopf-/Fußzeileninhalt und die typisierten Accessoren für einen Abschnitt
HeaderFooterTypeIdentifiziert, welche Header/Footer-Variante (primary, first, even) ein HeaderFooter ist
TextColumn / TextColumnCollectionMehrspaltiges Textlayout für einen Abschnitt
PaperSize / Orientation / MarginsSeitengröße, Ausrichtung und vordefinierte Randwerte
PageBorderAppliesTo / PageBorderDistanceFromAuf welchen Seiten ein Seitenrand gedruckt wird und welche Referenzkante er hat
SectionStart / BreakTypeAbschnittstrennungsart, die auf einem Abschnitt aufgezeichnet wird, und die Trennungsarten, die DocumentBuilder.InsertBreak() akzeptiert
LineNumberRestartModeWenn die automatische Zeilennummerierung innerhalb eines Abschnitts neu startet

Siehe auch

 Deutsch