PDFファイルにデジタル署名する

PDF 文書は、情報共有に広く使用されているファイル形式の 1 つです。通常、契約書などの機密性や法的価値を持ちます。ファイルの整合性を確保し、偽造を防ぐために、デジタル署名を追加します。これにより、文書が作成者以外の人物によって変更されていないことが保証され、作成者が期待どおりの人物であり、他の誰かではないことが検証されます。

PDF のデジタル署名は紙の文書のインク署名と同等ですが、はるかに安全です。この情報は文書内に配置され、一般的な PDF リーダーは、文書が未知の人物によって変更されていないことを確認できます。この記事では、PHP で PDF 文書にオンラインでデジタル署名する方法について詳しく説明します。

cURLコマンドを使用してAPIにアクセスする

当社の API は REST アーキテクチャの原則に従って構築されているため、cURL コマンド経由でもアクセスできます。当社の API は承認されたユーザーのみがアクセスできるため、API にアクセスする前に、まず Aspose.Cloud ダッシュボード にアクセスし、GitHub または Google アカウントをお持ちの場合はサインアップしてください。そうでない場合は、新しいアカウントの作成 ボタンをクリックして必要な情報を入力します。資格情報を使用してダッシュボードにログインし、ダッシュボードからアプリケーション セクションを展開して、クライアント資格情報セクションまで下にスクロールすると、クライアント ID とクライアント シークレットの詳細が表示されます。

次のステップでは、コマンド プロンプトから API にアクセスできるように JSON Web Token (JWT) を生成します。同じ JWT トークンが、cURL コマンドを介して API にアクセスするときにも使用されます。

curl -v "https://api.aspose.cloud/connect/token" \
-X POST \
-d "grant_type=client_credentials&client_id=a41d01ef-dfd5-4e02-ad29-bd85fe41e3e4&client_secret=d87269aade6a46cdc295b711e26809af" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: application/json"

PHP SDK 経由で API にアクセスする

PHP コードを使用してプログラム的に PDF ファイルを処理したい PHP のお客様の便宜を図るため、Aspose.PDF Cloud API のラッパーである PHP 用 Aspose.PDF Cloud SDK を開発しました。同じ SDK を使用して、デジタル署名を処理し、関連する操作を実行できます。SDK は Composer および GitHub からダウンロードできます。

ここでは、composer を使用して Aspose.PDF Cloud SDK for PHP をインストールする手順について説明します。SDK と併用し、プロジェクトの依存関係を管理するには、Composer の使用が推奨されていることは既に承知しています。システムで composer を構成したら、次のコマンドを使用して Aspose.PDF Cloud SDK for PHP をインストールしてみてください。

composer require aspose/pdf-sdk-php

署名フィールドの読み取り

API を使用すると、PDF ドキュメントで既に使用可能な署名フィールドに関連付けられたプロパティを読み取ることができます。署名フィールドを読み取るには、2 つのオプションがあります。

  • GetPageSignatureFields APIを使用して、文書の特定のページから署名フィールドを読み取る
  • GetSignatureField APIを使用して名前で文書の署名フィールドを読み取る

ドキュメントの特定のページから署名フィールドを読み取るには、次の cURL コマンドを使用してみてください。次のコマンドでは、BlankWithSignature.pdf がソース PDF ファイルであることに注意してください。

curl -X GET "https://api.aspose.cloud/v3.0/pdf/BlankWithSignature.pdf/page/1/fields/signature" \
-H  "accept: application/json" \
-H  "authorization: Bearer <JWT Token>"

ここで、ドキュメント上の特定の署名フィールドに関連付けられたプロパティを読み取るには、特定の署名フィールドの名前を引数として指定する次のコマンドを使用してみてください。

curl -X GET "https://api.aspose.cloud/v3.0/pdf/BlankWithSignature.pdf/fields/signature/Signature1" \
-H  "accept: application/json" \
-H  "authorization: Bearer <JWT Token>"

以下に示す詳細と手順では、PHP コードを使用して PDF ドキュメントの特定のページから署名フィールドの詳細を取得する方法について説明します。

protected $pdfApi;
// https://dashboard.aspose.cloud/ からアプリ キーとアプリ SID を取得します。
$appSid = '';
$appKey = '';
$host = 'https://api.aspose.cloud/v3.0';

// 構成オブジェクト
$this->config = new Configuration();
$this->config->setAppKey($appKey);
$this->config->setAppSid($appSid);
$this->config->setHost($host);

