Lavorare con intestazioni e piè di pagina

Aspose.Words consente agli utenti di lavorare con intestazioni e piè di pagina in un documento. Un’intestazione è un testo posizionato nella parte superiore di una pagina e un piè di pagina è testo nella parte inferiore di una pagina. In genere, queste aree vengono utilizzate per inserire informazioni che devono essere ripetute su tutte o alcune pagine del documento, ad esempio numeri di pagina, data di creazione, informazioni sulla società e così via.

Creare intestazioni o piè di pagina usando DocumentBuilder

Se si desidera aggiungere un’intestazione o un piè di pagina del documento a livello di codice, il modo più semplice è utilizzare la classe DocumentBuilder per farlo.

L’esempio di codice seguente mostra come aggiungere un’intestazione e un piè di pagina per le pagine del documento:

Specificare le opzioni di intestazione o piè di pagina

Quando si aggiunge un’intestazione o un piè di pagina a un documento, è possibile impostare alcune proprietà avanzate. Aspose.Words fornisce agli utenti le classi HeaderFooter e HeaderFooterCollection, nonché l’enumerazione HeaderFooterType che offre un maggiore controllo sul processo di personalizzazione dell’intestazione e del piè di pagina.

Specificare il tipo di intestazione o piè di pagina

È possibile specificare tre diversi tipi di intestazione e tre diversi tipi di piè di pagina per un documento:

  1. Intestazione e / o piè di pagina della prima pagina
  2. Intestazione e / o piè di pagina per pagine pari
  3. Intestazione e / o piè di pagina per le pagine dispari

Il seguente esempio di codice mostra come aggiungere un’intestazione per le pagine del documento dispari:

Specificare se visualizzare intestazioni o piè di pagina diversi per la prima pagina

Come detto sopra, puoi anche impostare un’intestazione o un piè di pagina diverso per la prima pagina. Per fare ciò, è necessario impostare il flag DifferentFirstPageHeaderFooter su true e quindi specificare il valore HeaderFirst o FooterFirst.

Il seguente esempio di codice mostra come impostare l’intestazione solo per la prima pagina:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
// Specify that we want different headers and footers for first page.
builder->get_PageSetup()->set_DifferentFirstPageHeaderFooter(true);
builder->MoveToHeaderFooter(HeaderFooterType::HeaderFirst);
builder->Write(u"Header for the first page.");
builder->MoveToHeaderFooter(HeaderFooterType::FooterFirst);
builder->Write(u"Footer for the first page.");
builder->MoveToSection(0);
builder->Writeln(u"Page 1");
builder->InsertBreak(BreakType::PageBreak);
builder->Writeln(u"Page 2");
doc->Save(ArtifactsDir + u"WorkingWithHeadersAndFooters.DifferentFirstPage.docx");

Specificare se visualizzare intestazioni o piè di pagina diversi per le pagine pari o dispari

Successivamente, dovrai impostare intestazioni o piè di pagina diversi per le pagine pari e dispari in un documento. Per fare ciò, è necessario impostare il flag OddAndEvenPagesHeaderFooter su true e quindi specificare i valori HeaderPrimary e HeaderEven o FooterPrimary e FooterEven.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
// Specify that we want different headers and footers for even and odd pages.
builder->get_PageSetup()->set_OddAndEvenPagesHeaderFooter(true);
builder->MoveToHeaderFooter(HeaderFooterType::HeaderEven);
builder->Write(u"Header for even pages.");
builder->MoveToHeaderFooter(HeaderFooterType::HeaderPrimary);
builder->Write(u"Header for odd pages.");
builder->MoveToHeaderFooter(HeaderFooterType::FooterEven);
builder->Write(u"Footer for even pages.");
builder->MoveToHeaderFooter(HeaderFooterType::FooterPrimary);
builder->Write(u"Footer for odd pages.");
builder->MoveToSection(0);
builder->Writeln(u"Page 1");
builder->InsertBreak(BreakType::PageBreak);
builder->Writeln(u"Page 2");
doc->Save(ArtifactsDir + u"WorkingWithHeadersAndFooters.OddEvenPages.docx");

Inserire un’immagine assolutamente posizionata nell’intestazione

Per inserire un’immagine in un’intestazione o in un piè di pagina, utilizzare il tipo di intestazione HeaderPrimary o il tipo di piè di pagina FooterPrimary e il metodo InsertImage.

L’esempio di codice seguente mostra come aggiungere un’immagine a un’intestazione:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
builder->MoveToHeaderFooter(HeaderFooterType::HeaderPrimary);
builder->InsertImage(ImagesDir + u"Logo.jpg", RelativeHorizontalPosition::RightMargin, 10,
RelativeVerticalPosition::Page, 10, 50, 50, WrapType::Through);
doc->Save(ArtifactsDir + u"WorkingWithHeadersAndFooters.InsertImage.docx");
view raw insert-image.h hosted with ❤ by GitHub

