PythonでPDFファイルに電子署名を追加する

デジタル時代において、文書のセキュリティと信頼性は特に重要になっています。ビジネス文書であれ、法的文書であれ、個人的な文書であれ、その出所の真正性と完全性を証明する必要があるかもしれません。PDF電子署名は、これらの問題を解決するための重要なツールです。
PDF電子署名は、文書のセキュリティを確保するだけでなく、紙文書の処理効率を向上させ、処理時間を短縮し、企業や個人に大きな利便性と安全性をもたらします。この記事では、**PDF文書に電子署名を追加する**ためにPythonを使用する方法を紹介するために、次の2つの例を提供します。
* [PythonでPDFに可視署名を追加する](#pythonでpdfに可視署名を追加する)
* [PythonでPDFに不可視署名を追加する](#pythonでpdfに不可視署名を追加する)

## 必要なPythonライブラリのインストール
[**Spire.PDF for Python**](https://www.e-iceblue.com/Introduce/pdf-for-python.html)ライブラリがPDFへの電子署名の追加をサポートしました。以下のpipコマンドでインストールできます。
> pip install Spire.PDF

ライブラリを更新するには：
> pip install --upgrade Spire.PDF


## PythonでPDFに可視署名を追加する
以下は、署名画像と詳細を含む可視デジタル署名をPDF文書に追加する主な手順です：
1.	PDF文書を読み込みます。
2.	**`PdfOrdinarySignatureMaker`** オブジェクトを作成し、PDF文書、pfx証明書、証明書パスワードをパラメータとして渡します。
3.	**`PdfOrdinarySignatureMaker`** クラスのプロパティを使用して、署名者名、連絡先、場所、署名理由などの署名の詳細を設定します。
4.	署名用の **`PdfSignatureAppearance`** インスタンスを作成し、署名ラベルをカスタマイズして署名画像を設定します。
5.	**`PdfDocument.Pages[]`** プロパティを使用して、PDF 文書内の特定のページを取得します。
6.	**`PdfOrdinarySignatureMaker.MakeSignature(sigFieldName: str, page： PdfPageBase, x: float, y: float, width: float, height: float： IPdfSignatureAppearance)`** メソッドを使用して、ページ上の特定の位置に電子署名を追加します。
7.	署名された PDF 文書を保存します。

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

# PDFファイルを読み込む
pdf = PdfDocument()
pdf.LoadFromFile("input.pdf")

# PdfOrdinarySignatureMakerの作成
signatureMaker = PdfOrdinarySignatureMaker(pdf, "gary.pfx", "e-iceblue")

# 署名プロパティの設定
signature = signatureMaker.Signature
signature.Name = "Gary"
signature.ContactInfo = "12345678"
signature.Location = "US"
signature.Reason = "Document creator"

# 署名の外観をカスタマイズする
appearance = PdfSignatureAppearance(signature)
appearance.NameLabel = "Signer: "
appearance.ContactInfoLabel = "Phone: "
appearance.LocationLabel = "Location: "
appearance.ReasonLabel = "Reason: "
# 署名画像の設定
appearance.SignatureImage = PdfImage.FromFile("C:\\Users\\Administrator\\Desktop\\Sig.jpg")
appearance.SignImageLayout = SignImageLayout.Stretch
# 署名画像と詳細の両方を表示する表示モードの設定
appearance.GraphicMode = GraphicMode.SignImageAndSignDetail

# 最初のページを見る
page = pdf.Pages[0]

# ページの指定された場所に署名を追加する
signatureMaker.MakeSignature("Gary签名", page, 150.0, 720.0, 260.0, 100.0, appearance)

# PDF文書を保存する
pdf.SaveToFile("PDFSignature.pdf")
pdf.Close()
```

## PythonでPDFに不可視署名を追加する
可視デジタル署名は、PDFページ上の署名画像や署名の詳細を表示しますので、時にはそれは文書の外観に影響を与える可能性があり、一方、不可視署名は、文書の外観をきれいに保つことができます。PDFに不可視署名を追加する手順は、以下に示すように、比較的簡単です：
1.	PDF文書を読み込みます。
2.	**`PdfOrdinarySignatureMaker`** オブジェクトを作成し、PDF 文書、pfx 証明書、証明書パスワードをパラメータとして渡します。
3.	**`PdfOrdinarySignatureMaker.MakeSignature(sigFieldName: str)`** メ ソ ッ ド を使っ て、PDF 文書に不可視の電子署名を追加 し ます。
4.	署名付きPDF文書を保存します。


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

# PDFファイルを読み込む
pdf = PdfDocument()
pdf.LoadFromFile("inputR.pdf")

# PdfOrdinarySignatureMakerの作成
signatureMaker = PdfOrdinarySignatureMaker(pdf, "gary.pfx", "e-iceblue")

# 文書に不可視の署名を追加する
signatureMaker.MakeSignature("署名： Gary")

# PDF文書を保存する
pdf.SaveToFile("PdfDigitalSignature.pdf")
pdf.Close()
```
![PdfDigitalSignature.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/25de7b30-b5c7-96c0-300c-84f050d9b5ec.png)



上記の2つの例により、文書のセキュリティと真正性を確保するために、さまざまな場面で最適な署名方法を選択することができます。生成された文書の赤い透かしは、トライアルライセンスで削除することができます：

https://www.e-iceblue.com/TemLicense.html