PythonでPDFのプロパティを管理し、より良いPDF文書を作成

PDF文書プロパティとは、 文書に埋め込まれている文書関連情報として、 作成者・作成日・タイトルなどが挙げられます。PDF文書プロパティには、デフォルトプロパティとカスタムプロパティがあります。デフォルトプロパティには、設定可能な部分と自動的に生成される部分があります。ユーザは、PDFリーダで文書のプロパティを表示することにより、文書に関する重要な情報に素早くアクセスすることができます。この文書情報の設定方法と取得方法を理解することは、 ユーザーフリーな文書を作成したり、多くの文書を扱うために非常に有用です。この記事では、Pythonプログラムを通してPDFのプロパティを設定・取得する方法を紹介します。

- **[PDF文書のプロパティの設定](#pdf文書のプロパティの設定)**
- **[PDF文書のプロパティの取得](#pdf文書プロパティの取得)**

この記事で使用する方法は、[Spire.PDF for Python](https://www.e-iceblue.com/Introduce/pdf-for-python.html)を必要とします。これは公式ウェブサイトからダウンロードするか、pip経由で直接インストールすることができます：
```powershell
pip install Spire.PDF
```

## PDF文書のプロパティの設定
Spire.PDF for Pythonは、PDFドキュメントのプロパティを処理するために **PdfDocumentInformation** クラスを提供しています。このクラスには、作成者、テーマ、キーワードなどのドキュメントのデフォルトプロパティを設定するための複数のプロパティが存在します。さらに、**PdfDocumentInformation.SetCustomProperty()** メソッドを使用して、PDF ドキュメントのカスタムプロパティを設定することもできます。以下に、PDF プロパティを設定する詳細な手順を示します：

- **PdfDocument** クラスのオブジェクトを作成し、**PdfDocument.LoadFromFile()** メソッドを使用してPDFドキュメントを読み込みます。
- **PdfDocument.DocumentInformation** プロパティを使用して、PDFドキュメントのプロパティを取得します。
- **PdfDocumentInformation** クラスのプロパティを使用して、ドキュメントのデフォルトプロパティを設定します。
- **PdfDocumentInformation.SetCustomProperty()** メソッドを使用して、ドキュメントのカスタムプロパティを設定します。
- **PdfDocument.SaveToFile()** メソッドを使用して、ドキュメントを保存します。

**コード例**
**Python**
```python
from spire.pdf import *
from spire.pdf.common import *

# クラスPdfDocumentのオブジェクトを作成し、PDFドキュメントをロードします
pdf = PdfDocument()
pdf.LoadFromFile("サンプル.pdf")

# ドキュメントのプロパティを取得します
properties = pdf.DocumentInformation

# 組み込みのプロパティを設定します
properties.Author = "John"
properties.Creator = "Spire.PDF"
properties.Keywords = "クラウドサービス、デジタルビジネス"
properties.Subject = "クラウドサービスの導入とその利点"
properties.Title = "クラウドサービスの力：デジタル企業の強化"
properties.Producer = "Spire.PDF for Python"

# ユーザー定義のプロパティを設定します
properties.SetCustomProperty("会社", "E-iceblue")
properties.SetCustomProperty("タグ", "クラウド、デジタルビジネス、サーバー")

# ドキュメントを保存します
pdf.SaveToFile("output/PDFプロパティの設定.pdf")
pdf.Close()
```

**結果文書**

![PDF文書のプロパティの設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/6fa0bfd1-67bf-1def-6895-b9af2dbec0ac.png)

## PDF文書のプロパティの取得
デフォルトのPDFプロパティの情報は、**PdfDocumentInformation** クラスのプロパティを使用して取得できますが、カスタムのPDFプロパティの情報は、**PdfDocumentInformation.GetCustomProperty()** メソッドを使用して取得する必要があります。PDF プロパティを取得する具体的な手順は以下の通りです：

- **PdfDocument** クラスのオブジェクトを作成し、**PdfDocument.LoadFromFile()** メソッドを使用してPDFドキュメントを読み込みます。
- **PdfDocument.DocumentInformation** プロパティを使用して、文書のプロパティを取得します。
- **PdfDocumentInformation** クラスのプロパティを使用して、組み込みの属性の情報を取得します。例えば、作成者、タイトル、キーワードなどです。これらのプロパティには直接アクセスできます。
- **PdfDocumentInformation.GetCustomProperty()** メソッドを使用して、カスタム属性の情報を取得します。このメソッドには属性名を指定する必要があります。カスタム属性の内容を取得するために、このメソッドを使用します。
- 取得したプロパティの内容を出力します。

**コード例**
**Python**
```python
from spire.pdf import *
from spire.pdf.common import *

# クラスPdfDocumentのオブジェクトを作成し、PDFドキュメントをロードします
pdf = PdfDocument()
pdf.LoadFromFile("output/PDFプロパティの設定.pdf")

# ドキュメントのプロパティを取得します
properties = pdf.DocumentInformation

# 文字列を作成します
information = ""

# 組み込みのプロパティを取得します
information += "作成者: " + properties.Author
information += "\nタイトル: " + properties.Title
information += "\nサブタイトル: " + properties.Subject
information += "\nキーワード: " + properties.Keywords
information += "\nアプリケーション: " + properties.Creator
information += "\nPDF 変換: " + properties.Producer

# ユーザー定義のプロパティを取得します
information += "\n会社: " + properties.GetCustomProperty("会社")
information += "\nタグ: " + properties.GetCustomProperty("タグ")

# ドキュメントのプロパティを出力します
print(information)
pdf.Close()
```

**結果文書**

![2023-11-10_174543.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/34cca774-bf22-34b4-a173-cecbfdbefd71.png)

上記は、Pythonを通してPDF文書のプロパティ情報を設定または取得する方法について説明しています。 その他の機能については、[Spire.PDF for Pythonチュートリアル](https://www.e-iceblue.com/Tutorials/Python/Spire.PDF-for-Python/Program-Guide/Spire.PDF-for-Python-Program-Guide-Content.html)をご覧ください。