Lavorare con le sezioni
Lavorare con le sezioni
Un documento Word è suddiviso in una o più sezioni, ognuna con la propria impostazione di pagina, margini, intestazioni e piè di pagina. Aspose.Words FOSS per .NET rappresenta una sezione come un Section nodo, contenente un Body e, facoltativamente, intestazioni e piè di pagina, oltre a un PageSetup che controlla il suo layout. Questa pagina copre il modello di oggetto sezione, l’impostazione della pagina, intestazioni e piè di pagina, e il layout del testo a più colonne.
Il modello oggetto della sezione
Document.Sections restituisce un SectionCollection – ogni Section nel documento, ognuno un CompositeNode e parte dell’albero dei nodi. Un Section contiene un Body (un Story che contiene i paragrafi e le tabelle principali della sezione) e, se presente, nodi HeaderFooter raggiungibili tramite Section.HeadersFooters, un HeaderFooterCollection. Document.FirstSection e Document.LastSection forniscono accesso diretto alle sezioni di confine. Section.AppendContent(), PrependContent() e ClearContent() manipolano il contenuto del corpo di una sezione in blocco, mentre ClearHeadersFooters() e DeleteHeaderFooterShapes() cancellano il contenuto dell’intestazione/piè di pagina.
Creare sezioni e interruzioni di sezione
DocumentBuilder.InsertBreak(BreakType) inserisce un’interruzione al cursore; BreakType include SectionBreakNewPage, SectionBreakContinuous, SectionBreakNewColumn, SectionBreakEvenPage e SectionBreakOddPage per avviare una nuova sezione, insieme ai valori non di sezione PageBreak, ColumnBreak, LineBreak e ParagraphBreak. DocumentBuilder.MoveToSection() sposta il cursore all’inizio del corpo di una sezione specifica. PageSetup.SectionStart legge o imposta il tipo di interruzione SectionStart registrato su una sezione esistente.
Impostazione della pagina
Section.PageSetup è un’istanza PageSetup che copre le dimensioni della pagina e i margini (PageWidth, PageHeight, TopMargin, BottomMargin, LeftMargin, RightMargin, Gutter), Orientation e PaperSize, e i bordi della pagina per lato (Borders, BorderAppliesTo tramite PageBorderAppliesTo, BorderDistanceFrom tramite PageBorderDistanceFrom, BorderAlwaysInFront, BorderSurroundsHeader, BorderSurroundsFooter). La numerazione delle righe è controllata da LineNumberRestartMode, LineNumberCountBy, LineNumberDistanceFromText e LineStartingNumber. PageSetup.ClearFormatting() la ripristina ai valori predefiniti.
Intestazioni e Piè di pagina
Section.HeadersFooters è un HeaderFooterCollection con accessor tipizzati – HeaderPrimary, HeaderFirst, HeaderEven, FooterPrimary, FooterFirst, FooterEven – insieme a GetByHeaderFooterType(), Add() e LinkToPrevious(). Ogni HeaderFooter è un Story (come Body) identificato dal suo HeaderFooterType e contrassegnato IsHeader / IsLinkedToPrevious. PageSetup.DifferentFirstPageHeaderFooter e PageSetup.OddAndEvenPagesHeaderFooter controllano se Word si aspetta che le varianti di intestazione/piè di pagina della prima pagina e delle pagine pari vengano utilizzate.
Colonne di Testo Multiple
PageSetup.TextColumns restituisce un TextColumnCollection (Count, EvenlySpaced, LineBetween, Spacing, Width) con SetCount() per disporre il corpo della sezione in più colonne. Le colonne individuali sono istanze TextColumn (Width, SpaceAfter) una volta che la raccolta è popolata con più di una colonna.
Suggerimenti e Buone Pratiche
- Un’interruzione di sezione trasporta la formattazione per la sezione che follows essa – impostando
PageSetupproprietà su unSectionhai appena creato (dopoInsertBreak) influisce sul contenuto che segue l’interruzione, non su quello precedente. - Usa
SectionBreakContinuousquando hai bisogno solo di una modifica alla configurazione della pagina (ad esempio, passare a testo a più colonne) senza avviare una nuova pagina; usaSectionBreakNewPagequando la nuova sezione deve sempre iniziare su una pagina nuova. HeaderFooterCollection.LinkToPrevious()ricollega l’intestazione/piè di pagina di una sezione per ereditare il contenuto della sezione precedente – esegui questa operazione prima di scrivere nuovo contenuto di intestazione/piè di pagina se desideri che la nuova sezione inizi in modo indipendente da quella precedente.PageSetup.DifferentFirstPageHeaderFootereOddAndEvenPagesHeaderFooterhanno effetto solo se le corrispondenti variantiHeaderFooterType(HeaderFirst,HeaderEven, e così via) esistono effettivamente inSection.HeadersFooters– abilita il flag e aggiungi insieme l’intestazione/piè di pagina corrispondente.Section.Bodye ciascunHeaderFootersono istanze separate diStory–Range.Fields, i segnalibri e altre operazioni a livello di intervallo sulBodydella sezione non si estendono automaticamente alle sue intestazioni e piè di pagina.
Problemi comuni
| Problema | Causa | Correzione |
|---|---|---|
| La configurazione della pagina della nuova sezione non corrisponde a quella che ho impostato | PageSetup è stato impostato sull’istanza Section sbagliata | Imposta PageSetup nella sezione che follows l’interruzione, non quella precedente |
| Il contenuto dell’intestazione/piè di pagina della sezione precedente appare inaspettatamente in una nuova sezione | Le intestazioni/piè di pagina della nuova sezione sono ancora collegate alla sezione precedente | Chiama HeaderFooterCollection.LinkToPrevious(false) (o aggiungi contenuto di intestazione/piè di pagina distinto) per scollegarli |
| L’intestazione/piè di pagina della prima pagina o delle pagine pari viene ignorata | DifferentFirstPageHeaderFooter / OddAndEvenPagesHeaderFooter è false, o la variante corrispondente HeaderFooterType non esiste | Imposta il flag su PageSetup e assicurati che la variante corrispondente di intestazione/piè di pagina sia presente |
| Il layout a più colonne non si applica | TextColumns.SetCount() è stato chiamato con un conteggio di 1, o nella PageSetup della sezione errata | Chiama SetCount() con più di una colonna nella PageSetup.TextColumns della sezione di destinazione |
FAQ
Come avvio una nuova sezione senza avviare una nuova pagina?
Inserisci un’interruzione SectionBreakContinuous con DocumentBuilder.InsertBreak(BreakType.SectionBreakContinuous).
Come assegno a una sezione i propri margini e orientamento?
Inserisci un’interruzione di sezione, quindi imposta le proprietà su PageSetup della nuova sezione – TopMargin, BottomMargin, LeftMargin, RightMargin, Orientation e PaperSize.
Come posso far usare alla prima pagina di una sezione un’intestazione diversa?
Imposta PageSetup.DifferentFirstPageHeaderFooter = true su quella sezione e aggiungi un HeaderFooter di tipo HeaderFirst (e FooterFirst, se necessario) alla sua collezione HeadersFooters.
Come dispongo il testo del corpo di una sezione in due colonne?
Chiama PageSetup.TextColumns.SetCount(2) sulla sezione, quindi regola Spacing e EvenlySpaced / i valori individuali di TextColumn.Width secondo necessità.
API Reference Riepilogo
| Classe / Enum | Descrizione |
|---|---|
Section | Un nodo di sezione; Body, HeadersFooters, PageSetup |
SectionCollection | Ogni Section nel documento, tramite Document.Sections |
Body / Story | Contenitore principale dei contenuti per una sezione (Body) o intestazione/piè di pagina (HeaderFooter) |
PageSetup | Dimensioni della pagina, margini, orientamento, bordi e colonne per una sezione |
HeaderFooter / HeaderFooterCollection | Contenuto intestazione/piè di pagina e gli accessor tipizzati per una sezione |
HeaderFooterType | Identifica quale variante di intestazione/piè di pagina (principale, prima, pari) è un HeaderFooter |
TextColumn / TextColumnCollection | Layout di testo a più colonne per una sezione |
PaperSize / Orientation / Margins | Dimensioni della pagina, orientamento e valori predefiniti dei margini |
PageBorderAppliesTo / PageBorderDistanceFrom | Quali pagine stampa il bordo della pagina e il suo margine di riferimento |
SectionStart / BreakType | Tipo di interruzione di sezione registrato su una sezione, e i tipi di interruzione DocumentBuilder.InsertBreak() accettano |
LineNumberRestartMode | Quando la numerazione automatica delle righe riprende all’interno di una sezione |