値でFormsをレンダリング

このドキュメントのサンプルと例は、JEE環境上のAEM Formsに対してのみ提供されています。

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

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

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

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

値によるフォームの渡しの制限

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

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

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

メモ

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

手順の概要

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

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

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

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

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

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

フォームデザインの参照

値を指定してフォームをレンダリングする場合は、レンダリングするフォームデザインを含む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をレンダリングするWeb アプリケーションの作成

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

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

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

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

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

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

    • コンストラクターを使用し、XDPファイルの場所を指定する文字列値を渡して、レンダリングするフォームデザインを表すjava.io.FileInputStreamオブジェクトを作成します。
    • コンストラクタを使用して 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オブジェクト'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オブジェクトのサイズを割り当てます。 InputStreamオブジェクトのavailableメソッドを呼び出して、InputStreamオブジェクトのサイズを取得します。
    • InputStreamオブジェクトのreadメソッドを呼び出し、バイト配列を引数として渡すことで、フォームデータストリームをバイト配列に入力します。
    • javax.servlet.ServletOutputStreamオブジェクトのwriteメソッドを呼び出して、フォームデータストリームをクライアントのWebブラウザーに送信します。 バイト配列をwriteメソッドに渡します。

関連トピック

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

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

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

接続プロパティの設定

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

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

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

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

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

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

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

関連トピック

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

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

このページ