署名フィールドの追加

デジタル署名は、署名の画像表示を含むフォームフィールドである署名フィールドに表示されます。署名フィールドは、表示または非表示に設定することができます。署名者は既存の署名フィールドを使用することができます。また、プログラムによって署名フィールドを追加することもできます。どちらの場合においても、PDF ドキュメントに署名するには、署名フィールドが存在している必要があります。

プログラムによって署名フィールドを追加するには、Signature サービス Java API や 署名 Web サービス API を使用します。PDF ドキュメントに複数の署名フィールドを追加できます。ただし、各署名フィールド名は一意である必要があります。

メモ
一部の PDF ドキュメントタイプでは、プログラムによって署名フィールドを追加することができません。Signature サービスと署名フィールドの追加について詳しくは、AEM Forms サービスリファレンスを参照してください。

手順の概要

PDF ドキュメントに署名フィールドを追加するには、次のタスクを実行します。

  1. プロジェクトファイルを含めます。
  2. Signature クライアントを作成します。
  3. 署名フィールドが追加された PDF ドキュメントを取得します。
  4. 署名フィールドを追加します。
  5. PDF ドキュメントを PDF ファイルとして保存します。

プロジェクトファイルを含める

必要なファイルを開発プロジェクトに含めます。Java を使用してクライアントアプリケーションを作成する場合は、必要な JAR ファイルを含めます。Web サービスを使用している場合は、プロキシファイルを必ず含めてください。

次の JAR ファイルをプロジェクトのクラスパスに追加する必要があります。

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-utilities.jar(AEM Forms が JBoss にデプロイされている場合に必要)
  • jbossall-client.jar(AEM Formsが JBoss にデプロイされている場合に必要)

Signature クライアントの作成

Signature サービスの操作をプログラムで実行する前に、Signature サービスクライアントを作成する必要があります。

署名フィールドが追加された PDF ドキュメントを取得する

署名フィールドが追加された PDF ドキュメントを取得する。

署名フィールドを追加する

PDFドキュメントに正常に署名フィールドを追加するには、署名フィールドの場所を特定する座標値を指定します。(非表示の署名フィールドを追加する場合、これらの値は不要です)。また、署名が署名フィールドに適用された後にロックされる PDF ドキュメント内のフィールドを指定することもできます。

PDF ドキュメントを PDF ファイルとして保存する

Signature サービスが PDF ドキュメントに署名フィールドを追加した後、そのドキュメントを PDF ファイルとして保存すると、ユーザーは、Acrobat または Adobe Reader でそのドキュメントを開くことができます。

関連トピック

AEM Forms Java ライブラリファイルの追加

接続プロパティの設定

PDF ドキュメントの電子署名

Java API を使用した署名フィールドの追加

Signature API (Java) を使用して署名フィールドを追加します。

  1. プロジェクトファイルを含める

    Java プロジェクトのクラスパスに、adobe-signatures-client.jar などのクライアント JAR ファイルを含めます。

  2. Signature クライアントの作成

    • 接続プロパティを含む ServiceClientFactory オブジェクトを作成します。
    • SignatureServiceClient オブジェクトを作成するには、コンストラクタを使用して、ServiceClientFactory オブジェクトを渡します。
  3. 署名フィールドが追加された PDF ドキュメントを取得する

    • 署名フィールドが追加された PDF ドキュメントを表す java.io.FileInputStream オブジェクトを作成するには、コンストラクタを使用して、PDF ドキュメントの場所を指定する文字列値を渡してください。
    • com.adobe.idp.Document オブジェクトを作成するには、コンストラクタを使用して、java.io.FileInputStream オブジェクトを渡します。
  4. 署名フィールドを追加する

    • コンストラクタを使用して、署名フィールドの場所を指定する PositionRectangle オブジェクトを作成します。コンストラクタ内で、座標値を指定します。

    • 必要に応じて、デジタル署名が署名フィールドに適用された際にロックするフィールドを指定する FieldMDPOptions オブジェクトを作成します。

    • PDF ドキュメントに署名フィールドを追加するには、SignatureServiceClient オブジェクトの addSignatureField メソッドを呼び出して、次の値を渡します。

      • com.adobe.idp です。署名フィールドを追加する PDF ドキュメントを表す Document オブジェクトです。
      • 署名フィールドの名前を指定する文字列値です。
      • 署名フィールドを追加するページ番号を表す java.lang.Integer 値です。
      • 署名フィールドの場所を指定する PositionRectangle オブジェクトです。
      • デジタル署名が署名フィールドに適用された後にロックされる PDF ドキュメント内のフィールドを指定する FieldMDPOptions オブジェクトです。このパラメータ値はオプションで、 null を渡すことができます。
    • 様々な実行時の値を指定する PDFSeedValueOptions オブジェクトです。このパラメータ値はオプションで、 null を渡すことができます。

      addSignatureField メソッドは com.adobe.idp を返します。署名フィールドを含む PDF ドキュメントを表すDocumentオブジェクトです。

    メモ
    SignatureServiceClient オブジェクトの addInvisibleSignatureField メソッドを呼び出して、非表示の署名フィールドを追加します。
  5. PDFドキュメントを PDF ファイルとして保存する

    • java.io.File オブジェクトを作成し、ファイル拡張子が .pdf であることを確認します。
    • com.adobe.idp を呼び出します。Document オブジェクトの copyToFile メソッドで、Document オブジェクトの内容をファイルにコピーします。必ず com.adobe.idp を使用してください。addSignatureField メソッドによって返された Documentオブジェクトです。

