Como trabalhar com seções em .NET

Como trabalhar com seções em .NET

Este guia mostra como criar quebras de seção, configurar a disposição da página e gerenciar cabeçalhos, rodapés e layout de múltiplas colunas em Aspose.Words FOSS para .NET, usando o Section and PageSetup classes. Ele cobre a leitura das seções já presentes em um documento, iniciando uma nova seção com DocumentBuilder, configurando dimensões e margens da página, adicionando variantes de cabeçalho e rodapé, e organizando o texto do corpo em múltiplas colunas.

Guia passo a passo

Etapa 1: Instalar o pacote

Aspose.Words FOSS for .NET ainda não publica um pacote NuGet – compile a biblioteca a partir do código-fonte. Clone https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, então compile Aspose.Words.sln na configuração Release com o SDK .NET e referencie o assembly Aspose.Words resultante em seu projeto. A biblioteca tem como alvo o .NET Standard 2.0, portanto funciona no .NET Framework 4.6.2+ e .NET 6/8/10.


Etapa 2: Importar as classes necessárias

Adicione uma diretiva using Aspose.Words; – Section, PageSetup, HeaderFooter, e os enums relacionados usados neste guia estão todos diretamente no namespace Aspose.Words ao lado de Document e DocumentBuilder.


Etapa 3: Ler as Seções Já em um Documento

Document.Sections retorna um SectionCollection que contém todos os Section no documento, cada um um CompositeNode que também faz parte da árvore de nós geral. Document.FirstSection e Document.LastSection fornecem acesso direto às seções de fronteira sem iterar a coleção. Cada Section contém um Body – alcançado da mesma forma que qualquer outro Story – e, quando presente, o conteúdo de cabeçalho e rodapé alcançado através de Section.HeadersFooters.


Etapa 4: Iniciar uma Nova Seção com uma Quebra de Seção

Call DocumentBuilder.InsertBreak(BreakType) no cursor para iniciar uma nova seção. Passe BreakType.SectionBreakNewPage quando a nova seção deve sempre começar em uma página nova, BreakType.SectionBreakContinuous quando apenas uma alteração de configuração de página é necessária (por exemplo, mudar para texto em múltiplas colunas) sem forçar uma quebra de página, ou BreakType.SectionBreakNewColumn, SectionBreakEvenPage, e SectionBreakOddPage para os outros comportamentos de início de seção que o Word oferece. follows ele, então defina PageSetup propriedades na nova Section – não a que vem antes – assim que a quebra for inserida. DocumentBuilder.MoveToSection(sectionIndex) move o cursor para o início do corpo de uma seção específica, e PageSetup.SectionStart lê ou define o SectionStart tipo de quebra já registrado em uma seção existente.


Etapa 5: Configurar Dimensões da Página e Margens

Cada Section.PageSetup é uma instância de PageSetup. Defina PageWidth, PageHeight, LeftMargin, RightMargin, TopMargin, BottomMargin e Gutter para dimensões da página e margens, ou atribua um preset Margins diretamente a PageSetup.Margins. Orientation e PaperSize controlam a orientação da página e o tamanho do papel. As bordas da página são configuradas com Borders (um BorderCollection), BorderAppliesTo (PageBorderAppliesTo), BorderDistanceFrom (PageBorderDistanceFrom), BorderAlwaysInFront, BorderSurroundsHeader e BorderSurroundsFooter. Chame PageSetup.ClearFormatting() para redefinir a configuração de página de uma seção aos padrões antes de configurá-la do zero.


Etapa 6: Adicionar e Vincular Cabeçalhos e Rodapés

Section.HeadersFooters é um HeaderFooterCollection com acessadores tipados – HeaderPrimary, HeaderFirst, HeaderEven, FooterPrimary, FooterFirst, FooterEven – juntamente com GetByHeaderFooterType() para busca por HeaderFooterType e Add() para adicionar um novo. Cada HeaderFooter é um Story, marcado como IsHeader e IsLinkedToPrevious. Habilite PageSetup.DifferentFirstPageHeaderFooter ou PageSetup.OddAndEvenPagesHeaderFooter antes de adicionar a variante correspondente HeaderFirst/FooterFirst ou HeaderEven/FooterEven – a bandeira e a variante só têm efeito juntas. Chame HeaderFooterCollection.LinkToPrevious() para reconectar o cabeçalho ou rodapé de uma seção para herdar o conteúdo da seção anterior, ou para desvinculá-lo de modo que a nova seção comece com conteúdo independente.


Etapa 7: Dispor o Texto do Corpo em Múltiplas Colunas

PageSetup.TextColumns retorna um TextColumnCollection para a seção. Chame SetCount() com o número de colunas em que o texto do corpo deve fluir, então ajuste EvenlySpaced, Spacing, LineBetween e Width para controlar como as colunas são dispostas. Quando a coleção contém mais de uma coluna, instâncias individuais de TextColumn expõem seus próprios Width e SpaceAfter.


Etapa 8: Limpar ou Editar em Massa o Conteúdo da Seção

Section.AppendContent() e PrependContent() copiam o conteúdo do corpo de outra seção para esta; ClearContent() esvazia o corpo de uma seção em massa. ClearHeadersFooters() e DeleteHeaderFooterShapes() limpam o conteúdo de cabeçalho e rodapé em toda a seção sem remover a própria seção.

Problemas Comuns e Soluções

A configuração de página da nova seção não corresponde ao que eu defini PageSetup foi definido no errado Section instância. Uma quebra de seção carrega a formatação para a seção que a segue – defina PageSetup na seção que vem depois InsertBreak(), não na que vem antes.

O conteúdo de cabeçalho ou rodapé da seção anterior aparece inesperadamente em uma nova O cabeçalho ou rodapé da nova seção ainda está vinculado à seção anterior. Chame HeaderFooterCollection.LinkToPrevious(false), ou adicione conteúdo de cabeçalho/rodapé distinto à nova seção, para desvinculá-lo.

O cabeçalho/rodapé da primeira página ou das páginas pares é ignorado DifferentFirstPageHeaderFooter or OddAndEvenPagesHeaderFooter is false, ou o correspondente HeaderFooterType variante não existe em Section.HeadersFooters. Defina a flag em PageSetup e adicione a variante de cabeçalho/rodapé correspondente.

O layout de múltiplas colunas não se aplica TextColumns.SetCount() foi chamado com uma contagem de um, ou na seção errada de PageSetup. Chame SetCount() com mais de uma coluna na seção de destino PageSetup.TextColumns.

Quebra de seção inserida na posição errada do documento DocumentBuilder.InsertBreak(BreakType) insere no cursor atual do construtor. Use DocumentBuilder.MoveToSection() ou outros membros de posicionamento de cursor do construtor para posicionar o cursor antes de chamar InsertBreak().

Perguntas Frequentes

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 TopMargin, BottomMargin, LeftMargin, RightMargin, Orientation e PaperSize no PageSetup da nova seção.

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 HeadersFooters.

Como organizo o texto do corpo de uma seção em duas colunas?

Chame PageSetup.TextColumns.SetCount(2) na seção e, em seguida, ajuste Spacing, EvenlySpaced ou valores individuais de TextColumn.Width conforme necessário.

Como acesso diretamente as primeiras e as últimas seções?

Leia Document.FirstSection e Document.LastSection em vez de indexar em Document.Sections.

Ver também

 Português