インタラクティブ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ブラウザーに書き込まれると、フォームはユーザーに表示されます。

このページ

Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now