値によるFormsのレンダリング

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

通常、Designerで作成されたフォームデザインは、Formsサービスへの参照によって渡されます。 フォームデザインは大きくなる可能性があり、その結果、フォームデザインのバイトを値でマーシャリングする必要がなく、参照で渡す方が効率的になります。 また、Formsサービスは、フォームデザインをキャッシュして、キャッシュ時にフォームデザインを継続的に読み取る必要がないようにすることもできます。

フォームデザインにUUID属性が含まれている場合は、その属性がキャッシュされます。 UUID値は、すべてのフォームデザインで一意で、フォームを一意に識別するために使用されます。 値でフォームをレンダリングする場合は、繰り返し使用する場合にのみフォームをキャッシュする必要があります。 ただし、フォームを繰り返し使用せずに一意にする必要がある場合は、AEM Forms APIを使用して設定されたキャッシュオプションを使用して、フォームをキャッシュするのを避けることができます。

Formsサービスは、フォームデザイン内のリンクされたコンテンツの場所を解決することもできます。 例えば、フォームデザイン内から参照されるリンク画像は、相対URLです。 リンクされたコンテンツは、常にフォームデザインの場所に対する相対コンテンツと見なされます。 したがって、リンクされたコンテンツを解決するには、フォームデザインの絶対位置に相対パスを適用して、場所を決定する必要があります。

参照によってフォームデザインを渡す代わりに、値でフォームデザインを渡すことができます。 フォームデザインを動的に作成する場合は、フォームデザインを値で渡すと効率的です。つまり、クライアントアプリケーションが実行時にフォームデザインを作成するXMLを生成する場合です。 この場合、フォームデザインはメモリに保存されるので、物理リポジトリに保存されません。 実行時に動的にフォームデザインを作成し、値を渡す場合は、フォームをキャッシュして、Formsサービスのパフォーマンスを向上させることができます。

フォームを値で渡す際の制限

フォームデザインが値で渡される場合は、次の制限が適用されます。

  • フォームデザイン内には、相対的にリンクされたコンテンツを含めることはできません。 すべての画像とフラグメントは、フォームデザイン内に埋め込むか、絶対に参照する必要があります。
  • フォームのレンダリング後にサーバー側の計算を実行することはできません。 フォームがFormsサービスに送り返されると、データが抽出され、サーバー側の計算なしで返されます。
  • HTMLでは、実行時にのみリンクされた画像を使用できるので、埋め込まれた画像を含むHTMLを生成することはできません。 これは、Formsサービスが参照先のフォームデザインから画像を取得することで、HTMLを含んだ埋め込み画像をサポートするためです。 値で渡されるフォームデザインには参照先の場所がないので、HTMLページを表示する際に埋め込み画像を抽出することはできません。 したがって、画像参照は、HTMLでレンダリングされる絶対パスにする必要があります。
メモ

値ごとに異なる種類のフォームをレンダリングできますが(例えば、HTMLフォームや使用権限を含むフォームなど)、この節ではインタラクティブPDF formsのレンダリングについて説明します。

メモ

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

手順の概要

値でフォームをレンダリングするには、次の手順を実行します。

  1. プロジェクトファイルを含めます。
  2. Forms Client APIオブジェクトを作成します。
  3. フォームデザインを参照します。
  4. 値でフォームをレンダリングします。
  5. フォームデータストリームをクライアントWebブラウザーに書き込みます。

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

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

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

プログラムによってデータをPDFフォームのクライアントAPIに読み込む前に、データ統合サービスクライアントを作成する必要があります。 サービスクライアントを作成する場合、サービスを呼び出すために必要な接続設定を定義します。

フォームデザインの参照

値でフォームをレンダリングする場合は、レンダリングするフォームデザインを格納するcom.adobe.idp.Documentオブジェクトを作成する必要があります。 既存のXDPファイルを参照することも、実行時に動的にフォームデザインを作成して、com.adobe.idp.Documentにそのデータを入力することもできます。

メモ

このセクションと対応するクイックスタートは、既存のXDPファイルを参照します。

値によるフォームのレンダリング

フォームを値でレンダリングするには、フォームデザインを含むcom.adobe.idp.DocumentインスタンスをレンダリングメソッドのinDataDocパラメーターに渡します(renderPDFForm(Deprecated) renderHTMLFormなど、FormsServiceClientオブジェクトのレンダリングメソッドのいずれかを指定できます)。 このパラメーター値は、通常、フォームとマージされるデータ用に予約されます。 同様に、空の文字列値をformQueryパラメーターに渡します。 通常、このパラメーターにはフォームデザインの名前を指定する文字列値が必要です。

