値別に 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 のレンダリングについて説明します。

メモ

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

手順の概要

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

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

プロジェクトファイルの組み込み

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

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

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

フォームデザインの参照

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

メモ

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

値でフォームをレンダリング

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

メモ

フォーム内にデータを表示する場合は、データは xfa:datasets 要素内で指定する必要があります。XFA アーキテクチャについて詳しくは、https://www.pdfa.org/norm-refs/XFA-3_3.pdfを参照してください。

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

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

関連トピック

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

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

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

接続プロパティの設定

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

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

Forms をレンダリングする web アプリケーションの作成

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

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

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

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

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

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

    • コンストラクターを使用して、XDP ファイルの場所を指定する文字列の値を渡すことにより、レンダリングするフォームデザインを表す java.io.FileInputStream オブジェクトを作成します。
    • コンストラクターを使用して java.io.FileInputStream オブジェクトを渡すことにり、com.adobe.idp.Document オブジェクトを作成します。
  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 オブジェクトのコンテンツタイプを取得します。
    • 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 を使用して値でフォームをレンダリング

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

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

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

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

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

    • コンストラクターを使用して java.io.FileInputStream オブジェクトを作成します。XDP ファイルの場所を指定する文字列の値を渡します。
    • コンストラクターを使用して 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 オブジェクトのコンテンツタイプを取得します。
    • 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 の呼び出し

このページ