JavaでWordドキュメントにヘッダーとフッターを追加・削除する方法

Wordのヘッダーとフッターは、ドキュメントをフォーマットしたり、ドキュメントのトピック、ページ番号、コピーライトなどの有用な情報を表示するために使用されます。[Free Spire.Doc for Java](https://jp.e-iceblue.com/introduce/free-spire-doc-for-java.html)を使用すると、Javaアプリケーションで**Wordドキュメントのヘッダーとフッターを追加、挿入、または削除する**ことができます。今回は、Wordドキュメントにヘッダーとフッターを追加・削除する方法を、以下の2つのパートからご紹介します。
- **[Wordドキュメントにヘッダーとフッターを追加する](#wordドキュメントにヘッダーとフッターを追加する)**
- **[Wordドキュメントからヘッダーとフッターを削除する](#wordドキュメントからヘッダーとフッターを削除する)**

## 【依存関係の追加】
> **この方法は、無料のFree Spire.Doc for Javaが必要ですので、先にjarファイルをインポートしてください。**

### 1. Maven
Maven を使用している場合、プロジェクトの pom.xml ファイルに以下のコードを追加することで、簡単にアプリケーションに JAR ファイルをインポートすることができます。

```XML
<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.doc.free</artifactId>
        <version>5.1.0</version>
    </dependency>
</dependencies>
```

### 2. 公式サイトよりJarファイルをダウンロード
まず、[Free Spire.Doc for Java](https://jp.e-iceblue.com/introduce/free-spire-doc-for-java.html) の公式サイトよりzipファイルをダウンロードします。zipファイルを解凍し、libフォルダの下にあるSpire.Doc.jarファイルを依存関係としてプロジェクトにインポートしてください。

## Wordドキュメントにヘッダーとフッターを追加する
> **Spire.Docは、Wordドキュメントのヘッダーまたはフッターにテキスト、画像、ライン、ページ番号を追加することをサポートしています。**

- **Document**クラスのインスタンスを作成し、**Document.loadFromFile()** メソッドでWordドキュメントを読み込みます。
- **Document.getSections().get()** メソッドを使用して、最初のセクションを取得します。
- **section.getHeadersFooters().getHeader()** メソッドを使用してヘッダーを取得し、**section.getHeadersFooters().getFooter()** メソッドを使用してフッターを取得します。
- **header.addParagraph()** メソッドを使用して、ヘッダーに段落を追加しています。
- **headerParagraph.appendPicture()** メソッドを使用してヘッダーとして画像を挿入し、画像の位置を設定します。
- **headerParagraph.appendText()** メソッドを使用してヘッダーにテキストを挿入し、テキストの形式を設定します。
- **footer.addParagraph()** メソッドを使用してフッターに段落を追加します。
- **footerParagraph.appendField()** メソッドでField_PageフィールドとField_Num_Pagesフィールドをフッターの段落に追加し、それらの書式を設定する。
- **Document.saveToFile()** メソッドを使用して、ドキュメントをファイルに保存します。

**Java**

```Java
import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.DocPicture;
import com.spire.doc.fields.TextRange;

import java.awt.*;


public class insertHeaderFooter {
    public static void main(String[] args) throws Exception {

        //Documentクラスのインスタンスを作成する
        Document document = new Document();

        //Wordドキュメントを読み込む
        document.loadFromFile("Sample.docx");

        //最初のセクションを取得する
        Section section = document.getSections().get(0);

        //insertHeaderAndFooterメソッドを呼び出し、セクションにヘッダーとフッターを追加する
        insertHeaderAndFooter(section);

        //ドキュメントをファイルに保存する
        document.saveToFile("ヘッダーとフッター.docx", FileFormat.Docx);
    }

    private static void insertHeaderAndFooter(Section section) {

        //セクションからヘッダーとフッターを取得する
        HeaderFooter header = section.getHeadersFooters().getHeader();
        HeaderFooter footer = section.getHeadersFooters().getFooter();

        //ヘッダーに段落を追加する
        Paragraph headerParagraph = header.addParagraph();

        //ヘッダー段落に画像を挿入し、その位置を設定する
        DocPicture headerPicture = headerParagraph.appendPicture("ヘッダー.jpg");
        headerPicture.setHorizontalAlignment(ShapeHorizontalAlignment.Center);
        headerPicture.setVerticalOrigin(VerticalOrigin.Top_Margin_Area);
        headerPicture.setVerticalAlignment(ShapeVerticalAlignment.Top);

        //ヘッダー段落にテキストを追加する
        TextRange text = headerParagraph.appendText("農村の資本主義化");
        text.getCharacterFormat().setFontName("Yu Mincho");
        text.getCharacterFormat().setFontSize(10);
        text.getCharacterFormat().setItalic(true);
        text.getCharacterFormat().setTextColor(Color.RED);
        headerParagraph.getFormat().setHorizontalAlignment(HorizontalAlignment.Right);

        //テキストの折り返しスタイルを設定する
        headerPicture.setTextWrappingStyle(TextWrappingStyle.Behind);

        //ヘッダー段落の下部のボーダースタイルを設定する
        headerParagraph.getFormat().getBorders().getBottom().setBorderType(BorderStyle.Single);
        headerParagraph.getFormat().getBorders().getBottom().setLineWidth(1f);

        //ヘッダーの距離を調整する
        section.getPageSetup().setHeaderDistance(70);

        //フッターに段落を追加する
        Paragraph footerParagraph = footer.addParagraph();

        //フッター段落にField_PageとField_Num_Pagesのフィールドを追加する
        footerParagraph.appendField("ページ番号", FieldType.Field_Page);
        footerParagraph.appendText(" / ");
        footerParagraph.appendField("ページ数", FieldType.Field_Num_Pages);
        footerParagraph.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);

        //フッター段落の上部のボーダースタイルを設定する
        footerParagraph.getFormat().getBorders().getTop().setBorderType(BorderStyle.Single);
        footerParagraph.getFormat().getBorders().getTop().setLineWidth(1f);

        //フッターの距離を調整する
        section.getPageSetup().setFooterDistance(70);
    }
}
```

### 【結果のWordドキュメント】

![Wordドキュメントにヘッダーとフッターを追加する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/21dee9ba-fbb2-7b3f-a9fa-3304341698f7.png)
 
## Wordドキュメントからヘッダーとフッターを削除する
> **Wordドキュメントには、先頭ページ、奇数ページ、偶数ページという3種類のヘッダーとフッターが存在します。この例では、Spire.Doc for Javaを使用して、Wordドキュメント内の先頭ページ、奇数ページ、偶数ページのヘッダーとフッターをすべて削除する方法を紹介します。**

- **Document**クラスのインスタンスを作成します。
- **Document.loadFromFile()** メソッドを使用して Word ドキュメントを読み込みます。
- **Document.getSections().get()** メソッドを使用して、最初のセクションを取得します。
- **section.getHeadersFooters().getByHeaderFooterType()** メソッドを使用して、すべてのヘッダーとフッターを取得します。
- **HeaderFooter.getChildObjects().clear()** メソッドを使用して、すべてのヘッダーとフッターを削除します。
- **Document.saveToFile()** メソッドを使用して、ドキュメントをファイルに保存します。

**Java**

```Java
import com.spire.doc.*;
import com.spire.doc.documents.*;

public class removeHeaderFooter {
    public static void main(String[] args) throws Exception {

        //Documentクラスのインスタンスを作成する
        Document document = new Document();

        //Wordドキュメントを読み込む
        document.loadFromFile("ヘッダーとフッター.docx");

        //最初のセクションを取得する
        Section section = document.getSections().get(0);

        //1ページ目のヘッダーを削除する
        HeaderFooter header = section.getHeadersFooters().getByHeaderFooterType(HeaderFooterType.Header_First_Page);
        if (header != null)
            header.getChildObjects().clear();

        //奇数ページのヘッダーを削除する
        header = section.getHeadersFooters().getByHeaderFooterType(HeaderFooterType.Header_Odd);
        if (header != null)
            header.getChildObjects().clear();

        //偶数ページのヘッダーを削除する
        header = section.getHeadersFooters().getByHeaderFooterType(HeaderFooterType.Header_Even);
        if (header != null)
            header.getChildObjects().clear();


        //1ページ目のフッターを削除する
        HeaderFooter footer = section.getHeadersFooters().getByHeaderFooterType(HeaderFooterType.Footer_First_Page);
        if (footer != null)
            footer.getChildObjects().clear();

        //奇数ページのフッターを削除する
        footer = section.getHeadersFooters().getByHeaderFooterType(HeaderFooterType.Footer_Odd);
        if (footer != null)
            footer.getChildObjects().clear();

        //偶数ページのフッターを削除する
        footer = section.getHeadersFooters().getByHeaderFooterType(HeaderFooterType.Footer_Even);
        if (footer != null)
            footer.getChildObjects().clear();


        //結果のドキュメントを保存する
        document.saveToFile("ヘッダーとフッターの削除.docx", FileFormat.Docx_2013);

    }
}
```

### 【結果のWordドキュメント】

![Wordドキュメントからヘッダーとフッターを削除する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/6fbc3290-a002-6525-aec2-40eb6c26ce8d.png)

> **Word ドキュメントにヘッダーとフッターを追加、挿入、削除する方法を学ぶことができます。もし、まだ何か問題がある場合や、もっと文書の扱い方を学びたい場合は、[Spire.Doc Forum](https://www.e-iceblue.com/forum/spire-doc-f6.html)でより詳しい情報をご覧になってください。**