メモ

フォーム内にデータを表示する場合は、xfa:datasets要素内でデータを指定する必要があります。 XFAアーキテクチャについて詳しくは、https://partners.adobe.com/public/developer/xml/index_arch.htmlを参照してください。

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

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

関連トピック

Java APIを使用した値によるフォームのレンダリング

WebサービスAPIを使用して値でフォームをレンダリングする

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

接続プロパティの設定

FormsサービスAPIのクイックスタート

Formsサービスにドキュメントを渡す

Forms

Java APIを使用して値でフォームをレンダリングする

Forms API(Java)を使用して値でフォームをレンダリングする:

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

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

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

    • 接続プロパティを含む ServiceClientFactory オブジェクトを作成します。
    • コンストラクターを使用してFormsServiceClientオブジェクトを渡し、ServiceClientFactoryオブジェクトを作成します。
  3. フォームデザインの参照

    • レンダリングするフォームデザインを表すjava.io.FileInputStreamオブジェクトを作成します。そのためには、コンストラクターを使用し、XDPファイルの場所を指定する文字列値を渡します。
    • コンストラクタを使用して com.adobe.idp.Document オブジェクトを渡すことによって、java.io.FileInputStream オブジェクトを作成します。
  4. 値によるフォームのレンダリング

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

    • 空の文字列値。 (通常、このパラメーターにはフォームデザインの名前を指定する文字列値が必要です)。
    • フォームデザインを含むcom.adobe.idp.Documentオブジェクト。 通常、このパラメーター値はフォームとマージされるデータ用に予約されます。
    • 実行時オプションを格納するPDFFormRenderSpecオブジェクト。 これはオプションのパラメーターで、実行時オプションを指定しない場合はnullを指定できます。
    • Formsサービスに必要なURI値を含むURLSpecオブジェクト。
    • 添付ファイルを格納するjava.util.HashMapオブジェクト。 これはオプションのパラメーターで、フォームにファイルを添付しない場合はnullを指定できます。

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

  5. フォームデータストリームをクライアント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オブジェクトのサイズを割り当てます。 InputStreamオブジェクトのavailableメソッドを呼び出して、InputStreamオブジェクトのサイズを取得します。
    • InputStreamオブジェクトのreadメソッドを呼び出し、バイト配列を引数として渡すことで、フォームデータストリームをバイト配列に入力します。
    • javax.servlet.ServletOutputStreamオブジェクトのwriteメソッドを呼び出して、フォームデータストリームをクライアントWebブラウザーに送信します。 writeメソッドにバイト配列を渡します。

関連トピック

値によるFormsのレンダリング

クイックスタート(SOAPモード):Java APIを使用した値によるレンダリング

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

接続プロパティの設定

WebサービスAPIを使用して値でフォームをレンダリングする

Forms API(Webサービス)を使用して値でフォームをレンダリングする:

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

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

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

  3. フォームデザインの参照

    • コンストラクタを使用して java.io.FileInputStream オブジェクトを作成します。XDPファイルの場所を指定するstring値を渡します。
    • コンストラクタを使用して BLOB オブジェクトを作成します。BLOBオブジェクトは、パスワードで暗号化されたPDFドキュメントを保存するために使用します。
    • java.io.FileInputStreamオブジェクトの内容を格納するバイト配列を作成します。 availableメソッドを使用してjava.io.FileInputStreamオブジェクトのサイズを取得することで、バイト配列のサイズを決定できます。
    • java.io.FileInputStreamオブジェクトのreadメソッドを呼び出し、バイト配列を渡すことにより、ストリームデータをバイト配列に入力します。
    • setBinaryDataメソッドを呼び出し、バイト配列を渡すことで、BLOBオブジェクトを設定します。
  4. 値によるフォームのレンダリング

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

    • 空の文字列値。 (通常、このパラメーターにはフォームデザインの名前を指定する文字列値が必要です)。
    • フォームデザインを含むBLOBオブジェクト。 通常、このパラメーター値はフォームとマージされるデータ用に予約されます。
    • 実行時オプションを格納する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ブラウザーに書き込む必要のあるフォームデータストリームを設定します。

  5. フォームデータストリームをクライアント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メソッドにバイト配列を渡します。

関連トピック

値によるFormsのレンダリング

Base64エンコーディングを使用したAEM Formsの呼び出し

このページ