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

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

メモ

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

ローンの申し込み例

Formsサービスがユーザーから情報を収集する際にインタラクティブフォームを使用する方法を示すローン申し込み例を紹介します。 この申込みにより、ユーザーはローンのセキュリティ保護に必要なデータをフォームに入力し、データをFormsサービスに送信できます。 次の図に、ローン申込のロジックの流れを示します。

ri_ri_finsrv_loanapp_v1

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

ステップ

説明

1

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

2

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

3

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

4

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

5

確認フォームがWebブラウザーにレンダリングされて戻されます。 ユーザーの姓や名などのデータは、レンダリング前にフォームにマージされます。 (「編集可能なレイアウトでFormsを自動埋め込む」を参照)。

ローンフォーム

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

ri_ri_loanform

確認フォーム

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

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クライアントAPIオブジェクトを作成します。
  3. URI値を指定します。
  4. フォームへのファイルの添付(オプション)
  5. インタラクティブPDFフォームをレンダリングします。
  6. フォームデータストリームをクライアントのWebブラウザーに書き込みます。

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

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

FormsクライアントAPIオブジェクトの作成

プログラムでFormsサービスのクライアントAPI操作を実行する前に、Formsクライアント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でフォームデザインをデザインする際の「Submit」ボタン
  • FormsサービスクライアントAPIを使用する

ターゲットURLがフォームデザイン内で定義されている場合は、FormsサービスのクライアントAPIを使用して上書きしないでください。 つまり、FormsAPIを使用してターゲットURLを設定すると、フォームデザインで指定されたURLが、APIを使用して指定されたURLにリセットされます。 PDFフォームをフォームデザインで指定されたターゲットURLに送信する場合は、プログラムでターゲット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フォームをレンダリングする

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

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

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

  2. Formsクライアント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オブジェクト's getOutputContentメソッドを呼び出して、com.adobe.idp.Documentオブジェクトを作成します。
    • getContentTypeメソッドを呼び出して、com.adobe.idp.Documentオブジェクトのコンテンツタイプを取得します。
    • javax.servlet.http.HttpServletResponseオブジェクトのコンテンツタイプを設定するには、setContentTypeメソッドを呼び出し、com.adobe.idp.Documentオブジェクトのコンテンツタイプを渡します。
    • 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フォームをレンダリングする

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

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

    • FormsサービスのWSDLを使用するJavaプロキシクラスを作成します。
    • クラスパスにJavaプロキシクラスを含めます。
  2. Formsクライアント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オブジェクトのコンテンツタイプを取得します。
    • javax.servlet.http.HttpServletResponseオブジェクトのコンテンツタイプを設定するには、setContentTypeメソッドを呼び出し、BLOBオブジェクトのコンテンツタイプを渡します。
    • javax.servlet.http.HttpServletResponseオブジェクトのgetOutputStreamメソッドを呼び出して、フォームデータストリームをクライアントのWebブラウザーに書き込むために使用するjavax.servlet.ServletOutputStreamオブジェクトを作成します。
    • バイト配列を作成し、BLOBオブジェクトのgetBinaryDataメソッドを呼び出して値を設定します。 このタスクは、FormsResultオブジェクトの内容をバイト配列に割り当てます。
    • javax.servlet.http.HttpServletResponseオブジェクトのwriteメソッドを呼び出して、フォームデータストリームをクライアントのWebブラウザーに送信します。 バイト配列をwriteメソッドに渡します。

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

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

このページ