Imposta le proprietà del carattere e del paragrafo per il testo dell’intestazione o del piè di pagina

Con Aspose.Words è possibile impostare le proprietà font e paragrafo, utilizzare il tipo di intestazione HeaderPrimary o il tipo di piè di pagina FooterPrimary, nonché i metodi e le proprietà per lavorare con i font e i paragrafi utilizzati per il corpo del documento.

L’esempio di codice seguente mostra come impostare il testo nell’intestazione su Arial, grassetto, dimensione 14 e allineamento centrale:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
builder->MoveToHeaderFooter(HeaderFooterType::HeaderPrimary);
builder->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Center);
builder->get_Font()->set_Name(u"Arial");
builder->get_Font()->set_Bold(true);
builder->get_Font()->set_Size(14);
builder->Write(u"Header for page.");
doc->Save(ArtifactsDir + u"WorkingWithHeadersAndFooters.FontProps.docx");
view raw font-props.h hosted with ❤ by GitHub

Inserire i numeri di pagina nell’intestazione o nel piè di pagina

Se necessario, è possibile aggiungere numeri di pagina all’intestazione o al piè di pagina. A tale scopo, utilizzare il tipo di intestazione HeaderPrimary o il tipo di piè di pagina FooterPrimary e il metodo InsertField per aggiungere il campo richiesto.

Il seguente esempio di codice mostra come aggiungere numeri di pagina al piè di pagina a destra:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
builder->MoveToHeaderFooter(HeaderFooterType::FooterPrimary);
builder->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Right);
builder->Write(u"Page ");
builder->InsertField(u"PAGE", u"");
builder->Write(u" of ");
builder->InsertField(u"NUMPAGES", u"");
doc->Save(ArtifactsDir + u"WorkingWithHeadersAndFooters.PageNumbers.docx");
view raw page-numbers.h hosted with ❤ by GitHub

Utilizzare Intestazioni o piè di pagina definiti nella sezione precedente

Se hai bisogno di copiare l’intestazione o il piè di pagina dalla sezione precedente, puoi farlo anche tu.

Il seguente esempio di codice mostra come copiare l’intestazione o il piè di pagina dalla sezione precedente:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
/// <summary>
/// Clones and copies headers/footers form the previous section to the specified section.
/// </summary>
void CopyHeadersFootersFromPreviousSection(SharedPtr<Section> section)
{
auto previousSection = System::ExplicitCast<Section>(section->get_PreviousSibling());
if (previousSection == nullptr)
{
return;
}
section->get_HeadersFooters()->Clear();
for (const auto& headerFooter : System::IterateOver<HeaderFooter>(previousSection->get_HeadersFooters()))
{
section->get_HeadersFooters()->Add((System::ExplicitCast<Node>(headerFooter))->Clone(true));
}
}

Garantire l’aspetto dell’intestazione o del piè di pagina quando si utilizzano orientamenti e dimensioni della pagina diversi

Aspose.Words consente di fornire l’aspetto di un’intestazione o di un piè di pagina quando si utilizzano orientamenti e dimensioni di pagina diverse.

L’esempio seguente mostra come eseguire questa operazione:

Come rimuovere solo intestazioni o solo piè di pagina

Ogni sezione di un documento può avere fino a tre intestazioni e fino a tre piè di pagina (per le pagine prime, pari e dispari). Se si desidera rimuovere tutte le intestazioni o tutti i piè di pagina in un documento, è necessario scorrere tutte le sezioni e rimuovere ogni nodo di intestazione o piè di pagina corrispondente.

L’esempio di codice seguente mostra come rimuovere tutti i piè di pagina da tutte le sezioni ma lasciare intatte le intestazioni. È possibile rimuovere solo le intestazioni in modo simile:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Header and footer types.docx");
for (const auto& section : System::IterateOver<Section>(doc))
{
// Up to three different footers are possible in a section (for first, even and odd pages)
// we check and delete all of them.
SharedPtr<HeaderFooter> footer = section->get_HeadersFooters()->idx_get(HeaderFooterType::FooterFirst);
if (footer != nullptr)
{
footer->Remove();
}
// Primary footer is the footer used for odd pages.
footer = section->get_HeadersFooters()->idx_get(HeaderFooterType::FooterPrimary);
if (footer != nullptr)
{
footer->Remove();
}
footer = section->get_HeadersFooters()->idx_get(HeaderFooterType::FooterEven);
if (footer != nullptr)
{
footer->Remove();
}
}
doc->Save(ArtifactsDir + u"RemoveContent.RemoveFooters.docx");