Le intestazioni e i piè di pagina nei documenti di Word vengono utilizzati per formattare e mostrare informazioni importanti come l’argomento, il capitolo, il numero di pagina, Copywrite e così via. Quando si lavora con i documenti di Word a livello di codice, potrebbe essere necessario aggiungere o rimuovere intestazioni e piè di pagina. A tal fine, questo articolo ti insegnerà come aggiungere e rimuovere intestazioni e piè di pagina nei documenti di Word utilizzando C++.
- API C++ per aggiungere e rimuovere intestazione e piè di pagina nei documenti di Word
- Aggiungi intestazione e piè di pagina nei documenti di Word usando C++
- Elimina intestazione e piè di pagina in un documento di Word utilizzando C++
API C++ per aggiungere e rimuovere intestazione e piè di pagina nei documenti di Word
Per aggiungere intestazioni e piè di pagina nei documenti di Word, utilizzeremo l’API Aspose.Words for C++. È un’API C++ nativa che supporta la creazione, la lettura e la modifica di documenti Word senza richiedere l’installazione di Microsoft Word. Puoi installare l’API tramite NuGet o scaricarla direttamente dalla sezione Download.
PM> Install-Package Aspose.Words.Cpp
Aggiungi intestazione e piè di pagina nei documenti di Word usando C++
Le intestazioni e i piè di pagina in un documento di Word sono divisi in tre sezioni, il frontespizio, le pagine pari e le pagine dispari. Puoi aggiungere diverse intestazioni e piè di pagina per queste sezioni. Inoltre, puoi anche aggiungere elementi come immagini e tabelle nelle intestazioni e nei piè di pagina.
In questo esempio, creeremo un nuovo documento Word e aggiungeremo un’intestazione diversa per la pagina del titolo. Aggiungeremo un’intestazione con un’immagine e un piè di pagina con una tabella alle pagine successive. Di seguito sono riportati i passaggi per aggiungere intestazioni e piè di pagina nei documenti di Word.
- Crea un’istanza della classe Document per rappresentare il documento di Word.
- Crea un’istanza della classe DocumentBuilder utilizzando l’oggetto Document creato in precedenza.
- Specificare che si desidera un’intestazione e un piè di pagina diversi per la pagina del titolo utilizzando il metodo PageSetup->setDifferentFirstPageHeaderFooter(bool value).
- Imposta le proprietà del carattere per il testo dell’intestazione.
- Crea l’intestazione e il piè di pagina per le pagine successive.
- Aggiungi un’immagine nell’intestazione usando DocumentBuilder->InsertImage(System::SharedPtrSystem::Drawing::Image image, Aspose::Words::Drawing::RelativeHorizontalPosition horzPos, doppia sinistra, Aspose::Words::Drawing::RelativeVerticalPosition vertPos, double top, double width, double height, Aspose::Words::Drawing::WrapType wrapType) metodo.
- Aggiungi tabella nel piè di pagina.
- Salva il documento di Word usando il metodo Document->Save(System::String fileName).
Il codice di esempio seguente illustra come aggiungere intestazioni e piè di pagina nei documenti di Word usando C++.
void CopyHeadersFootersFromPreviousSection(const System::SharedPtr<Section>& section)
{
System::SharedPtr<Section> previousSection = System::DynamicCast<Section>(section->get_PreviousSibling());
if (previousSection == nullptr)
{
return;
}
section->get_HeadersFooters()->Clear();
for (System::SharedPtr<Node> headerFooterNode : System::IterateOver(previousSection->get_HeadersFooters()))
{
section->get_HeadersFooters()->Add(headerFooterNode->Clone(true));
}
}
int main()
{
// Percorsi della directory di origine e di output.
System::String inputDataDir = u"SourceDirectory\\";
System::String outputDataDir = u"OutputDirectory\\";
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
System::SharedPtr<Section> currentSection = builder->get_CurrentSection();
System::SharedPtr<PageSetup> pageSetup = currentSection->get_PageSetup();
// Specificare se vogliamo che le intestazioni/piè di pagina della prima pagina siano diversi dalle altre pagine.
// Puoi anche usare la proprietà PageSetup.OddAndEvenPagesHeaderFooter per specificare
// Intestazioni/piè di pagina differenti per pagine pari e dispari.
pageSetup->set_DifferentFirstPageHeaderFooter(true);
// --- Crea un'intestazione per la prima pagina. ---
pageSetup->set_HeaderDistance(20);
builder->MoveToHeaderFooter(HeaderFooterType::HeaderFirst);
builder->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Center);
// Imposta le proprietà del carattere per il testo dell'intestazione.
builder->get_Font()->set_Name(u"Arial");
builder->get_Font()->set_Bold(true);
builder->get_Font()->set_Size(14);
// Specifica il titolo dell'intestazione per la prima pagina.
builder->Write(u"Aspose.Words Header/Footer Creation Primer - Title Page.");
// --- Crea intestazione per pagine diverse dalla prima pagina. ---
pageSetup->set_HeaderDistance(20);
builder->MoveToHeaderFooter(HeaderFooterType::HeaderPrimary);
// Inserisci un'immagine posizionata in modo assoluto nell'angolo superiore/sinistro dell'intestazione.
// La distanza dai bordi superiore/sinistro della pagina è impostata su 10 punti.
System::String imageFileName = inputDataDir + u"Desert.jpg";
builder->InsertImage(imageFileName, RelativeHorizontalPosition::Page, 10, RelativeVerticalPosition::Page, 10, 50, 50, WrapType::Through);
builder->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Right);
// Specifica il titolo dell'intestazione per le altre pagine.
builder->Write(u"Aspose.Words Header/Footer Creation Primer.");
// --- Crea piè di pagina per pagine diverse dalla prima pagina. ---
builder->MoveToHeaderFooter(HeaderFooterType::FooterPrimary);
// Usiamo la tabella con due celle per creare una parte del testo sulla riga (con la numerazione delle pagine)
// Da allineare a sinistra e l'altra parte del testo (con copyright) da allineare a destra.
builder->StartTable();
// Cancella i bordi del tavolo.
builder->get_CellFormat()->ClearFormatting();
builder->InsertCell();
// Imposta la prima cella su 1/3 della larghezza della pagina.
builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 / 3));
// Inserisci qui il testo della numerazione delle pagine.
// Utilizza i campi PAGE e NUMPAGES per calcolare automaticamente il numero di pagina corrente e il numero totale di pagine.
builder->Write(u"Page ");
builder->InsertField(u"PAGE", u"");
builder->Write(u" of ");
builder->InsertField(u"NUMPAGES", u"");
// Allinea questo testo a sinistra.
builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Left);
builder->InsertCell();
// Imposta la seconda cella su 2/3 della larghezza della pagina.
builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 * 2 / 3));
builder->Write(u"(C) 2001 Aspose Pty Ltd. All rights reserved.");
// Allinea questo testo a destra.
builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Right);
builder->EndRow();
builder->EndTable();
builder->MoveToDocumentEnd();
// Aggiungi un'interruzione di pagina per creare una seconda pagina in cui verranno visualizzate le intestazioni/piè di pagina principali.
builder->InsertBreak(BreakType::PageBreak);
// Aggiungi un'interruzione di sezione per creare una terza pagina con un diverso orientamento della pagina.
builder->InsertBreak(BreakType::SectionBreakNewPage);
// Ottieni la nuova sezione e la relativa configurazione della pagina.
currentSection = builder->get_CurrentSection();
pageSetup = currentSection->get_PageSetup();
// Imposta l'orientamento della pagina della nuova sezione su orizzontale.
pageSetup->set_Orientation(Orientation::Landscape);
// Questa sezione non necessita di un'intestazione/piè di pagina della prima pagina diversa.
// Abbiamo solo bisogno di una pagina del titolo nel documento. L'intestazione/piè di pagina di questa pagina
// è già stato definito nella sezione precedente
pageSetup->set_DifferentFirstPageHeaderFooter(false);
// Questa sezione mostra le intestazioni/piè di pagina della sezione precedente per impostazione predefinita.
// Chiama currentSection.HeadersFooters.LinkToPrevious(false) per annullare questo comportamento.
// La larghezza della pagina è diversa per la nuova sezione e quindi è necessario impostarla
// larghezze di celle diverse per una tabella a piè di pagina.
currentSection->get_HeadersFooters()->LinkToPrevious(false);
// Se vogliamo utilizzare il set di intestazione/piè di pagina già esistente per questa sezione
// ma con alcune modifiche minori può essere utile copiare intestazioni/piè di pagina
// dalla sezione precedente e applichiamo le modifiche necessarie dove vogliamo.
CopyHeadersFootersFromPreviousSection(currentSection);
// Trova il piè di pagina che vogliamo modificare.
System::SharedPtr<HeaderFooter> primaryFooter = currentSection->get_HeadersFooters()->idx_get(HeaderFooterType::FooterPrimary);
System::SharedPtr<Row> row = primaryFooter->get_Tables()->idx_get(0)->get_FirstRow();
row->get_FirstCell()->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 / 3));
row->get_LastCell()->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 * 2 / 3));
System::String outputPath = outputDataDir + u"CreateHeaderFooter.docx";
// Salva il documento risultante.
doc->Save(outputPath);
}
Elimina intestazione e piè di pagina in un documento di Word utilizzando C++
Nella sezione precedente, hai imparato come aggiungere intestazioni e piè di pagina nei documenti di Word. Simile all’aggiunta, puoi rimuovere le intestazioni e i piè di pagina dal titolo, dalle pagine pari e dispari in base alle tue esigenze. Di seguito sono riportati i passaggi per eliminare tutte le intestazioni e i piè di pagina in un documento di Word.
- Carica il documento di Word usando la classe Document.
- Crea due istanze della classe HeaderFooter per rappresentare le intestazioni e i piè di pagina.
- Recupera le intestazioni e i piè di pagina per il titolo, le pagine pari e dispari usando il metodo Section->getHeadersFooters()->idxget(Aspose::Words::HeaderFooterType headerFooterType).
- Rimuovere le intestazioni e i piè di pagina utilizzando il metodo HeaderFooter->Remove().
- Salva il documento di Word usando il metodo Document->Save(System::String fileName).
Il codice di esempio seguente mostra come eliminare tutte le intestazioni e i piè di pagina in un documento di Word usando C++.
// Percorsi della directory di origine e di output.
System::String inputDataDir = u"SourceDirectory\\";
System::String outputDataDir = u"OutputDirectory\\";
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"SampleHeaderFooter.docx");
for (System::SharedPtr<Section> section : System::IterateOver<System::SharedPtr<Section>>(doc))
{
// In una sezione sono possibili fino a tre diverse intestazioni e piè di pagina (per le pagine prime, pari e dispari).
// Li controlliamo ed eliminiamo tutti.
System::SharedPtr<HeaderFooter> header;
System::SharedPtr<HeaderFooter> footer;
header = section->get_HeadersFooters()->idx_get(HeaderFooterType::HeaderFirst);
footer = section->get_HeadersFooters()->idx_get(HeaderFooterType::FooterFirst);
if (header != nullptr)
{
header->Remove();
}
if (footer != nullptr)
{
footer->Remove();
}
// L'intestazione e il piè di pagina primari vengono utilizzati per le pagine dispari.
header = section->get_HeadersFooters()->idx_get(HeaderFooterType::HeaderPrimary);
footer = section->get_HeadersFooters()->idx_get(HeaderFooterType::FooterPrimary);
if (header != nullptr)
{
header->Remove();
}
if (footer != nullptr)
{
footer->Remove();
}
header = section->get_HeadersFooters()->idx_get(HeaderFooterType::HeaderEven);
footer = section->get_HeadersFooters()->idx_get(HeaderFooterType::FooterEven);
if (header != nullptr)
{
header->Remove();
}
if (footer != nullptr)
{
footer->Remove();
}
}
// Percorso del file di output
System::String outputPath = outputDataDir + u"RemoveFooters.docx";
// Salva il documento.
doc->Save(outputPath);
Ottieni una licenza gratuita
Puoi provare l’API senza limitazioni di valutazione richiedendo una licenza temporanea gratuita.
Conclusione
L’utilizzo di intestazioni e piè di pagina nei documenti di Word è un caso d’uso comune e frequente. In questo articolo hai imparato a lavorare con intestazioni e piè di pagina nei documenti di Word usando C++. In particolare, hai imparato come aggiungere e rimuovere intestazioni e piè di pagina nei documenti di Word usando Aspose.Words per l’API C++. L’API fornisce una serie di funzionalità aggiuntive per lavorare con i documenti di Word che puoi esplorare in dettaglio visitando la documentazione ufficiale. In caso di domande, non esitare a contattarci sul nostro forum di supporto gratuito.