Word 文檔中的頁眉和頁腳用於格式化和顯示重要信息,例如主題、章節、頁碼、文案等。以編程方式處理 Word 文檔時,您可能需要添加或刪除頁眉和頁腳。為此,本文將教您如何使用 C++ 在 Word 文檔中添加和刪除頁眉和頁腳。
用於在 Word 文檔中添加和刪除頁眉和頁腳的 C++ API
要在 Word 文檔中添加頁眉和頁腳,我們將使用 Aspose.Words for C++ API。它是一個原生的 C++ API,支持創建、讀取和修改 Word 文檔,而無需安裝 Microsoft Word。您可以通過 NuGet 安裝 API 或直接從 下載 部分下載。
PM> Install-Package Aspose.Words.Cpp
使用 C++ 在 Word 文檔中添加頁眉和頁腳
Word文檔中的頁眉和頁腳分為標題頁、偶數頁和奇數頁三部分。您可以為這些部分添加不同的頁眉和頁腳。此外,您還可以在頁眉和頁腳中添加圖像和表格等元素。
在此示例中,我們將創建一個新的 Word 文檔並為扉頁添加一個不同的頁眉。我們將在後續頁面中添加帶有圖像的頁眉和帶有表格的頁腳。以下是在 Word 文檔中添加頁眉和頁腳的步驟。
- 創建 Document 類的實例來表示 Word 文檔。
- 使用先前創建的 Document 對象創建 DocumentBuilder 類的實例。
- 使用 PageSetup->setDifferentFirstPageHeaderFooter(bool value) 方法指定標題頁需要不同的頁眉和頁腳。
- 設置標題文本的字體屬性。
- 為後續頁面創建頁眉和頁腳。
- 使用 DocumentBuilder->InsertImage(System::SharedPtrSystem::Drawing::Image image, Aspose::Words::Drawing::RelativeHorizontalPosition horzPos, 雙左, Aspose::Words::Drawing::RelativeVerticalPosition vertPos, 雙頂, 雙寬, 雙高, Aspose::Words::Drawing::WrapType wrapType) 方法。
- 在頁腳中添加表格。
- 使用 Document->Save(System::String fileName) 方法保存 Word 文檔。
下面的示例代碼演示瞭如何使用 C++ 在 Word 文檔中添加頁眉和頁腳。
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()
{
// 源和輸出目錄路徑。
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();
// 指定我們是否希望第一頁的頁眉/頁腳與其他頁面不同。
// 您還可以使用 PageSetup.OddAndEvenPagesHeaderFooter 屬性來指定
// 奇數頁和偶數頁的不同頁眉/頁腳。
pageSetup->set_DifferentFirstPageHeaderFooter(true);
// --- 為第一頁創建頁眉。 ---
pageSetup->set_HeaderDistance(20);
builder->MoveToHeaderFooter(HeaderFooterType::HeaderFirst);
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"Aspose.Words Header/Footer Creation Primer - Title Page.");
// --- 為第一頁以外的頁面創建頁眉。 ---
pageSetup->set_HeaderDistance(20);
builder->MoveToHeaderFooter(HeaderFooterType::HeaderPrimary);
// 將絕對定位的圖像插入標題的上/左角。
// 距頁面上/左邊緣的距離設置為 10 磅。
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);
// 指定其他頁面的頁眉標題。
builder->Write(u"Aspose.Words Header/Footer Creation Primer.");
// --- 為首頁以外的頁面創建頁腳。 ---
builder->MoveToHeaderFooter(HeaderFooterType::FooterPrimary);
// 我們使用帶有兩個單元格的表格使行中的一部分文本(帶有頁碼)
// 左對齊,文本的另一部分(有版權)右對齊。
builder->StartTable();
// 清除表格邊框。
builder->get_CellFormat()->ClearFormatting();
builder->InsertCell();
// 將第一個單元格設置為頁面寬度的 1/3。
builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 / 3));
// 在此處插入頁碼文本。
// 它使用 PAGE 和 NUMPAGES 字段來自動計算當前頁碼和總頁數。
builder->Write(u"Page ");
builder->InsertField(u"PAGE", u"");
builder->Write(u" of ");
builder->InsertField(u"NUMPAGES", u"");
// 將此文本向左對齊。
builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Left);
builder->InsertCell();
// 將第二個單元格設置為頁面寬度的 2/3。
builder->get_CellFormat()->set_PreferredWidth(PreferredWidth::FromPercent(100 * 2 / 3));
builder->Write(u"(C) 2001 Aspose Pty Ltd. All rights reserved.");
// 將此文本右對齊。
builder->get_CurrentParagraph()->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Right);
builder->EndRow();
builder->EndTable();
builder->MoveToDocumentEnd();
// 添加分頁符以創建第二頁,在該頁上可以看到主要的頁眉/頁腳。
builder->InsertBreak(BreakType::PageBreak);
// 添加分節符以創建具有不同頁面方向的第三頁。
builder->InsertBreak(BreakType::SectionBreakNewPage);
// 獲取新部分及其頁面設置。
currentSection = builder->get_CurrentSection();
pageSetup = currentSection->get_PageSetup();
// 將新部分的頁面方向設置為橫向。
pageSetup->set_Orientation(Orientation::Landscape);
// 此部分不需要不同的首頁頁眉/頁腳。
// 我們只需要文檔中的一個扉頁。此頁面的頁眉/頁腳
// 已經在上一節中定義
pageSetup->set_DifferentFirstPageHeaderFooter(false);
// 默認情況下,此部分顯示上一節中的頁眉/頁腳。
// 調用 currentSection.HeadersFooters.LinkToPrevious(false) 以取消此行為。
// 新部分的頁面寬度不同,因此我們需要設置
// 頁腳表格的不同單元格寬度。
currentSection->get_HeadersFooters()->LinkToPrevious(false);
// 如果我們想為該部分使用現有的頁眉/頁腳集
// 但經過一些小的修改,複製頁眉/頁腳可能是方便的
// 從上一節中提取並在我們需要的地方應用必要的修改。
CopyHeadersFootersFromPreviousSection(currentSection);
// 找到我們要更改的頁腳。
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";
// 保存生成的文檔。
doc->Save(outputPath);
}
使用 C++ 刪除 Word 文檔中的頁眉和頁腳
在上一節中,您學習瞭如何在 Word 文檔中添加頁眉和頁腳。與添加類似,您可以根據需要從標題、偶數頁和奇數頁中刪除頁眉和頁腳。以下是刪除 Word 文檔中所有頁眉和頁腳的步驟。
- 使用 Document 類加載 Word 文檔。
- 創建 HeaderFooter 類的兩個實例來表示頁眉和頁腳。
- 使用 Section->getHeadersFooters()->idxget(Aspose::Words::HeaderFooterType headerFooterType) 方法檢索標題、偶數頁和奇數頁的頁眉和頁腳。
- 使用 HeaderFooter->Remove() 方法刪除頁眉和頁腳。
- 使用 Document->Save(System::String fileName) 方法保存 Word 文檔。
以下示例代碼顯示瞭如何使用 C++ 刪除 Word 文檔中的所有頁眉和頁腳。
// 源和輸出目錄路徑。
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))
{
// 一個節中最多可以有三個不同的頁眉和頁腳(第一頁、偶數頁和奇數頁)。
// 我們檢查並刪除所有這些。
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();
}
// 主要頁眉和頁腳用於奇數頁。
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();
}
}
// 輸出文件路徑
System::String outputPath = outputDataDir + u"RemoveFooters.docx";
// 保存文檔。
doc->Save(outputPath);
獲得免費許可證
您可以通過申請 免費的臨時許可證 來試用沒有評估限制的 API。
結論
在 Word 文檔中處理頁眉和頁腳是一個常見且頻繁的用例。在本文中,您了解瞭如何使用 C++ 在 Word 文檔中處理頁眉和頁腳。具體來說,您學習瞭如何使用 Aspose.Words for C++ API 在 Word 文檔中添加和刪除頁眉和頁腳。該 API 提供了一系列用於處理 Word 文檔的附加功能,您可以通過訪問 官方文檔 來詳細了解這些功能。如有任何疑問,請隨時通過我們的免費支持論壇與我們聯繫。