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::SharedPtr) 在标题中添加图像System::Drawing::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 文档的附加功能,您可以通过访问 官方文档 进行详细探索。如有任何问题,请随时通过我们的 免费支持论坛 与我们联系。