Word文書のヘッダーとフッターは、トピック、章、ページ番号、コピーライトなどの重要な情報をフォーマットして表示するために使用されます。プログラムでWord文書を操作しているときに、ヘッダーとフッターを追加または削除する必要がある場合があります。そのために、この記事では、C++を使用してWord文書のヘッダーとフッターを追加および削除する方法について説明します。
Word文書のヘッダーとフッターを追加および削除するためのC++API
Word文書にヘッダーとフッターを追加するには、Aspose.Words for C++APIを使用します。これは、Microsoft Wordをインストールしなくても、Word文書の作成、読み取り、および変更をサポートするネイティブC++APIです。 APIは、NuGetからインストールするか、ダウンロードセクションから直接ダウンロードできます。
PM> Install-Package Aspose.Words.Cpp
C++を使用してWord文書にヘッダーとフッターを追加する
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);
}
C++を使用してWord文書のヘッダーとフッターを削除する
前のセクションでは、Word文書にヘッダーとフッターを追加する方法を学びました。追加と同様に、必要に応じて、タイトルからヘッダーとフッターを削除できます。偶数ページと奇数ページも削除できます。以下は、Word文書のすべてのヘッダーとフッターを削除する手順です。
- Documentクラスを使用してWordドキュメントをロードします。
- HeaderFooterクラスの2つのインスタンスを作成して、ヘッダーとフッターを表します。
- Section->get_HeadersFooters()->idx_get(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))
{
// 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ドキュメントを操作するための一連の追加機能を提供します。ご不明な点がございましたら、無料サポートフォーラムまでお気軽にお問い合わせください。