使用页眉和页脚

Aspose.Words允许用户在文档中使用页眉和页脚。 页眉是放置在页面顶部的文本,页脚是页面底部的文本。 通常,这些区域用于插入应该在文档的所有或某些页面上重复的信息,例如页码、创建日期、公司信息等等。

使用DocumentBuilder创建页眉或页脚

如果要以编程方式添加文档页眉或页脚,最简单的方法是使用DocumentBuilder类来执行此操作。

下面的代码示例演示如何为文档页添加页眉和页脚:

指定页眉或页脚选项

向文档添加页眉或页脚时,可以设置一些高级属性。 Aspose.Words为用户提供HeaderFooterHeaderFooterCollection类,以及HeaderFooterType枚举,使您可以更好地控制页眉和页脚自定义过程。

指定页眉或页脚类型

您可以为一个文档指定三种不同的页眉类型和三种不同的页脚类型:

  1. 首页的页眉和/或页脚
  2. 偶数页的页眉和/或页脚
  3. 奇数页的页眉和/或页脚

下面的代码示例演示如何为奇数文档页添加标题:

指定是否为第一页显示不同的页眉或页脚

如上所述,您还可以为第一页设置不同的页眉或页脚。 为此,您需要将DifferentFirstPageHeaderFooter标志设置为true,然后指定HeaderFirstFooterFirst值。

下面的代码示例演示如何仅为第一页设置标头:

// 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");

指定是否为奇数页或偶数页显示不同的页眉或页脚

接下来,您需要为文档中的奇数页和偶数页设置不同的页眉或页脚。 为此,您需要将OddAndEvenPagesHeaderFooter标志设置为true,然后指定值HeaderPrimaryHeaderEven,或FooterPrimaryFooterEven

// 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");

将绝对定位的图像插入标题

要将图像放置在页眉或页脚中,请使用HeaderPrimary页眉类型或FooterPrimary页脚类型和InsertImage方法。

下面的代码示例演示如何将图像添加到标头:

// 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

为页眉或页脚文本设置字体和段落属性

使用Aspose.Words,您可以设置字体和段落属性,使用HeaderPrimary页眉类型或FooterPrimary页脚类型,以及处理用于文档正文的字体和段落的方法和属性。

下面的代码示例演示如何将标题中的文本设置为Arial、bold、size14和center alignment:

// 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

将页码插入页眉或页脚

如有必要,您可以将页码添加到页眉或页脚。 为此,请使用HeaderPrimary页眉类型或FooterPrimary页脚类型和InsertField方法添加所需字段。

下面的代码示例演示如何将页码添加到右侧的页脚:

// 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

使用上一节中定义的页眉或页脚

如果您需要从上一节复制页眉或页脚,您也可以这样做。

下面的代码示例演示如何从上一节复制页眉或页脚:

// 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));
}
}

使用不同的页面方向和页面大小时,确保页眉或页脚外观

Aspose.Words允许您在使用不同的方向和页面大小时提供页眉或页脚的外观。

下面的示例演示如何执行此操作:

如何仅删除页眉或页脚

文档中的每个部分最多可以有三个页眉和三个页脚(第一页、偶数页和奇数页)。 如果要删除文档中的所有页眉或所有页脚,则需要循环遍历所有部分并删除每个相应的页眉节点或页脚节点。

下面的代码示例演示如何从所有节中删除所有页脚,但保持页眉不变。 您可以通过类似的方式仅删除标题:

// 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");