使用 C++ 在 Word 文檔中添加或刪除頁眉和頁腳

Word 文檔中的頁眉和頁腳用於格式化和顯示重要信息,例如主題、章節、頁碼、文案等。以編程方式處理 Word 文檔時,您可能需要添加或刪除頁眉和頁腳。為此,本文將教您如何使用 C++ 在 Word 文檔中添加和刪除頁眉和頁腳。

要在 Word 文檔中添加頁眉和頁腳,我們將使用 Aspose.Words for C++ API。它是一個原生的 C++ API,支持創建、讀取和修改 Word 文檔,而無需安裝 Microsoft Word。您可以通過 NuGet 安裝 API 或直接從 下載 部分下載。

PM> Install-Package Aspose.Words.Cpp

Word文檔中的頁眉和頁腳分為標題頁、偶數頁和奇數頁三部分。您可以為這些部分添加不同的頁眉和頁腳。此外,您還可以在頁眉和頁腳中添加圖像和表格等元素。

在此示例中,我們將創建一個新的 Word 文檔並為扉頁添加一個不同的頁眉。我們將在後續頁面中添加帶有圖像的頁眉和帶有表格的頁腳。以下是在 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);
}
示例代碼生成的輸出的打印預覽

示例代碼生成的輸出的打印預覽

在上一節中,您學習瞭如何在 Word 文檔中添加頁眉和頁腳。與添加類似,您可以根據需要從標題、偶數頁和奇數頁中刪除頁眉和頁腳。以下是刪除 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 文檔的附加功能,您可以通過訪問 官方文檔 來詳細了解這些功能。如有任何疑問,請隨時通過我們的免費支持論壇與我們聯繫。

也可以看看