Εργασία με Ενότητες
Εργασία με Ενότητες
Ένα έγγραφο Word διαιρείται σε μία ή περισσότερες ενότητες, η καθεμία με τη δική της διαμόρφωση σελίδας, περιθώρια, κεφαλίδες και υποσέλιδα. Aspose.Words FOSS για .NET αντιπροσωπεύει μια ενότητα ως Section κόμβο, που περιέχει ένα Body και, προαιρετικά, κεφαλίδες και υποσέλιδα, συν ένα PageSetup που ελέγχει τη διάταξή του. Αυτή η σελίδα καλύπτει το μοντέλο αντικειμένου ενότητας, τη διαμόρφωση σελίδας, τις κεφαλίδες και τα υποσέλιδα, καθώς και τη διάταξη κειμένου πολλαπλών στηλών.
Το Μοντέλο Αντικειμένου Τμήματος
Document.Sections επιστρέφει ένα SectionCollection – κάθε Section στο έγγραφο, το καθένα είναι CompositeNode και μέρος του δέντρου κόμβων. Ένα Section περιέχει ένα Body (ένα Story που περιέχει τις κύριες παραγράφους και πίνακες του τμήματος) και, όταν υπάρχει, κόμβους HeaderFooter προσβάσιμους μέσω Section.HeadersFooters, ένα HeaderFooterCollection. Τα Document.FirstSection και Document.LastSection παρέχουν άμεση πρόσβαση στα οριακά τμήματα. Τα Section.AppendContent(), PrependContent() και ClearContent() χειρίζονται μαζικά το περιεχόμενο του σώματος ενός τμήματος, ενώ τα ClearHeadersFooters() και DeleteHeaderFooterShapes() διαγράφουν το περιεχόμενο της κεφαλίδας/υποσέλιδου.
Δημιουργία Τμημάτων και Αλλαγών Τμημάτων
DocumentBuilder.InsertBreak(BreakType) εισάγει μια αλλαγή στη θέση του δρομέα· BreakType περιλαμβάνει τα SectionBreakNewPage, SectionBreakContinuous, SectionBreakNewColumn, SectionBreakEvenPage και SectionBreakOddPage για την έναρξη νέου τμήματος, μαζί με τις μη-τμηματικές τιμές PageBreak, ColumnBreak, LineBreak και ParagraphBreak. DocumentBuilder.MoveToSection() μετακινεί τον δρομέα στην αρχή του σώματος ενός συγκεκριμένου τμήματος. PageSetup.SectionStart διαβάζει ή ορίζει τον τύπο αλλαγής SectionStart που έχει καταγραφεί σε ένα υπάρχον τμήμα.
Διαμόρφωση Σελίδας
Section.PageSetup είναι ένα PageSetup αντικείμενο που καλύπτει τις διαστάσεις της σελίδας και τα περιθώρια (PageWidth, PageHeight, TopMargin, BottomMargin, LeftMargin, RightMargin, Gutter), Orientation και PaperSize, καθώς και τα πλαίσια της σελίδας ανά πλευρά (Borders, BorderAppliesTo μέσω PageBorderAppliesTo, BorderDistanceFrom μέσω PageBorderDistanceFrom, BorderAlwaysInFront, BorderSurroundsHeader, BorderSurroundsFooter). Η αρίθμηση γραμμών ελέγχεται από LineNumberRestartMode, LineNumberCountBy, LineNumberDistanceFromText και LineStartingNumber. Το PageSetup.ClearFormatting() το επαναφέρει στις προεπιλογές.
Κεφαλίδες και Υποσέλιδα
Section.HeadersFooters είναι ένα HeaderFooterCollection με τυποποιημένους προσπελάτες – HeaderPrimary, HeaderFirst, HeaderEven, FooterPrimary, FooterFirst, FooterEven – μαζί με GetByHeaderFooterType(), Add() και LinkToPrevious(). Κάθε HeaderFooter είναι ένα Story (όπως το Body) που αναγνωρίζεται από το HeaderFooterType του και σημαδεύεται ως IsHeader / IsLinkedToPrevious. Τα PageSetup.DifferentFirstPageHeaderFooter και PageSetup.OddAndEvenPagesHeaderFooter ελέγχουν αν το Word αναμένει να χρησιμοποιηθούν οι παραλλαγές κεφαλίδας/υποσέλιδου για την πρώτη σελίδα και για τις ζυγές σελίδες.
Πολλαπλές Στήλες Κειμένου
PageSetup.TextColumns επιστρέφει ένα TextColumnCollection (Count, EvenlySpaced, LineBetween, Spacing, Width) με SetCount() για να διατάξει το σώμα της ενότητας σε πολλαπλές στήλες. Τα μεμονωμένα στοιχεία στήλης είναι αντικείμενα TextColumn (Width, SpaceAfter) μόλις η συλλογή γεμίσει με περισσότερες από μία στήλες.
Συμβουλές και Καλές Πρακτικές
- Μία αλλαγή ενότητας μεταφέρει τη μορφοποίηση για την ενότητα που follows αυτή – ρυθμίζει
PageSetupιδιότητες σε έναSectionπου μόλις δημιουργήσατε (μετάInsertBreak) επηρεάζει το περιεχόμενο που ακολουθεί το διάλειμμα, όχι πριν από αυτό. - Χρησιμοποιήστε το
SectionBreakContinuousόταν χρειάζεστε μόνο μια αλλαγή στη ρύθμιση της σελίδας (π.χ., αλλαγή σε κείμενο πολλαπλών στηλών) χωρίς να ξεκινάτε νέα σελίδα· χρησιμοποιήστε τοSectionBreakNewPageόταν η νέα ενότητα πρέπει πάντα να ξεκινά σε μια καθαρή σελίδα. HeaderFooterCollection.LinkToPrevious()επανασυνδέει την κεφαλίδα/υποσέλιδο μιας ενότητας ώστε να κληρονομήσει το περιεχόμενο της προηγούμενης ενότητας – κάντε αυτό πριν γράψετε νέο περιεχόμενο κεφαλίδας/υποσέλιδου αν θέλετε η νέα ενότητα να ξεκινά ανεξάρτητα από την προηγούμενη.PageSetup.DifferentFirstPageHeaderFooterκαιOddAndEvenPagesHeaderFooterέχουν ισχύ μόνο εάν οι αντίστοιχες παραλλαγέςHeaderFooterType(HeaderFirst,HeaderEven, κ.λπ.) υπάρχουν πραγματικά στοSection.HeadersFooters– ενεργοποιήστε τη σημαία και προσθέστε την αντίστοιχη κεφαλίδα/υποσέλιδο μαζί.Section.Bodyκαι κάθεHeaderFooterείναι ξεχωριστές εμφανίσειςStory–Range.Fields, σελιδοδείκτες και άλλες λειτουργίες περιορισμένες σε εύρος στοBodyτης ενότητας δεν επεκτείνονται αυτόματα στις κεφαλίδες και τα υποσέλιδα της.
Κοινά Προβλήματα
| Πρόβλημα | Αιτία | Διόρθωση |
|---|---|---|
| Η ρύθμιση σελίδας της νέας ενότητας δεν ταιριάζει με ό,τι όρισα | PageSetup ορίστηκε στο λάθος Section παράδειγμα | Ορισμός PageSetup στην ενότητα που follows το διάλειμμα, όχι το προηγούμενο |
| Το περιεχόμενο κεφαλίδας/υποσέλιδου από την προηγούμενη ενότητα εμφανίζεται απροσδόκητα σε νέα ενότητα | Οι κεφαλίδες/υποσέλιδα της νέας ενότητας παραμένουν συνδεδεμένα με την προηγούμενη ενότητα | Καλέστε HeaderFooterCollection.LinkToPrevious(false) (ή προσθέστε ξεχωριστό περιεχόμενο κεφαλίδας/υποσέλιδου) για να τα αποσυνδέσετε |
| Η κεφαλίδα/υποσέλιδο της πρώτης σελίδας ή των ζυγών σελίδων αγνοείται | DifferentFirstPageHeaderFooter / OddAndEvenPagesHeaderFooter είναι false, ή η αντίστοιχη παραλλαγή HeaderFooterType δεν υπάρχει | Ορίστε τη σημαία στο PageSetup και βεβαιωθείτε ότι υπάρχει η αντίστοιχη παραλλαγή header/footer |
| Η διάταξη πολλαπλών στηλών δεν εφαρμόζεται | TextColumns.SetCount() κλήθηκε με μέτρηση 1, ή στο λανθασμένο PageSetup της ενότητας | Καλέστε το SetCount() με περισσότερες από μία στήλες στο PageSetup.TextColumns της στοχευμένης ενότητας |
FAQ
Πώς μπορώ να ξεκινήσω μια νέα ενότητα χωρίς να ξεκινήσω νέα σελίδα;
Εισάγετε μια διακοπή SectionBreakContinuous με DocumentBuilder.InsertBreak(BreakType.SectionBreakContinuous).
Πώς μπορώ να δώσω σε μια ενότητα τα δικά της περιθώρια και προσανατολισμό;
Εισαγάγετε ένα διάλειμμα ενότητας, στη συνέχεια ορίστε τις ιδιότητες στο νέο τμήμα PageSetup – TopMargin, BottomMargin, LeftMargin, RightMargin, Orientation και PaperSize.
Πώς μπορώ να κάνω τη πρώτη σελίδα μιας ενότητας να χρησιμοποιεί διαφορετική κεφαλίδα;
Ορίστε το PageSetup.DifferentFirstPageHeaderFooter = true σε αυτήν την ενότητα και προσθέστε ένα HeaderFooter τύπου HeaderFirst (και FooterFirst, αν χρειάζεται) στη συλλογή HeadersFooters της.
Πώς μπορώ να διατάξω το κείμενο του σώματος μιας ενότητας σε δύο στήλες;
Καλέστε το PageSetup.TextColumns.SetCount(2) στην ενότητα, στη συνέχεια προσαρμόστε τα Spacing και EvenlySpaced / τις μεμονωμένες τιμές TextColumn.Width όπως χρειάζεται.
API Reference Περίληψη
| Κλάση / Enum | Περιγραφή |
|---|---|
Section | Κόμβος ενότητας· Body, HeadersFooters, PageSetup |
SectionCollection | Κάθε Section στο έγγραφο, μέσω Document.Sections |
Body / Story | Κύριο δοχείο περιεχομένου για ενότητα (Body) ή κεφαλίδα/υποσέλιδο (HeaderFooter) |
PageSetup | Διαστάσεις σελίδας, περιθώρια, προσανατολισμός, πλαίσια και στήλες για μια ενότητα |
HeaderFooter / HeaderFooterCollection | Περιεχόμενο κεφαλίδας/υποσέλιδου και οι τυποποιημένοι προσπελάτες για μια ενότητα |
HeaderFooterType | Καθορίζει ποια παραλλαγή κεφαλίδας/υποσέλιδου (primary, first, even) είναι ένα HeaderFooter |
TextColumn / TextColumnCollection | Διάταξη κειμένου πολλαπλών στηλών για μια ενότητα |
PaperSize / Orientation / Margins | Μέγεθος σελίδας, προσανατολισμός και προεπιλεγμένες τιμές περιθωρίων |
PageBorderAppliesTo / PageBorderDistanceFrom | Ποιες σελίδες εκτυπώνει το περίγραμμα σελίδας και η άκρη αναφοράς του |
SectionStart / BreakType | Τύπος διακοπής ενότητας που καταγράφεται σε μια ενότητα, και οι τύποι διακοπής που δέχεται το DocumentBuilder.InsertBreak() |
LineNumberRestartMode | Πότε η αυτόματη αρίθμηση γραμμών επανεκκινείται εντός μιας ενότητας |