Trabalhando com Seções
Trabalhando com Seções
Um documento do Word é dividido em uma ou mais seções, cada uma com sua própria configuração de página, margens, cabeçalhos e rodapés. Aspose.Words FOSS para .NET representa uma seção como um Section nó, contendo um Body e, opcionalmente, cabeçalhos e rodapés, além de um PageSetup que controla seu layout. Esta página aborda o modelo de objeto de seção, configuração de página, cabeçalhos e rodapés, e layout de texto em múltiplas colunas.
O Modelo de Objeto da Seção
Document.Sections retorna um SectionCollection – cada Section no documento, cada um um CompositeNode e parte da árvore de nós. Um Section contém um Body (um Story que contém os parágrafos e tabelas principais da seção) e, quando presente, nós HeaderFooter acessíveis através de Section.HeadersFooters, um HeaderFooterCollection. Document.FirstSection e Document.LastSection fornecem acesso direto às seções de limite. Section.AppendContent(), PrependContent() e ClearContent() manipulam o conteúdo do corpo da seção em bloco, enquanto ClearHeadersFooters() e DeleteHeaderFooterShapes() limpam o conteúdo de cabeçalho/rodapé.
Criando Seções e Quebras de Seção
DocumentBuilder.InsertBreak(BreakType) insere uma quebra no cursor; BreakType inclui SectionBreakNewPage, SectionBreakContinuous, SectionBreakNewColumn, SectionBreakEvenPage e SectionBreakOddPage para iniciar uma nova seção, juntamente com os valores que não são de seção PageBreak, ColumnBreak, LineBreak e ParagraphBreak. DocumentBuilder.MoveToSection() move o cursor para o início do corpo de uma seção específica. PageSetup.SectionStart lê ou define o tipo de quebra SectionStart registrado em uma seção existente.
Configuração de Página
Section.PageSetup é uma instância de PageSetup que cobre dimensões da página e margens (PageWidth, PageHeight, TopMargin, BottomMargin, LeftMargin, RightMargin, Gutter), Orientation e PaperSize, e bordas de página por lado (Borders, BorderAppliesTo via PageBorderAppliesTo, BorderDistanceFrom via PageBorderDistanceFrom, BorderAlwaysInFront, BorderSurroundsHeader, BorderSurroundsFooter). A numeração de linhas é controlada por LineNumberRestartMode, LineNumberCountBy, LineNumberDistanceFromText e LineStartingNumber. PageSetup.ClearFormatting() redefine-a para os padrões.
Cabeçalhos e Rodapés
Section.HeadersFooters é um HeaderFooterCollection com acessores tipados – HeaderPrimary, HeaderFirst, HeaderEven, FooterPrimary, FooterFirst, FooterEven – juntamente com GetByHeaderFooterType(), Add() e LinkToPrevious(). Cada HeaderFooter é um Story (como Body) identificado pelo seu HeaderFooterType e marcado como IsHeader / IsLinkedToPrevious. PageSetup.DifferentFirstPageHeaderFooter e PageSetup.OddAndEvenPagesHeaderFooter controlam se o Word espera que as variantes de cabeçalho/rodapé da primeira página e das páginas pares sejam usadas.
Múltiplas Colunas de Texto
PageSetup.TextColumns retorna um TextColumnCollection (Count, EvenlySpaced, LineBetween, Spacing, Width) com SetCount() para organizar o corpo da seção em múltiplas colunas. Colunas individuais são instâncias de TextColumn (Width, SpaceAfter) assim que a coleção é preenchida com mais de uma coluna.
Dicas e Melhores Práticas
- Uma quebra de seção transporta a formatação da seção que follows ele – definindo
PageSetuppropriedades em umSectionque você acabou de criar (depoisInsertBreak) afeta o conteúdo que vem após a quebra, não antes dela. - Use
SectionBreakContinuousquando você precisar apenas de uma alteração na configuração da página (por exemplo, mudar para texto em múltiplas colunas) sem iniciar uma nova página; useSectionBreakNewPagequando a nova seção deve sempre começar em uma página nova. HeaderFooterCollection.LinkToPrevious()reconecta o cabeçalho/rodapé de uma seção para herdar o conteúdo da seção anterior – faça isso antes de escrever novo conteúdo de cabeçalho/rodapé se quiser que a nova seção comece independente da anterior.PageSetup.DifferentFirstPageHeaderFootereOddAndEvenPagesHeaderFootersó têm efeito se as variantes correspondentes deHeaderFooterType(HeaderFirst,HeaderEven, e assim por diante) realmente existirem emSection.HeadersFooters– habilite a opção e adicione o cabeçalho/rodapé correspondente juntos.Section.Bodye cadaHeaderFootersão instâncias separadas deStory–Range.Fields, marcadores e outras operações com escopo de intervalo noBodyda seção não alcançam automaticamente seus cabeçalhos e rodapés.
Problemas comuns
| Problema | Causa | Correção |
|---|---|---|
| A configuração de página da nova seção não corresponde ao que eu defini | PageSetup foi definido na instância errada de Section | Definir PageSetup na seção que follows a quebra, não a anterior |
| O conteúdo de cabeçalho/rodapé da seção anterior aparece inesperadamente em uma nova seção | Os cabeçalhos/rodapés da nova seção ainda estão vinculados à seção anterior | Chame HeaderFooterCollection.LinkToPrevious(false) (ou adicione conteúdo de cabeçalho/rodapé distinto) para desvinculá-los |
| O cabeçalho/rodapé da primeira página ou de páginas pares é ignorado | DifferentFirstPageHeaderFooter / OddAndEvenPagesHeaderFooter é false, ou a variante correspondente HeaderFooterType não existe | Defina a bandeira em PageSetup e assegure que a variante correspondente de cabeçalho/rodapé esteja presente |
| O layout de múltiplas colunas não se aplica | TextColumns.SetCount() foi chamado com uma contagem de 1, ou na PageSetup da seção errada | Chame SetCount() com mais de uma coluna na PageSetup.TextColumns da seção de destino |
FAQ
Como inicio uma nova seção sem iniciar uma nova página?
Insira uma quebra SectionBreakContinuous com DocumentBuilder.InsertBreak(BreakType.SectionBreakContinuous).
Como dou a uma seção suas próprias margens e orientação?
Insira uma quebra de seção, então defina as propriedades no PageSetup da nova seção — TopMargin, BottomMargin, LeftMargin, RightMargin, Orientation e PaperSize.
Como faço para que a primeira página de uma seção use um cabeçalho diferente?
Defina PageSetup.DifferentFirstPageHeaderFooter = true nessa seção e adicione um HeaderFooter do tipo HeaderFirst (e FooterFirst, se necessário) à sua coleção de HeadersFooters.
Como organizo o texto do corpo de uma seção em duas colunas?
Chame PageSetup.TextColumns.SetCount(2) na seção, então ajuste Spacing e EvenlySpaced / valores individuais de TextColumn.Width conforme necessário.
API Reference Resumo
| Classe / Enum | Descrição |
|---|---|
Section | Um nó de seção; Body, HeadersFooters, PageSetup |
SectionCollection | Cada Section no documento, via Document.Sections |
Body / Story | Contêiner principal de conteúdo para uma seção (Body) ou cabeçalho/rodapé (HeaderFooter) |
PageSetup | Dimensões da página, margens, orientação, bordas e colunas para uma seção |
HeaderFooter / HeaderFooterCollection | Conteúdo de cabeçalho/rodapé e os acessores tipados para uma seção |
HeaderFooterType | Identifica qual variante de cabeçalho/rodapé (primary, first, even) um HeaderFooter tem |
TextColumn / TextColumnCollection | Layout de texto em múltiplas colunas para uma seção |
PaperSize / Orientation / Margins | Tamanho da página, orientação e valores de margem pré-definidos |
PageBorderAppliesTo / PageBorderDistanceFrom | Em quais páginas uma borda de página é impressa, e qual é a sua aresta de referência |
SectionStart / BreakType | Tipo de quebra de seção registrado em uma seção, e os tipos de quebra que DocumentBuilder.InsertBreak() aceita |
LineNumberRestartMode | Quando a numeração automática de linhas reinicia dentro de uma seção |