Pythonを利用してPDFのレイヤーを追加、非表示、削除する

PDFのレイヤーは画像編集ソフトのレイヤーと似ており、文書のさまざまな要素を個別に整理・管理することができます。各レイヤーは、テキスト、画像、グラフィック、注釈などの異なるコンテンツを含むことができ、独立して表示または非表示にすることができます。PDFレイヤーは、文書内の特定の要素の表示や位置を制御するために使用されることが多く、複雑なレイアウトの管理や動的なデザインの作成、情報の表示の制御が容易になります。この記事では、Pythonプログラムを使って**PDF文書内のレイヤーを追加・非表示・削除する方法**を紹介します。

- **[PythonでPDFにレイヤーを追加する](#pythonでpdfにレイヤーを追加する)**
- **[PythonでPDFのレイヤーの可視性を設定する](#pythonでpdfのレイヤーの可視性を設定する)**
- **[PythonでPDFからレイヤーを削除する](#pythonでpdfからレイヤーを削除する)**

この記事で使用している方法は、[Spire.PDF for Python](https://www.e-iceblue.com/Download/Spire-PDF-Python.html)が必要です。公式サイトからダウンロードするか、PyPIからインストールすることができます： `pip install Spire.PDF`。

## PythonでPDFにレイヤーを追加する
**PdfDocument.SaveToFile()** メソッドは、PDFドキュメントをHTML形式に変換することができます。具体的な手順は以下の通りです。
- **PdfDocument** クラスのオブジェクトを作成します。
- **PdfDocument.LoadFromFile()** メソッドを使用してPDFドキュメントを読み込みます。
- **PdfDocument.SaveToFile()** メソッドを使用してPDFドキュメントをHTML形式で保存します。

```python
from spire.pdf.common import *
from spire.pdf import *

# PdfDocumentのインスタンスを作成する
doc = PdfDocument()

# PDFファイルを読み込む
doc.LoadFromFile("サンプル.pdf")

# "透かし"という名前のレイヤーを作成する
layer = doc.Layers.AddLayer("透かし")

# フォントを作成する
font = PdfTrueTypeFont("HarmonyOS Sans SC", 50.0, 1, True)

# 透かしのテキストを指定する
watermarkText = "コピー禁止"

# テキストのサイズを取得する
fontSize = font.MeasureString(watermarkText)

# ページ数を取得する
pageCount = doc.Pages.Count

# ページを繰り返す
for i in range(0, pageCount):

    # 特定のページを取得する
    page = doc.Pages[i]

    # レイヤー用のキャンバスを作成する
    canvas = layer.CreateGraphics(page.Canvas)

    # グラフィックスにテキストを描画する
    canvas.DrawString(watermarkText, font, PdfBrushes.get_Gray(), (canvas.Size.Width - fontSize.Width)/2, (canvas.Size.Height - fontSize.Height)/2 )

# ファイルに保存する
doc.SaveToFile("output/PDFにレイヤーを追加.pdf", FileFormat.PDF)
doc.Close()
```

出力PDF文書：
![PythonでPDFにレイヤーを追加する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/98205607-3a1c-2e6b-7a66-16157b4cdec0.png)

## PythonでPDFのレイヤーの可視性を設定する
PDFドキュメント内のレイヤーの表示状態を制御するには、**PdfDocument.Layers[index].Visibility** プロパティを使用します。レイヤーを非表示にするには、それをoffに設定し、レイヤーを表示するには、それをonに設定します。具体的な手順は以下の通りです。
- **PdfDocument** オブジェクトを作成します。
- **PdfDocument.LoadFromFile()** メソッドを使用してPDFファイルを読み込みます。
- **Document.Layers[index].Visibility** プロパティを使用して、特定のレイヤーの表示状態を設定します。
- **PdfDocument.SaveToFile()** メソッドを使用して、ドキュメントを別のPDFファイルに保存します。

```python
from spire.pdf.common import *
from spire.pdf import *

# PdfDocumentのインスタンスを作成
doc = PdfDocument()

# PDFファイルを読み込む
doc.LoadFromFile("サンプル.pdf")

# レイヤーの表示をオフにして非表示にする
doc.Layers[0].Visibility = PdfVisibility.Off

# ファイルに保存
doc.SaveToFile("output/PDFレイヤーを隠す.pdf", FileFormat.PDF)
doc.Close()
```

## PythonでPDFからレイヤーを削除する
不要なレイヤーを削除するには、**PdfDocument.Layers.RemoveLayer()** メソッドを使用します。以下に具体的な手順を示します。
- **PdfDocument** オブジェクトを作成します。
- **PdfDocument.LoadFromFile()** メソッドを使用してPDFファイルを読み込みます。
- **PdfDocument.Layers[index]** プロパティを使用して、特定のレイヤーを取得します。
- **PdfDcument.Layers.RemoveLayer(PdfLayer.Name)** メソッドを使用して、ドキュメントからレイヤーを削除します。
- **PdfDocument.SaveToFile()** メソッドを使用して、ドキュメントを別のPDFファイルに保存します。

```python
from spire.pdf.common import *
from spire.pdf import *

# PdfDocumentのインスタンスを作成
doc = PdfDocument()

# PDFファイルを読み込む
doc.LoadFromFile("サンプル.pdf")

# 特定のレイヤーを削除する
doc.Layers.RemoveLayer(doc.Layers[0].Name)

# ファイルに保存
doc.SaveToFile("output/PDFレイヤーを削除.pdf", FileFormat.PDF)
doc.Close()
```

> **この記事では、Pythonコードを使用してPDFドキュメントにレイヤーを追加、非表示、削除する方法について説明しました。Spire.PDF for 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)を参照してください。もしAPIの使用中に問題が発生した場合は、[Spire.PDFフォーラム](https://www.e-iceblue.com/forum/spire-pdf-f7.html)で技術サポートを受けることができます。**