Web サービス API を使用して署名フィールドを追加する

Signature API(Web サービス)を使用して署名フィールドを追加するには:

  1. プロジェクトファイルを含める

    MTOM を使用する Microsoft .NET プロジェクトを作成します。WSDL 定義 http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1 を使用するようにします。

    メモ
    localhost を AEM Forms をホストするサーバーの IP アドレスに置き換えます。
  2. Signature クライアントの作成

    • デフォルトのコンストラクタを使用して SignatureServiceClient オブジェクトを作成します。

    • System.ServiceModel.EndpointAddress コンストラクタを使用して SignatureServiceClient.Endpoint.Address オブジェクトを作成します。WSDL を 指定する文字列値を AEM Forms サービスに渡します(例:http://localhost:8080/soap/services/SignatureService?WSDL)。lc_version 属性を使用する必要はありません。この属性は、サービス参照を作成する際に使用されます。

    • SignatureServiceClient.Endpoint.Binding フィールドの値を取得して、System.ServiceModel.BasicHttpBinding オブジェクトを作成します。戻り値を BasicHttpBinding にキャストします。

    • System.ServiceModel.BasicHttpBinding オブジェクトの MessageEncoding フィールドを WSMessageEncoding.Mtom に設定します。この値により、MTOM が確実に使用されます。

    • 次のタスクを実行して、HTTP 基本認証を有効にします。

      • SignatureServiceClient.ClientCredentials.UserName.UserName フィールドに AEM Forms ユーザー名を割り当てます。
      • 対応するパスワード値を SignatureServiceClient.ClientCredentials.UserName.Password フィールドに割り当てます。
      • 定数値 HttpClientCredentialType.BasicBasicHttpBindingSecurity.Transport.ClientCredentialType フィールドに割り当てます。
      • フィールド BasicHttpBindingSecurity.Security.Mode に定数値 BasicHttpSecurityMode.TransportCredentialOnly を割り当てます。
  3. 署名フィールドが追加された PDF ドキュメントを取得する

    • コンストラクタを使用して BLOB オブジェクトを作成します。BLOB オブジェクトは、署名フィールドを含む PDF ドキュメントを保存するために使用されます。
    • System.IO.FileStream オブジェクトを作成するには、コンストラクターを呼び出して、PDF ドキュメントのファイルの場所を表す文字列値とファイルを開くモードを渡します。
    • System.IO.FileStream オブジェクトのコンテンツを保存するバイト配列を作成します。 バイト配列のサイズは、System.IO.FileStream オブジェクトの Length プロパティを取得することで決定できます。
    • バイト配列にストリームデータを入力するには、System.IO.FileStream オブジェクトの Read メソッドを呼び出し、バイト配列、開始位置、読み取るストリーム長を渡します。
    • BLOB オブジェクトを入力するには、MTOM プロパティにバイト配列のコンテンツを割り当てます。
  4. 署名フィールドを追加する

    PDF ドキュメントに署名フィールドを追加するには、SignatureServiceClient オブジェクトの addSignatureField メソッドを呼び出して、次の値を渡します。

    • 署名フィールドが追加された PDF ドキュメントを表す BLOB オブジェクトです。
    • 署名フィールド名を指定する文字列値です。
    • 署名フィールドを追加するページ番号を表す整数値です。
    • 署名フィールドの場所を指定する PositionRect オブジェクトです。
    • デジタル署名が署名フィールドに適用された後にロックされる PDF ドキュメント内のフィールドを指定する FieldMDPOptions オブジェクトです。このパラメータ値はオプションで、 null を渡すことができます。
    • 様々な実行時の値を指定する PDFSeedValueOptions オブジェクトです。このパラメータ値はオプションで、nullを渡すことができます。

    addSignatureField メソッドは、署名フィールドを含む PDF ドキュメントを表す BLOB オブジェクトを返します。

  5. PDFドキュメントを PDF ファイルとして保存する

    • System.IO.FileStream オブジェクトを作成するには、コンストラクターを呼び出して、署名フィールドを含む PDF ドキュメントのファイルの場所を表す文字列値およびファイルを開くモードを渡します。
    • addSignatureField メソッドによって返された BLOB オブジェクトのコンテンツを格納するバイト配列を作成します。BLOB オブジェクトの binaryData データメンバーの値を取得して、バイト配列にデータを入力します。
    • コンストラクターを呼び出して System.IO.FileStream オブジェクトを渡すことによって、System.IO.BinaryWriter オブジェクトを作成します。
    • System.IO.BinaryWriter オブジェクトの Write メソッドを呼び出してバイト配列を渡すことにより、バイト配列の内容を PDF ファイルに書き込みます。

署名フィールド名の取得

署名または認証する PDF ドキュメント内のすべての署名フィールドの名前を取得できます。PDF ドキュメント内の署名フィールド名が分からない場合や、名前を検証したい場合に、プログラムによって名前を取得することができます。Signature サービスは、form1[0].grantApplication[0].page1[0].SignatureField1[0] のような署名フィールドの完全修飾名を返します。

メモ
Signature サービスについて詳しくは、AEM Forms サービスリファレンスを参照してください。

手順の概要

署名フィールド名を取得するには、次のタスクを実行します。

  1. プロジェクトファイルを含めます。
  2. Signature クライアントを作成します。
  3. 署名フィールドを含む PDF ドキュメントを取得します。
  4. 署名フィールド名を取得します。

プロジェクトファイルを含める

必要なファイルを開発プロジェクトに含めます。Java を使用してクライアントアプリケーションを作成する場合は、必要な JAR ファイルを含めます。Web サービスを使用している場合は、プロキシファイルを必ず含めてください。

次の JAR ファイルをプロジェクトのクラスパスに追加する必要があります。

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-utilities.jar(AEM Forms が JBoss にデプロイされている場合に必要)
  • jbossall-client.jar(AEM Formsが JBoss にデプロイされている場合に必要)

これらの JAR ファイルの場所については、AEM Forms Java ライブラリファイルを含めるを参照してください。

署名クライアントの作成

Signature サービスの操作をプログラムで実行する前に、Signature サービスクライアントを作成する必要があります。

署名フィールドを含む PDF ドキュメントを取得する

署名フィールドを含む PDF ドキュメントを取得します。

署名フィールド名の取得

1 つ以上の署名フィールドを含む PDF ドキュメントを取得した後に、署名フィールド名を取得できます。

関連トピック

Java API を使用した署名フィールド名の取得

Web サービス API を使用した署名フィールドの取得

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

署名フィールドの追加

Java API を使用した署名フィールド名の取得

Signature API (Java) を使用して署名フィールド名を取得します。

  1. プロジェクトファイルを含める

    adobe-signatures-client.jar などのクライアント JAR ファイルを Java プロジェクトのクラスパスに含めます。

  2. Signature クライアントの作成

    • 接続プロパティを含む ServiceClientFactory オブジェクトを作成します。
    • コンストラクタを使用して ServiceClientFactory オブジェクトを渡すことによって、SignatureServiceClient オブジェクトを作成します。
  3. 署名フィールドを含む PDF ドキュメントを取得する

    • 署名フィールドを含む PDF ドキュメントを表す java.io.FileInputStream オブジェクトを作成するには、コンストラクターを使用し、PDF ドキュメントの場所を指定する文字列値を渡します。
    • コンストラクタを使用してjava.io.FileInputStream オブジェクトを渡すことによって、com.adobe.idp.Document オブジェクトを作成します。
  4. 署名フィールド名の取得

    • 署名フィールド名を取得するには、SignatureServiceClient オブジェクトの getSignatureFieldList メソッドを呼び出して、署名フィールドを含む PDF ドキュメントを含む com.adobe.idp.Document オブジェクトを渡します。このメソッドは、各要素に PDFSignatureField オブジェクトをが含まれる java.util.List オブジェクトを返します。このオブジェクトを使用すると、署名フィールドが表示されているかどうかなど、署名フィールドに関する追加情報を取得できます。
    • java.util.List オブジェクトを繰り返して、署名フィールド名があるかどうかを確認します。PDF ドキュメントの各署名フィールドに対して、個別の PDFSignatureField オブジェクトを取得できます。署名フィールドの名前を取得するには、PDFSignatureField オブジェクトの getName メソッドを呼び出します。このメソッドは、署名フィールド名を指定する文字列値を返します。

Web サービス API を使用した署名フィールドの取得

Signature API(Web サービス)を使用して署名フィールド名を取得します。

  1. プロジェクトファイルを含める

    MTOM を使用する Microsoft .NET プロジェクトを作成します。WSDL 定義 http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1 を使用するようにします。

    メモ
    localhost を AEM Forms をホストするサーバーの IP アドレスに置き換えます。
  2. Signature クライアントの作成

    • デフォルトのコンストラクタを使用して SignatureServiceClient オブジェクトを作成します。

    • System.ServiceModel.EndpointAddress コンストラクタを使用して SignatureServiceClient.Endpoint.Address オブジェクトを作成します。WSDL を 指定する文字列値を AEM Forms サービスに渡します(例:http://localhost:8080/soap/services/SignatureService?WSDL)。lc_version 属性を使用する必要はありません。この属性は、サービス参照を作成する際に使用されます。

    • SignatureServiceClient.Endpoint.Binding フィールドの値を取得して、System.ServiceModel.BasicHttpBinding オブジェクトを作成します。戻り値を BasicHttpBinding にキャストします。

    • System.ServiceModel.BasicHttpBinding オブジェクトの MessageEncoding フィールドを WSMessageEncoding.Mtom に設定します。この値により、MTOM が確実に使用されます。

    • 次のタスクを実行して、HTTP 基本認証を有効にします。

      • SignatureServiceClient.ClientCredentials.UserName.UserName フィールドに AEM Forms ユーザー名を割り当てます。
      • 対応するパスワード値を SignatureServiceClient.ClientCredentials.UserName.Password フィールドに割り当てます。
      • 定数値 HttpClientCredentialType.BasicBasicHttpBindingSecurity.Transport.ClientCredentialType フィールドに割り当てます。
      • 定数値 BasicHttpSecurityMode.TransportCredentialOnly をフィールド BasicHttpBindingSecurity.Security.Mode に割り当てます。
  3. 署名フィールドを含む PDF ドキュメントを取得する

    • コンストラクタを使用して BLOB オブジェクトを作成します。BLOB オブジェクトは、署名フィールドを含む PDF ドキュメントを保存するために使用されます。
    • System.IO.FileStream オブジェクトを作成するには、コンストラクタを呼び出して、PDF ドキュメントのファイルの場所を表す文字列値およびファイルを開くモードを渡します。
    • System.IO.FileStream オブジェクトのコンテンツを保存するバイト配列を作成します。 バイト配列のサイズは、System.IO.FileStream オブジェクトの Length プロパティを取得することで決定できます。
    • バイト配列にストリームデータを入力するには、System.IO.FileStream オブジェクトの Read メソッドを呼び出し、バイト配列、開始位置、読み取るストリーム長を渡します。
    • BLOB オブジェクトを入力するには、MTOM フィールドにバイト配列のコンテンツを割り当てます。
  4. 署名フィールド名の取得

    • 署名フィールド名を取得するには、SignatureServiceClient オブジェクトの getSignatureFieldList メソッドを呼び出して、署名フィールドを含む PDF ドキュメントを含む BLOB オブジェクトを渡します。このメソッドは、各要素に PDFSignatureField オブジェクトを含む MyArrayOfPDFSignatureField コレクションオブジェクトを返します。
    • MyArrayOfPDFSignatureField オブジェクトを繰り返して、署名フィールド名があるかどうかを確認します。PDF ドキュメントの各署名フィールドに対して、PDFSignatureField オブジェクトを取得できます。署名フィールドの名前を取得するには、PDFSignatureField オブジェクトの getName メソッドを呼び出します。このメソッドは、署名フィールド名を指定する文字列値を返します。