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 PageSetup propriedades em um Section que você acabou de criar (depois InsertBreak) afeta o conteúdo que vem após a quebra, não antes dela.
  • Use SectionBreakContinuous quando 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; use SectionBreakNewPage quando 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.DifferentFirstPageHeaderFooter e OddAndEvenPagesHeaderFooter só têm efeito se as variantes correspondentes de HeaderFooterType (HeaderFirst, HeaderEven, e assim por diante) realmente existirem em Section.HeadersFooters – habilite a opção e adicione o cabeçalho/rodapé correspondente juntos.
  • Section.Body e cada HeaderFooter são instâncias separadas de Story – Range.Fields, marcadores e outras operações com escopo de intervalo no Body da seção não alcançam automaticamente seus cabeçalhos e rodapés.

Problemas comuns

ProblemaCausaCorreção
A configuração de página da nova seção não corresponde ao que eu definiPageSetup foi definido na instância errada de SectionDefinir 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çãoOs cabeçalhos/rodapés da nova seção ainda estão vinculados à seção anteriorChame 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 é ignoradoDifferentFirstPageHeaderFooter / OddAndEvenPagesHeaderFooter é false, ou a variante correspondente HeaderFooterType não existeDefina 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 aplicaTextColumns.SetCount() foi chamado com uma contagem de 1, ou na PageSetup da seção erradaChame 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 / EnumDescrição
SectionUm nó de seção; Body, HeadersFooters, PageSetup
SectionCollectionCada Section no documento, via Document.Sections
Body / StoryContêiner principal de conteúdo para uma seção (Body) ou cabeçalho/rodapé (HeaderFooter)
PageSetupDimensões da página, margens, orientação, bordas e colunas para uma seção
HeaderFooter / HeaderFooterCollectionConteúdo de cabeçalho/rodapé e os acessores tipados para uma seção
HeaderFooterTypeIdentifica qual variante de cabeçalho/rodapé (primary, first, even) um HeaderFooter tem
TextColumn / TextColumnCollectionLayout de texto em múltiplas colunas para uma seção
PaperSize / Orientation / MarginsTamanho da página, orientação e valores de margem pré-definidos
PageBorderAppliesTo / PageBorderDistanceFromEm quais páginas uma borda de página é impressa, e qual é a sua aresta de referência
SectionStart / BreakTypeTipo de quebra de seção registrado em uma seção, e os tipos de quebra que DocumentBuilder.InsertBreak() aceita
LineNumberRestartModeQuando a numeração automática de linhas reinicia dentro de uma seção

Ver também

 Português