// PdfApiインスタンスを作成する
$this->pdfApi = new PdfApi(null, $this->config);

// 入力PDF文書の名前
$name = 'BlankWithSignature.pdf';
// ファイルをクラウドストレージにアップロードする 
$this->uploadFile($name);

// 文書内のページ番号
$pageNumber = 1;

// ドキュメントから署名フィールドを取得するためにAPIメソッドを呼び出す
$response = $this->pdfApi->getPageSignatureFields($name, $pageNumber, null, $this->tempFolder);
$this->assertEquals(200, $response->getCode());

指定されたコードは、PDF ファイル内の特定の署名フィールドの情報を取得する方法を示しています。

protected $pdfApi;
// https://dashboard.aspose.cloud/ からアプリ キーとアプリ SID を取得します。
$appSid = '';
$appKey = '';
$host = 'https://api.aspose.cloud/v3.0';

// 構成オブジェクト
$this->config = new Configuration();
$this->config->setAppKey($appKey);
$this->config->setAppSid($appSid);
$this->config->setHost($host);

// PdfApiインスタンスを作成する
$this->pdfApi = new PdfApi(null, $this->config);

// 入力PDF文書の名前
$name = 'BlankWithSignature.pdf';
// PDFをクラウドストレージにアップロードする
$this->uploadFile($name);

// 情報を取得するための署名フィールド
$fieldName = 'Signature1';

// 署名フィールドの詳細を取得するためにAPIを呼び出す
$response = $this->pdfApi->getSignatureField($name, $fieldName, null, $this->tempFolder);
$this->assertEquals(200, $response->getCode());

PHP を使用して署名フィールドを追加する

Aspose.PDF Cloud SDK for PHP には、PDF ドキュメントに署名フィールドを追加する機能も用意されています。以下のコード スニペットを使用すると、PDF ファイルに署名フィールドを追加できます。

PDFファイルに署名する
 protected $pdfApi;
// https://dashboard.aspose.cloud/ からアプリ キーとアプリ SID を取得します。
$appSid = '';
$appKey = '';
$host = 'https://api.aspose.cloud/v3.0';

// 構成オブジェクト
$this->config = new Configuration();
$this->config->setAppKey($appKey);
$this->config->setAppSid($appSid);
$this->config->setHost($host);

// PdfApiインスタンスを作成する
$this->pdfApi = new PdfApi(null, $this->config);

// 入力PDF文書の名前
$name = 'BlankWithSignature.pdf';

// クラウドストレージにファイルをアップロードする
$this->uploadFile($name);

$signatureFileName = '33226.p12';
$this->uploadFile($signatureFileName);

$folder = $this->tempFolder;

$signature = new Aspose\PDF\Model\Signature();
$signature->setAuthority('Nayyer Shahbaz');
$signature->setContact('nayyer.shahbaz@aspose.com');
$signature->setDate('08/01/2012 12:15:00.000 PM');
$signature->setFormFieldName('Signature1');
$signature->setLocation('Australia');
$signature->setPassword('sIikZSmz');
$signature->setRectangle(new Aspose\PDF\Model\Rectangle(['llx' => 100, 'lly' => 100, 'urx' => 0, 'ury' => 0]));
$signature->setSignaturePath($folder . '/' . $signatureFileName);
$signature->setSignatureType(Aspose\PDF\Model\SignatureType::PKCS7);
$signature->setVisible(true);
$signature->setShowProperties(false);

$field = new Aspose\PDF\Model\SignatureField();
$field->setPartialName('sign1');
// 署名フィールドを追加する必要があるページインデックス
$field->setPageIndex(1);
$field->setSignature($signature);
// 署名フィールドの長方形領域を指定する
$field->setRect(new Aspose\PDF\Model\Rectangle(['llx' => 100, 'lly' => 100, 'urx' => 160, 'ury' => 140]));

// 署名フィールドを追加するにはAPIを呼び出します
$response = $this->pdfApi->postSignatureField($name, $field, null, $this->tempFolder);
$this->assertEquals(200, $response->getCode());

結論

このブログでは、PDF ドキュメント内でデジタル署名を操作する概念について説明しました。既存の署名フィールドに関連する情報を取得する方法と、ドキュメントに新しい署名フィールドを追加する方法について学びました。Aspose.PDF Cloud SDK for PHP はオープンソースであり、完全なソース コードは GitHub リポジトリからダウンロードできます。

ぜひ弊社の API をご利用ください。問題が発生した場合は、お気軽に無料の カスタマー サポート フォーラム からお問い合わせください。