Trabajando con secciones
Trabajando con Secciones
Un documento de Word se divide en una o más secciones, cada una con su propia configuración de página, márgenes, encabezados y pies de página. Aspose.Words FOSS para .NET representa una sección como un Section nodo, que contiene un Body y, opcionalmente, encabezados y pies de página, además de un PageSetup que controla su diseño. Esta página cubre el modelo de objeto de sección, la configuración de página, los encabezados y pies de página, y el diseño de texto en varias columnas.
El Modelo de Objeto de Sección
Document.Sections devuelve un SectionCollection – cada Section en el documento, cada uno un CompositeNode y parte del árbol de nodos. Un Section contiene un Body (un Story que contiene los párrafos y tablas principales de la sección) y, cuando está presente, nodos HeaderFooter accesibles a través de Section.HeadersFooters, un HeaderFooterCollection. Document.FirstSection y Document.LastSection proporcionan acceso directo a las secciones límite. Section.AppendContent(), PrependContent() y ClearContent() manipulan el contenido del cuerpo de una sección en bloque, mientras que ClearHeadersFooters() y DeleteHeaderFooterShapes() borran el contenido del encabezado/pie de página.
Creando Secciones y Saltos de Sección
DocumentBuilder.InsertBreak(BreakType) inserta un salto en el cursor; BreakType incluye SectionBreakNewPage, SectionBreakContinuous, SectionBreakNewColumn, SectionBreakEvenPage y SectionBreakOddPage para iniciar una nueva sección, junto con los valores que no son de sección PageBreak, ColumnBreak, LineBreak y ParagraphBreak. DocumentBuilder.MoveToSection() mueve el cursor al comienzo del cuerpo de una sección específica. PageSetup.SectionStart lee o establece el tipo de salto SectionStart registrado en una sección existente.
Configuración de página
Section.PageSetup es una instancia de PageSetup que cubre las dimensiones y márgenes de la página (PageWidth, PageHeight, TopMargin, BottomMargin, LeftMargin, RightMargin, Gutter), Orientation y PaperSize, y los bordes de página por lado (Borders, BorderAppliesTo mediante PageBorderAppliesTo, BorderDistanceFrom mediante PageBorderDistanceFrom, BorderAlwaysInFront, BorderSurroundsHeader, BorderSurroundsFooter). La numeración de líneas se controla mediante LineNumberRestartMode, LineNumberCountBy, LineNumberDistanceFromText y LineStartingNumber. PageSetup.ClearFormatting() lo restablece a los valores predeterminados.
Encabezados y pies de página
Section.HeadersFooters es un HeaderFooterCollection con accesores tipados – HeaderPrimary, HeaderFirst, HeaderEven, FooterPrimary, FooterFirst, FooterEven – junto a GetByHeaderFooterType(), Add() y LinkToPrevious(). Cada HeaderFooter es un Story (como Body) identificado por su HeaderFooterType y marcado IsHeader / IsLinkedToPrevious. PageSetup.DifferentFirstPageHeaderFooter y PageSetup.OddAndEvenPagesHeaderFooter controlan si Word espera que se usen las variantes de encabezado/pie de página de primera página y de página par.
Múltiples columnas de texto
PageSetup.TextColumns devuelve un TextColumnCollection (Count, EvenlySpaced, LineBetween, Spacing, Width) con SetCount() para disponer el cuerpo de la sección en múltiples columnas. Las columnas individuales son instancias TextColumn (Width, SpaceAfter) una vez que la colección se llena con más de una columna.
Consejos y mejores prácticas
- Un salto de sección lleva el formato de la sección que follows lo – configuración
PageSetuppropiedades en unSectionacabas de crear (despuésInsertBreak) afecta al contenido que viene después del salto, no antes de él. - Utiliza
SectionBreakContinuouscuando solo necesitas un cambio de configuración de página (por ejemplo, cambiar a texto en múltiples columnas) sin iniciar una nueva página; utilizaSectionBreakNewPagecuando la nueva sección debe comenzar siempre en una página nueva. HeaderFooterCollection.LinkToPrevious()reconecta el encabezado/pie de página de una sección para heredar el contenido de la sección anterior – haga esto antes de escribir nuevo contenido de encabezado/pie de página si desea que la nueva sección comience independiente de la anterior.PageSetup.DifferentFirstPageHeaderFooteryOddAndEvenPagesHeaderFootersolo tienen efecto si las variantes correspondientes deHeaderFooterType(HeaderFirst,HeaderEven, y así sucesivamente) realmente existen enSection.HeadersFooters– habilite la bandera y añada juntos el encabezado/pie de página correspondiente.Section.Bodyy cadaHeaderFooterson instancias separadas deStory–Range.Fields, marcadores y otras operaciones basadas en rangos en elBodyde la sección no se extienden automáticamente a sus encabezados y pies de página.
Problemas comunes
| Problema | Causa | Solución |
|---|---|---|
| La configuración de página de la nueva sección no coincide con lo que configuré | PageSetup se estableció en la instancia Section incorrecta | Establecer PageSetup en la sección que follows el salto, no el anterior |
| El contenido del encabezado/pie de página de la sección anterior aparece inesperadamente en una nueva sección | Los encabezados/pies de página de la nueva sección aún están vinculados a la sección anterior | Llame a HeaderFooterCollection.LinkToPrevious(false) (o añada contenido de encabezado/pie de página distinto) para desvincularlos |
| El encabezado/pie de página de la primera página o de las páginas pares se ignora | DifferentFirstPageHeaderFooter / OddAndEvenPagesHeaderFooter es false, o la variante correspondiente de HeaderFooterType no existe | Establece la bandera en PageSetup y asegura que la variante correspondiente de encabezado/pie de página esté presente |
| El diseño de varias columnas no se aplica | TextColumns.SetCount() se llamó con un recuento de 1, o en el PageSetup de la sección incorrecta | Llama a SetCount() con más de una columna en el PageSetup.TextColumns de la sección objetivo |
FAQ
¿Cómo inicio una nueva sección sin iniciar una nueva página?
Inserte un salto SectionBreakContinuous con DocumentBuilder.InsertBreak(BreakType.SectionBreakContinuous).
¿Cómo le doy a una sección sus propios márgenes y orientación?
Inserte un salto de sección, luego establezca las propiedades en el PageSetup de la nueva sección – TopMargin, BottomMargin, LeftMargin, RightMargin, Orientation y PaperSize.
¿Cómo hago que la primera página de una sección use un encabezado diferente?
Establezca PageSetup.DifferentFirstPageHeaderFooter = true en esa sección y añada un HeaderFooter de tipo HeaderFirst (y FooterFirst, si es necesario) a su colección HeadersFooters.
¿Cómo dispongo el texto del cuerpo de una sección en dos columnas?
Llame a PageSetup.TextColumns.SetCount(2) en la sección, luego ajuste Spacing y EvenlySpaced / valores individuales de TextColumn.Width según sea necesario.
API Reference Resumen
| Clase / Enumeración | Descripción |
|---|---|
Section | Un nodo de sección; Body, HeadersFooters, PageSetup |
SectionCollection | Cada Section en el documento, mediante Document.Sections |
Body / Story | Contenedor principal de contenido para una sección (Body) o encabezado/pie de página (HeaderFooter) |
PageSetup | Dimensiones de página, márgenes, orientación, bordes y columnas para una sección |
HeaderFooter / HeaderFooterCollection | Contenido de encabezado/pie de página y los accesores tipados para una sección |
HeaderFooterType | Identifica cuál variante de encabezado/pie de página (primario, primero, par) es un HeaderFooter |
TextColumn / TextColumnCollection | Diseño de texto de varias columnas para una sección |
PaperSize / Orientation / Margins | Tamaño de página, orientación y valores de margen predefinidos |
PageBorderAppliesTo / PageBorderDistanceFrom | En qué páginas se imprime un borde de página y su borde de referencia |
SectionStart / BreakType | Tipo de salto de sección registrado en una sección, y los tipos de salto DocumentBuilder.InsertBreak() acepta |
LineNumberRestartMode | Cuando la numeración automática de líneas se reinicia dentro de una sección |