【Java】Word文書の文書プロパティの追加、読み取り、削除

Word文書の文書プロパティは、作成者、タイトル、サブタイトル、キーワードなど、文書情報の要約です。プロパティを読み取ることで、文書を整理・管理し、文書の検索、選別、分類を容易にすることができます。文書にこれらのプロパティを追加して処理に役立てることもできますし、この情報を他人に見られたくない場合には、Word文書からこれらのプロパティを削除することもできます。この記事では、無料の[Free Spire.Doc for Java](https://jp.e-iceblue.com/introduce/free-spire-doc-for-java.html)を使用して、**Word文書から文書プロパティを追加、読み取り、削除**する方法を紹介します。
- **[Word文書に文書のプロパティを追加する](#word文書に文書のプロパティを追加する)**
- **[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.2.0</version>
    </dependency>
</dependencies>
```

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

## Word文書に文書のプロパティを追加する
Word文書のプロパティには、内蔵プロパティとユーザー定義プロパティがあります。 内蔵プロパティとは、あらかじめ名前と値が定義されたプロパティで、ユーザー定義プロパティとは、名前、型、値を自分で設定可能なプロパティです。以下、2種類のプロパティをWord文書に追加する方法の手順を説明します。
- **Document** のオブジェクトを作成します。
- **Document.loadFromFile()** メソッドでWord文書を読み込みます。
- **Document.getBuiltinDocumentProperties()** メソッドと **Document.getCustomDocumentProperties()** メソッドで、内蔵プロパティとユーザー定義プロパティを取得します。
- **BuiltinDocumentProperties** クラスのメソッドを使用して、内蔵プロパティの値を設定します。
- **CustomDocumentProperties** クラスのメソッドを使用して、ユーザー定義プロパティの名前と値を設定します。
- **Document.saveToFile()** メソッドを使用して、文書を保存します。

**Java**
```java
import com.spire.doc.BuiltinDocumentProperties;
import com.spire.doc.CustomDocumentProperties;
import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import com.spire.ms.System.DateTime;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class AddDocumentProperties {
    public static void main(String[] args) {

        //Documentのオブジェクトを作成する
        Document document = new Document();

        //Word文書を読み込む
        document.loadFromFile("C:/サンプル.docx");

        //内蔵プロパティとユーザー定義プロパティを取得する
        BuiltinDocumentProperties builtinDocumentProperties = document.getBuiltinDocumentProperties();
        CustomDocumentProperties customDocumentProperties = document.getCustomDocumentProperties();


        //内蔵プロパティの値を設定する
        builtinDocumentProperties.setTitle("時は物である");
        builtinDocumentProperties.setSubject("時間には、研究所で測定できる物理的な大きさがあります。");
        builtinDocumentProperties.setAuthor("宮下 由奈");
        builtinDocumentProperties.setManager("河面 麗菜");
        builtinDocumentProperties.setCompany("宇宙科学研究所");
        builtinDocumentProperties.setCategory("理論物理学");
        builtinDocumentProperties.setKeywords("時間; 時間の定義; 時間を超越した宇宙");
        builtinDocumentProperties.setComments("記事の改訂が必要です。");

        //ユーザー定義プロパティを追加する
        SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy年MM月dd日");
        customDocumentProperties.add("完了日", dateFormater.format(new Date()));
        customDocumentProperties.add("言語", "日本語");
        customDocumentProperties.add("修正有無", false);
        customDocumentProperties.add("文書番号", 23030502);

        //文書を保存する
        document.saveToFile("文書プロパティの追加.docx", FileFormat.Auto);
        document.dispose();
    }
}
```
**【結果文書】**
![Word文書に文書のプロパティを追加する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/7e4a739a-b32d-0006-d217-f31f9c587e4f.png)

## Word文書から文書プロパティを読み取る
Free Spire.Doc for Javaでは、**BuiltinDocumentProperties** の下に、各内蔵プロパティの値を取得するためのメソッドを用意しています。また、**CustomDocumentProperties.get().getName()** メソッドと **CustomDocumentProperties.get().getValue()** メソッドで、ユーザー定義プロパティの名前と値を取得することができます。詳しい手順は以下の通りです。
- **Document** のオブジェクトを作成します。
- **Document.loadFromFile()** メソッドでWord文書を読み込みます。
- **Document.getBuiltinDocumentProperties()** メソッドと **Document.getCustomDocumentProperties()** メソッドで、内蔵プロパティとユーザー定義プロパティを取得します。
- **BuiltinDocumentProperties** クラスのメソッドを使用して、各内蔵プロパティの値を取得します。
- ユーザー定義プロパティをループして、**CustomDocumentProperties.get().getName()** メソッドと **CustomDocumentProperties.get().getValue()** メソッドを使用して、各ユーザー定義プロパティの名前と値を取得します。

**Java**
```java
import com.spire.doc.BuiltinDocumentProperties;
import com.spire.doc.CustomDocumentProperties;
import com.spire.doc.Document;

public class GetDocumentProperties {
    public static void main(String[] args) {

        //Documentのオブジェクトを作成する
        Document document = new Document();

        //Word文書を読み込む
        document.loadFromFile("文書プロパティの追加.docx");

        //StringBuilderのオブジェクトを作成する
        StringBuilder properties = new StringBuilder();

        //すべての内蔵プロパティとユーザー定義プロパティを取得する
        BuiltinDocumentProperties builtinDocumentProperties = document.getBuiltinDocumentProperties();
        CustomDocumentProperties customDocumentProperties = document.getCustomDocumentProperties();

        //各内蔵プロパティの値を取得する
        String title = builtinDocumentProperties.getTitle();
        String subject = builtinDocumentProperties.getSubject();
        String author = builtinDocumentProperties.getAuthor();
        String manager = builtinDocumentProperties.getManager();
        String category = builtinDocumentProperties.getCategory();
        String company = builtinDocumentProperties.getCompany();
        String keywords = builtinDocumentProperties.getKeywords();
        String comments = builtinDocumentProperties.getComments();

        //テキストの表示形式を設定する
        String builtinProperties = String.format("内蔵プロパティ：\r\nタイトル：" + title
                + "\r\nサブタイトル：" + subject + "\r\n作成者：" + author
                + "\r\n管理者：" + manager + "\r\n会社名：" + company
                + "\r\n分類：" + category + "\r\nキーワード："+ keywords
                + "\r\nコメント：" + comments
        );

        //StringBuilderのオブジェクトに内蔵プロパティを追加する
        properties.append(builtinProperties);

        //各ユーザー定義プロパティを取得する
        properties.append("\r\n\r\nユーザー定義プロパティ：");
        for (int i = 0; i < customDocumentProperties.getCount(); i++) {
            String customProperties = String.format("\r\n" + customDocumentProperties.get(i).getName() + "：" + customDocumentProperties.get(i).getValue());

            //StringBuilderのオブジェクトにユーザー定義のプロパティを追加する
            properties.append(customProperties);
        }

        //文書プロパティを出力する
        System.out.println(properties);
    }
}
```
**【読み取り結果】**
![Word文書から文書プロパティを読み取る](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/cce8c51d-2ef5-0be2-be6d-ed3f40e1a245.png)

## Word文書から文書プロパティを削除する
組み込みのプロパティは、その値を空に設定することで削除することができます。ユーザー定義プロパティについては、**CustomDocumentProperties.get().getName()** メソッドでその名前を取得し、**CustomDocumentProperties.remove()** でその名前をパラメータとして使用して削除することができます。
- **Document** のオブジェクトを作成します。
- **Document.loadFromFile()** メソッドでWord文書を読み込みます。
- **Document.getBuiltinDocumentProperties()** メソッドと **Document.getCustomDocumentProperties()** メソッドで、内蔵プロパティとユーザー定義プロパティを取得します。
- **BuiltinDocumentProperties** クラスのメソッドを使用して、内蔵プロパティの値を空に設定し、それらを削除します。
- **CustomDocumentProperties.getCount()** メソッドを使用して、ユーザー定義プロパティの数を取得します。
- ユーザー定義プロパティをループして、**CustomDocumentProperties.get().getName()** メソッドでその名前を取得し、**CustomDocumentProperties.remove()** メソッドでそれらを削除します。
- **Document.saveToFile()** メソッドで文書を保存します。

**Java**
```java
import com.spire.doc.BuiltinDocumentProperties;
import com.spire.doc.CustomDocumentProperties;
import com.spire.doc.Document;
import com.spire.doc.FileFormat;

public class RemoveDocumentProperties {
    public static void main(String[] args) {

        //Documentのオブジェクトを作成する
        Document document = new Document();

        //Word文書を読み込む
        document.loadFromFile("文書プロパティの追加.docx");

        //すべての内蔵属性とユーザー定義属性を取得する
        BuiltinDocumentProperties builtinDocumentProperties = document.getBuiltinDocumentProperties();
        CustomDocumentProperties customDocumentProperties = document.getCustomDocumentProperties();

        //内蔵プロパティの値を空に設定し、削除する
        builtinDocumentProperties.setTitle("");
        builtinDocumentProperties.setSubject("");
        builtinDocumentProperties.setAuthor("");
        builtinDocumentProperties.setManager("");
        builtinDocumentProperties.setCompany("");
        builtinDocumentProperties.setCategory("");
        builtinDocumentProperties.setKeywords("");
        builtinDocumentProperties.setComments("");

        //ユーザー定義プロパティの数を取得する
        int count = customDocumentProperties.getCount();

        //すべてのユーザー定義プロパティをループする
        for (int i = count; i > 0; i-- ){

            //指定されたユーザー定義プロパティの名前を取得する
            String name = customDocumentProperties.get(i-1).getName();

            //このユーザー定義プロパティを名前で削除する
            customDocumentProperties.remove(name);
        }

        //文書を保存する
        document.saveToFile("文書プロパティの削除.docx", FileFormat.Auto);
        document.dispose();
    }
}
```
**【結果文書】**
![Word文書から文書プロパティを削除する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/c00db180-b204-cfbc-753c-0048e7a17fc8.png)

> **Word文書のプロパティには、重要な情報が含まれています。これらのプロパティは、文書処理を容易にするために使用したり、プライバシーを保護するために削除することができます。Free Spire.Doc for Javaには他にも多くの文書処理機能があります。Word文書操作の詳細については、[Spire.Doc for Javaのチュートリアル](https://jp.e-iceblue.com/tutorials/java/spire-doc-java/doc-java-program-guide-content.html)にアクセスしてください。**