インタラクティブPDF formsのレンダリング

このドキュメントのサンプルと例は、JEE上のAEM Forms環境に限られています。

Formsサービスは、ユーザーから情報を収集するために、インタラクティブPDF formsをクライアントデバイス(通常はWebブラウザー)にレンダリングします。 インタラクティブフォームがレンダリングされたら、ユーザーはフォームフィールドにデータを入力し、フォーム上の送信ボタンをクリックして、情報をFormsサービスに送り返すことができます。 インタラクティブPDFフォームを表示するには、クライアントWebブラウザーをホストしているコンピューターにAdobe ReaderまたはAcrobatをインストールする必要があります。

メモ

Formsサービスを使用してフォームをレンダリングする前に、フォームデザインを作成します。 通常、フォームデザインはDesignerで作成され、XDPファイルとして保存されます。 フォームデザインの作成について詳しくは、Forms Designerを参照してください。

サンプルのローン申し込み

Formsサービスがインタラクティブフォームを使用してユーザーから情報を収集する方法を示す、サンプルのローン申し込みフォームが導入されています。 このアプリケーションを使用すると、ユーザーは、ローンの保護に必要なデータをフォームに入力し、データをFormsサービスに送信できます。 次の図に、ローン申し込みのロジックフローを示します。

ri_ri_finsrv_loanapp_v1

次の表に、この図の手順を示します。

ステップ

説明

1

GetLoanForm JavaサーブレットがHTMLページから呼び出されます。

2

GetLoanForm Javaサーブレットは、FormsサービスクライアントAPIを使用して、ローンフォームをクライアントWebブラウザーにレンダリングします。 (Java APIを使用してインタラクティブPDFフォームをレンダリングするを参照)。

3

ユーザーがローンフォームに入力して「送信」ボタンをクリックすると、データがHandleData Javaサーブレットに送信されます。 ("Loan form"を参照)。

4

HandleData Javaサーブレットは、FormsサービスクライアントAPIを使用してフォーム送信を処理し、フォームデータを取得します。 その後、データはエンタープライズデータベースに保存されます。 (送信されたFormsの処理を参照)。

5

確認フォームがWebブラウザーにレンダリングされます。 ユーザーの姓と名などのデータは、レンダリング前にフォームにマージされます。 (編集可能なレイアウトを使用したFormsの事前入力を参照)。

ローンフォーム

このインタラクティブなローンフォームは、サンプルのローンアプリケーションのGetLoanForm Java Servletによってレンダリングされます。

ri_ri_loanform

確認フォーム

このフォームは、サンプルのローンアプリケーションのHandleData Java Servletによってレンダリングされます。

ri_ri_confirm

HandleData Javaサーブレットは、このフォームにユーザーの姓名と金額を事前入力します。 フォームが事前入力された後、クライアントのWebブラウザーに送信されます。 (編集可能なレイアウトを使用したFormsの事前入力を参照)。

Javaサーブレット

サンプルのローン申し込みは、Javaサーブレットとして存在するFormsサービスアプリケーションの例です。 Javaサーブレットは、WebSphereなどのJ2EEアプリケーションサーバー上で実行されるJavaプログラムで、FormsサービスのクライアントAPIコードを含みます。

