Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este tópico mostra como usar as classes no Open XML SDK for Office para substituir o cabeçalho no documento de processamento de texto programaticamente.
Estrutura do elemento de referência de cabeçalho
Neste exemplo, você excluirá a parte do cabeçalho do arquivo de destino e criará outra parte do cabeçalho. Você também excluirá a referência ao cabeçalho existente e criará uma referência ao novo cabeçalho. Portanto, é útil familiarizar-se com os cabeçalhos e o elemento de referência do cabeçalho. As seguintes informações da especificação ISO/IEC 29500 introduzem o elemento de referência do cabeçalho.
headerReference (referência de cabeçalho)
Esse elemento especifica um único cabeçalho que deve ser associado à seção atual do documento. Esse cabeçalho deve ser referenciado por meio do atributo id , que especifica uma relação explícita com a parte do cabeçalho apropriada no pacote WordprocessingML.
Se o tipo de relação da relação especificado por esse elemento não https://schemas.openxmlformats.org/officeDocument/2006/headerfor , não estiver presente ou não tiver um valor de atributo TargetMode de Internal, o documento será considerado não conforme.
Dentro de cada seção de um documento, pode haver até três tipos diferentes de cabeçalhos:
Cabeçalho da primeira página
Cabeçalho de página ímpar
Cabeçalho de página uniforme
O tipo de cabeçalho especificado pelo headerReference atual é especificado por meio do atributo type .
Se qualquer tipo de cabeçalho for omitido para uma determinada seção, as seguintes regras serão aplicadas.
Se nenhum headerReference para o cabeçalho da primeira página for especificado e o elemento titlePg for especificado, o cabeçalho da primeira página deverá ser herdado da seção anterior ou, se esta for a primeira seção do documento, um novo cabeçalho em branco deverá ser criado. Se o elemento titlePg não for especificado, nenhum cabeçalho de primeira página deverá ser mostrado e o cabeçalho de página ímpar deverá ser usado em seu lugar.
Se nenhum headerReference para o cabeçalho de página par for especificado e o elemento evenAndOddHeaders for especificado, o cabeçalho de página par deverá ser herdado da seção anterior ou, se esta for a primeira seção do documento, um novo cabeçalho em branco deverá ser criado. Se o elemento evenAndOddHeaders não for especificado, nenhum cabeçalho de página par deverá ser mostrado e o cabeçalho de página ímpar deverá ser usado em seu lugar.
Se nenhum headerReference para o cabeçalho de página ímpar for especificado, o cabeçalho de página par deverá ser herdado da seção anterior ou, se esta for a primeira seção do documento, um novo cabeçalho em branco deverá ser criado.
Exemplo: considere um documento de três páginas com diferentes cabeçalhos de página primeiro, ímpar e par definidos da seguinte maneira:
Este documento define três cabeçalhos, cada um dos quais tem uma relação da parte do documento com uma ID de relação exclusiva, conforme mostrado na seguinte marcação de empacotamento:
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
…
<Relationship Id="rId2" Type="https://schemas.openxmlformats.org/officeDocument/2006/relationships/header" Target="header1.xml" />
<Relationship Id="rId3" Type="https://schemas.openxmlformats.org/officeDocument/2006/relationships/header" Target="header2.xml" />
<Relationship Id="rId5" Type="https://schemas.openxmlformats.org/officeDocument/2006/relationships/header" Target="header3.xml" />
…
</Relationships>
Essas relações são referenciadas nas propriedades da seção usando o seguinte WordprocessingML:
<w:sectPr>
…
<w:headerReference r:id="rId3" w:type="first" />
<w:headerReference r:id="rId5" w:type="default" />
<w:headerReference r:id="rId2" w:type="even" />
…
</w:sectPr>
A seção resultante deve usar a parte do cabeçalho com a id do relacionamento rId3 para a primeira página, a parte do cabeçalho com a id do relacionamento rId2 para todas as páginas pares subsequentes e a parte do cabeçalho com a id do relacionamento rId5 para todas as páginas ímpares subsequentes. exemplo de término
© ISO/IEC 29500: 2016
Código de exemplo
O exemplo de código a seguir mostra como substituir o cabeçalho em um documento de processamento de texto pelo cabeçalho de outro documento de processamento de texto. Para chamar o método, AddHeaderFromTo, você pode usar o segmento de código a seguir como exemplo.
string fromFile = args[0];
string toFile = args[1];
AddHeaderFromTo(fromFile, toFile);
A seguir está o código de exemplo completo em C# e em Visual Basic.
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
using System.Collections.Generic;
using System.Linq;
static void AddHeaderFromTo(string fromFile, string toFile)
{
// Replace header in target document with header of source document.
using (WordprocessingDocument wdDoc = WordprocessingDocument.Open(toFile, true))
using (WordprocessingDocument wdDocSource = WordprocessingDocument.Open(fromFile, true))
{
if (wdDocSource.MainDocumentPart is null || wdDocSource.MainDocumentPart.HeaderParts is null)
{
throw new ArgumentNullException("MainDocumentPart and/or HeaderParts is null.");
}
if (wdDoc.MainDocumentPart is null)
{
throw new ArgumentNullException("MainDocumentPart is null.");
}
MainDocumentPart mainPart = wdDoc.MainDocumentPart;
// Delete the existing header part.
mainPart.DeleteParts(mainPart.HeaderParts);
// Create a new header part.
DocumentFormat.OpenXml.Packaging.HeaderPart headerPart = mainPart.AddNewPart<HeaderPart>();
// Get Id of the headerPart.
string rId = mainPart.GetIdOfPart(headerPart);
// Feed target headerPart with source headerPart.
DocumentFormat.OpenXml.Packaging.HeaderPart? firstHeader = wdDocSource.MainDocumentPart.HeaderParts.FirstOrDefault();
wdDocSource.MainDocumentPart.HeaderParts.FirstOrDefault();
if (firstHeader is not null)
{
headerPart.FeedData(firstHeader.GetStream());
}
if (mainPart.Document.Body is null)
{
throw new ArgumentNullException("Body is null.");
}
// Get SectionProperties and Replace HeaderReference with new Id.
IEnumerable<DocumentFormat.OpenXml.Wordprocessing.SectionProperties> sectPrs = mainPart.Document.Body.Elements<SectionProperties>();
foreach (var sectPr in sectPrs)
{
// Delete existing references to headers.
sectPr.RemoveAllChildren<HeaderReference>();
// Create the new header reference node.
sectPr.PrependChild<HeaderReference>(new HeaderReference() { Id = rId });
}
}
}