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 PageSetup proprietà su un Section hai appena creato (dopo InsertBreak) influisce sul contenuto che segue l’interruzione, non su quello precedente.
  • Usa SectionBreakContinuous quando hai bisogno solo di una modifica alla configurazione della pagina (ad esempio, passare a testo a più colonne) senza avviare una nuova pagina; usa SectionBreakNewPage quando 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.DifferentFirstPageHeaderFooter e OddAndEvenPagesHeaderFooter hanno effetto solo se le corrispondenti varianti HeaderFooterType (HeaderFirst, HeaderEven, e così via) esistono effettivamente in Section.HeadersFooters – abilita il flag e aggiungi insieme l’intestazione/piè di pagina corrispondente.
  • Section.Body e ciascun HeaderFooter sono istanze separate di Story – Range.Fields, i segnalibri e altre operazioni a livello di intervallo sul Body della sezione non si estendono automaticamente alle sue intestazioni e piè di pagina.

Problemi comuni

ProblemaCausaCorrezione
La configurazione della pagina della nuova sezione non corrisponde a quella che ho impostatoPageSetup è stato impostato sull’istanza Section sbagliataImposta 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 sezioneLe intestazioni/piè di pagina della nuova sezione sono ancora collegate alla sezione precedenteChiama 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 ignorataDifferentFirstPageHeaderFooter / OddAndEvenPagesHeaderFooter è false, o la variante corrispondente HeaderFooterType non esisteImposta il flag su PageSetup e assicurati che la variante corrispondente di intestazione/piè di pagina sia presente
Il layout a più colonne non si applicaTextColumns.SetCount() è stato chiamato con un conteggio di 1, o nella PageSetup della sezione errataChiama 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 / EnumDescrizione
SectionUn nodo di sezione; Body, HeadersFooters, PageSetup
SectionCollectionOgni Section nel documento, tramite Document.Sections
Body / StoryContenitore principale dei contenuti per una sezione (Body) o intestazione/piè di pagina (HeaderFooter)
PageSetupDimensioni della pagina, margini, orientamento, bordi e colonne per una sezione
HeaderFooter / HeaderFooterCollectionContenuto intestazione/piè di pagina e gli accessor tipizzati per una sezione
HeaderFooterTypeIdentifica quale variante di intestazione/piè di pagina (principale, prima, pari) è un HeaderFooter
TextColumn / TextColumnCollectionLayout di testo a più colonne per una sezione
PaperSize / Orientation / MarginsDimensioni della pagina, orientamento e valori predefiniti dei margini
PageBorderAppliesTo / PageBorderDistanceFromQuali pagine stampa il bordo della pagina e il suo margine di riferimento
SectionStart / BreakTypeTipo di interruzione di sezione registrato su una sezione, e i tipi di interruzione DocumentBuilder.InsertBreak() accettano
LineNumberRestartModeQuando la numerazione automatica delle righe riprende all’interno di una sezione

Vedi anche

 Italiano