次のコードは、GetLoanFormという名前のJavaサーブレットの構文を示しています。

     public class GetLoanForm extends HttpServlet implements Servlet {
         public void doGet(HttpServletRequest req, HttpServletResponse resp
         throws ServletException, IOException {

         }
         public void doPost(HttpServletRequest req, HttpServletResponse resp
         throws ServletException, IOException {

             }

通常、FormsサービスのクライアントAPIコードは、JavaサーブレットのdoGetまたはdoPostメソッド内に配置しません。 このコードを別のクラスに配置し、doPostメソッド(またはdoGetメソッド)内からクラスをインスタンス化して、適切なメソッドを呼び出す方が、プログラミングのベストプラクティスです。 ただし、コードを簡潔にするために、この節のコード例は最小限に抑え、コード例はdoPostメソッドに配置します。

メモ

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

手順の概要

インタラクティブPDFフォームをレンダリングするには、次のタスクを実行します。

  1. プロジェクトファイルを含めます。
  2. Forms Client APIオブジェクトを作成します。
  3. URI値を指定します。
  4. フォームにファイルを添付します(オプション)。
  5. インタラクティブPDFフォームをレンダリングします。
  6. フォームデータストリームをクライアントWebブラウザーに書き込みます。

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

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

Forms Client APIオブジェクトの作成

プログラムでForms Service Client API操作を実行する前に、Forms Client APIオブジェクトを作成する必要があります。 Java APIを使用している場合は、FormsServiceClientオブジェクトを作成します。 Forms WebサービスAPIを使用している場合は、FormsServiceオブジェクトを作成します。

URI値の指定

Formsサービスでフォームをレンダリングするために必要なURI値を指定できます。 Formsアプリケーションの一部として保存されたフォームデザインは、コンテンツルートURI値repository:///を使用して参照できます。 例えば、FormsApplication​という名前のFormsアプリケーション内にある​Loan.xdp​という名前のフォームデザインを考えてみましょう。

ri_ri_formrepository

このフォームデザインにアクセスするには、フォーム名(renderPDFFormメソッドに渡される最初のパラメーター)としてApplications/FormsApplication/1.0/FormsFolder/Loan.xdpを指定し、コンテンツルートURI値としてrepository:///を指定します。

メモ

Workbenchを使用したFormsアプリケーションの作成について詳しくは、Workbenchヘルプを参照してください。

Formsアプリケーション内のリソースへのパスは次のとおりです。

Applications/Application-name/Application-version/Folder.../Filename

次に、URI値の例を示します。

  • Applications/AppraisalReport/1.0/Forms/FullForm.xdp
  • Applications/AnotherApp/1.1/Assets/picture.jpg
  • Applications/SomeApp/2.0/Resources/Data/XSDs/MyData.xsd

インタラクティブフォームをレンダリングする際に、フォームデータの投稿先となるターゲットURLなどのURI値を定義できます。 ターゲットURLは、次のいずれかの方法で定義できます。

  • Designerでフォームデザインをデザインする際の「送信」ボタン
  • FormsサービスクライアントAPIを使用する

ターゲットURLがフォームデザイン内で定義されている場合は、FormsサービスクライアントAPIを使用して上書きしないでください。 つまり、Forms APIを使用してターゲットURLを設定すると、フォームデザインで指定されたURLが、APIを使用して指定されたURLにリセットされます。 フォームデザインで指定されたターゲットURLにPDFフォームを送信する場合、プログラムによってターゲットURLを空の文字列に設定します。

送信ボタンと計算ボタン(サーバーで実行される対応するスクリプトを含む)を含むフォームがある場合、スクリプトを実行するためにフォームが送信されるURLをプログラムで定義できます。 フォームデザインの送信ボタンを使用して、フォームデータが投稿されるURLを指定します。 (フォームデータの計算を参照)。

メモ

XDPファイルを参照するURL値を指定する代わりに、com.adobe.idp.DocumentインスタンスをFormsサービスに渡すこともできます。 com.adobe.idp.Documentインスタンスにはフォームデザインが含まれています。 (Formsサービスにドキュメントを渡すを参照)。

フォームにファイルを添付する

フォームにファイルを添付できます。 添付ファイルを含むPDFフォームをレンダリングする場合、ユーザーは添付ファイルペインを使用してAcrobatで添付ファイルを取得できます。 フォームには、テキストファイルや、JPGファイルなどのバイナリファイルなど、様々なファイル形式を添付できます。

メモ

添付ファイルのフォームへの添付はオプションです。

インタラクティブPDFフォームのレンダリング

フォームをレンダリングするには、Designerで作成され、XDPまたはPDFファイルとして保存されたフォームデザインを使用します。 また、Acrobatを使用して作成され、PDFファイルとして保存されたフォームをレンダリングすることもできます。 インタラクティブPDFフォームをレンダリングするには、FormsServiceClientオブジェクトのrenderPDFFormメソッドまたはrenderPDFForm2メソッドを呼び出します。

renderPDFFormURLSpecオブジェクトを使用します。 XDPファイルのコンテンツルートは、URLSpecオブジェクトのsetContentRootURIメソッドを使用してFormsサービスに渡されます。 フォームデザイン名(formQuery)は、別のパラメーター値として渡されます。 2つの値が連結され、フォームデザインへの絶対参照が取得されます。

renderPDFForm2メソッドは、レンダリングするXDPまたはPDFドキュメントを含むcom.adobe.idp.Documentインスタンスを受け取ります。

メモ

入力ドキュメントがPDFドキュメントの場合、タグ付きPDFランタイムオプションは設定できません。 入力ファイルがXDPファイルの場合、タグ付きPDFオプションを設定できます。

Java APIを使用したインタラクティブPDFフォームのレンダリング

Forms API(Java)を使用してインタラクティブPDFフォームをレンダリングします。

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

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

  2. Forms Client APIオブジェクトの作成

    • 接続プロパティを含む ServiceClientFactory オブジェクトを作成します。
    • コンストラクターを使用してFormsServiceClientオブジェクトを渡し、ServiceClientFactoryオブジェクトを作成します。
  3. URI値の指定

    • コンストラクターを使用して、URI値を格納するURLSpecオブジェクトを作成します。
    • URLSpecオブジェクトのsetApplicationWebRootメソッドを呼び出して、アプリケーションのWebルートを表す文字列値を渡します。
    • URLSpecオブジェクトのsetContentRootURIメソッドを呼び出し、コンテンツルートURI値を指定する文字列値を渡します。 フォームデザインがコンテンツルートURIに配置されていることを確認します。 そうでない場合、Formsサービスは例外をスローします。 リポジトリを参照するには、repository:///を指定します。
    • URLSpecオブジェクトのsetTargetURLメソッドを呼び出し、フォームデータの投稿先となるターゲットURL値を指定する文字列値を渡します。 フォームデザインでターゲットURLを定義する場合は、空の文字列を渡すことができます。 演算を実行するためのフォームの送信先URLを指定することもできます。
  4. フォームにファイルを添付する

    • コンストラクタを使用して、添付ファイルを格納するjava.util.HashMapオブジェクトを作成します。

    • レンダリングされたフォームに添付する各ファイルに対して、 java.util.HashMapオブジェクトのputメソッドを呼び出します。 このメソッドに次の値を渡します。

      • 添付ファイルの名前(ファイル名拡張子を含む)を指定するstring値。
    • 添付ファイルを含むcom.adobe.idp.Documentオブジェクト。

    メモ

    フォームに添付するファイルごとに、この手順を繰り返します。 この手順はオプションで、添付ファイルを送信しない場合はnullを渡すことができます。

  5. インタラクティブPDFフォームのレンダリング

    FormsServiceClientオブジェクトのrenderPDFFormメソッドを呼び出し、次の値を渡します。

    • ファイル名拡張子を含むフォームデザイン名を指定するstring値。 Formsアプリケーションの一部であるフォームデザインを参照する場合は、必ずApplications/FormsApplication/1.0/FormsFolder/Loan.xdpのように完全なパスを指定してください。
    • フォームとマージするデータを含むcom.adobe.idp.Documentオブジェクト。 データを結合しない場合は、空のcom.adobe.idp.Documentオブジェクトを渡します。
    • 実行時オプションを格納するPDFFormRenderSpecオブジェクト。 これはオプションのパラメーターで、実行時オプションを指定しない場合はnullを指定できます。
    • Formsサービスに必要なURI値を含むURLSpecオブジェクト。
    • 添付ファイルを格納するjava.util.HashMapオブジェクト。 これはオプションのパラメーターで、フォームにファイルを添付しない場合はnullを指定できます。

    renderPDFFormメソッドは、クライアントのWebブラウザーに書き込む必要があるフォームデータストリームを含むFormsResultオブジェクトを返します。

  6. フォームデータストリームをクライアントWebブラウザーに書き込む

    • FormsResultオブジェクトのgetOutputContentメソッドを呼び出して、com.adobe.idp.Documentオブジェクトを作成します。
    • getContentTypeメソッドを呼び出して、com.adobe.idp.Documentオブジェクトのコンテンツタイプを取得します。
    • setContentTypeメソッドを呼び出し、com.adobe.idp.Documentオブジェクトのコンテンツタイプを渡すことで、javax.servlet.http.HttpServletResponseオブジェクトのコンテンツタイプを設定します。
    • javax.servlet.http.HttpServletResponseオブジェクトのgetOutputStreamメソッドを呼び出して、フォームデータストリームをクライアントWebブラウザーに書き込むためのjavax.servlet.ServletOutputStreamオブジェクトを作成します。
    • com.adobe.idp.DocumentオブジェクトのgetInputStreamメソッドを呼び出して、java.io.InputStreamオブジェクトを作成します。
    • InputStreamオブジェクトのreadメソッドを呼び出し、バイト配列を引数として渡すことで、バイト配列を作成し、フォームデータストリームに入力します。
    • javax.servlet.ServletOutputStreamオブジェクトのwriteメソッドを呼び出して、フォームデータストリームをクライアントWebブラウザーに送信します。 writeメソッドにバイト配列を渡します。

WebサービスAPIを使用してインタラクティブPDFフォームをレンダリングする

Forms API(Webサービス)を使用してインタラクティブPDFフォームをレンダリングします。

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

    • FormsサービスのWSDLを使用するJavaプロキシクラスを作成します。
    • Javaプロキシクラスをクラスパスに含めます。
  2. Forms Client APIオブジェクトの作成

    FormsServiceオブジェクトを作成し、認証値を設定します。

  3. URI値の指定

    • コンストラクターを使用して、URI値を格納するURLSpecオブジェクトを作成します。
    • URLSpecオブジェクトのsetApplicationWebRootメソッドを呼び出して、アプリケーションのWebルートを表す文字列値を渡します。
    • URLSpecオブジェクトのsetContentRootURIメソッドを呼び出し、コンテンツルートURI値を指定する文字列値を渡します。 フォームデザインがコンテンツルートURIに配置されていることを確認します。 そうでない場合、Formsサービスは例外をスローします。 リポジトリを参照するには、repository:///を指定します。
    • URLSpecオブジェクトのsetTargetURLメソッドを呼び出し、フォームデータの投稿先となるターゲットURL値を指定する文字列値を渡します。 フォームデザインでターゲットURLを定義する場合は、空の文字列を渡すことができます。 演算を実行するためのフォームの送信先URLを指定することもできます。
  4. フォームにファイルを添付する

    • コンストラクタを使用して、添付ファイルを格納するjava.util.HashMapオブジェクトを作成します。

    • レンダリングされたフォームに添付する各ファイルに対して、 java.util.HashMapオブジェクトのputメソッドを呼び出します。 このメソッドに次の値を渡します。

      • 添付ファイルの名前(ファイル名拡張子を含む)を指定するstring値
    • 添付ファイルを含むBLOBオブジェクト

    メモ

    フォームに添付するファイルごとに、この手順を繰り返します。

  5. インタラクティブPDFフォームのレンダリング

    FormsServiceオブジェクトのrenderPDFFormメソッドを呼び出し、次の値を渡します。

    • ファイル名拡張子を含むフォームデザイン名を指定するstring値。 Formsアプリケーションの一部であるフォームデザインを参照する場合は、必ずApplications/FormsApplication/1.0/FormsFolder/Loan.xdpのように完全なパスを指定してください。
    • フォームとマージするデータを含むBLOBオブジェクト。 データを結合しない場合は、nullを渡します。
    • 実行時オプションを格納するPDFFormRenderSpecオブジェクト。 これはオプションのパラメーターで、実行時オプションを指定しない場合はnullを指定できます。
    • Formsサービスに必要なURI値を含むURLSpecオブジェクト。
    • 添付ファイルを格納するjava.util.HashMapオブジェクト。 これはオプションのパラメーターで、フォームにファイルを添付しない場合はnullを指定できます。
    • メソッドで設定される空のcom.adobe.idp.services.holders.BLOBHolderオブジェクト。 これは、レンダリングされたPDFフォームを保存するために使用されます。
    • メソッドで設定される空のjavax.xml.rpc.holders.LongHolderオブジェクト。 (この引数は、フォームのページ数を保存します。)
    • メソッドで設定される空のjavax.xml.rpc.holders.StringHolderオブジェクト。 (この引数はロケール値を格納します。)
    • この操作の結果を格納する空のcom.adobe.idp.services.holders.FormsResultHolderオブジェクト。

    renderPDFFormメソッドは、最後の引数値として渡されるcom.adobe.idp.services.holders.FormsResultHolderオブジェクトに、クライアントWebブラウザーに書き込む必要のあるフォームデータストリームを設定します。

  6. フォームデータストリームをクライアントWebブラウザーに書き込む

    • com.adobe.idp.services.holders.FormsResultHolderオブジェクトのvalueデータメンバーの値を取得して、FormResultオブジェクトを作成します。
    • FormsResultオブジェクトのgetOutputContentメソッドを呼び出して、フォームデータを含むBLOBオブジェクトを作成します。
    • getContentTypeメソッドを呼び出して、BLOBオブジェクトのコンテンツタイプを取得します。
    • setContentTypeメソッドを呼び出し、BLOBオブジェクトのコンテンツタイプを渡すことで、javax.servlet.http.HttpServletResponseオブジェクトのコンテンツタイプを設定します。
    • javax.servlet.http.HttpServletResponseオブジェクトのgetOutputStreamメソッドを呼び出して、フォームデータストリームをクライアントWebブラウザーに書き込むためのjavax.servlet.ServletOutputStreamオブジェクトを作成します。
    • バイト配列を作成し、BLOBオブジェクトのgetBinaryDataメソッドを呼び出してそれを設定します。 このタスクは、FormsResultオブジェクトの内容をバイト配列に割り当てます。
    • javax.servlet.http.HttpServletResponseオブジェクトのwriteメソッドを呼び出して、フォームデータストリームをクライアントWebブラウザーに送信します。 writeメソッドにバイト配列を渡します。

フォームデータストリームをクライアントWebブラウザーに書き込む

Formsサービスは、フォームをレンダリングする際に、クライアントのWebブラウザーに書き込む必要があるフォームデータストリームを返します。 クライアントのWebブラウザーに書き込まれると、フォームはユーザーに表示されます。

このページ