C++を使用してWord文書のヘッダーとフッターを追加または削除する

Word文書のヘッダーとフッターは、トピック、章、ページ番号、コピーライトなどの重要な情報をフォーマットして表示するために使用されます。プログラムでWord文書を操作しているときに、ヘッダーとフッターを追加または削除する必要がある場合があります。そのために、この記事では、C++を使用してWord文書のヘッダーとフッターを追加および削除する方法について説明します。

Word文書にヘッダーとフッターを追加するには、Aspose.Words for C++APIを使用します。これは、Microsoft Wordをインストールしなくても、Word文書の作成、読み取り、および変更をサポートするネイティブC++APIです。 APIは、NuGetからインストールするか、ダウンロードセクションから直接ダウンロードできます。

PM> Install-Package Aspose.Words.Cpp

Word文書のヘッダーとフッターは、タイトルページ、偶数ページ、奇数ページの3つのセクションに分かれています。これらのセクションに異なるヘッダーとフッターを追加できます。さらに、ヘッダーやフッターに画像や表などの要素を追加することもできます。

この例では、新しいWord文書を作成し、タイトルページに別のヘッダーを追加します。次のページに、画像付きのヘッダーと表付きのフッターを追加します。以下は、Word文書にヘッダーとフッターを追加する手順です。

  • Wordドキュメントを表すDocumentクラスのインスタンスを作成します。
  • 以前に作成したDocumentオブジェクトを使用して、DocumentBuilderクラスのインスタンスを作成します。
  • PageSetup->set->DifferentFirstPageHeaderFooter(bool value)メソッドを使用して、タイトルページに別のヘッダーとフッターが必要であることを指定します。
  • ヘッダーテキストのフォントプロパティを設定します。
  • 後続のページのヘッダーとフッターを作成します。
  • DocumentBuilder->InsertImage(System::SharedPtrSystem::Drawing::Image image, Aspose::Words::Drawing::RelativeHorizontalPosition horzPos, double left, Aspose::Words::Drawing::RelativeVerticalPosition vertPos, double top, double width, double height, 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);

	// 2つのセルを持つテーブルを使用して、行のテキストの一部を作成します(ページ番号付き)
	// 左揃えにし、テキストの他の部分(著作権付き)を右揃えにします。
	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番目のセルをページ幅の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();

	// ページ分割を追加して、プライマリヘッダー/フッターが表示される2番目のページを作成します。
	builder->InsertBreak(BreakType::PageBreak);

	// セクション区切りを追加して、ページの向きが異なる3番目のページを作成します。
	builder->InsertBreak(BreakType::SectionBreakNewPage);

	// 新しいセクションとそのページ設定を取得します。
	currentSection = builder->get_CurrentSection();
	pageSetup = currentSection->get_PageSetup();

	// 新しいセクションのページの向きを横向きに設定します。
	pageSetup->set_Orientation(Orientation::Landscape);

	// このセクションには、別の最初のページのヘッダー/フッターは必要ありません。
	// ドキュメントに必要なタイトルページは1つだけです。このページのヘッダー/フッター
	// 前のセクションですでに定義されています
	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))
{
	// 1つのセクションで最大3つの異なるヘッダーとフッターを使用できます(最初のページ、偶数ページ、奇数ページの場合)。
	// それらすべてをチェックして削除します。
	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ドキュメントを操作するための一連の追加機能を提供します。ご不明な点がございましたら、無料サポートフォーラムまでお気軽にお問い合わせください。

関連項目