値別に Forms をレンダリング rendering-forms-by-value
このドキュメントのサンプルと例は、JEE 環境の AEM Forms のみを対象としています。
通常、Designer で作成されたフォームデザインは、参照によって Forms サービスに渡されます。フォームデザインは大きくなる可能性があり、その結果、フォームデザインのバイトを値でマーシャリングする必要がなくなるよう、参照で渡す方がより効率的です。また、Forms サービスは、キャッシュ時にフォームデザインを継続的に読み取る必要がないように、フォームデザインをキャッシュすることもできます。
フォームデザインに UUID 属性が含まれている場合は、キャッシュされます。UUID 値は、すべてのフォームデザインで一意であり、フォームを一意に識別するために使用されます。値でフォームをレンダリングする場合、繰り返し使用する場合にのみフォームをキャッシュする必要があります。ただし、フォームを繰り返し使用せず、一意にする必要がある場合は、AEM Forms API で設定されたキャッシュオプションを使用して、フォームをキャッシュするのを避けることができます。
Forms サービスは、フォームデザイン内のリンクされたコンテンツの場所を解決することもできます。例えば、フォームデザイン内で参照されるリンク画像は、相対 URL です。リンクされたコンテンツは、常にフォームデザインの場所を基準とした相対コンテンツと見なされます。したがって、リンクされたコンテンツを解決するには、フォームデザインの絶対パスを適用して、その場所を決定する必要があります。
参照によってフォームデザインを渡す代わりに、値でフォームデザインを渡すことができます。フォームデザインを動的に作成する場合、値でフォームデザインを渡すと効率的です。つまり、クライアントアプリケーションが実行時にフォームデザインを作成する XML を生成する場合です。この場合、フォームデザインはメモリに保存されるので、物理リポジトリに保存されません。実行時に動的にフォームデザインを作成し、値で渡す場合は、フォームをキャッシュして、Forms サービスのパフォーマンスを向上させることができます。
値によるフォームの受け渡しの制限
フォームデザインが値で渡される場合は、次の制限が適用されます。
- フォームデザイン内に相対的にリンクされたコンテンツを含めることはできません。すべての画像とフラグメントは、フォームデザイン内に埋め込むか、絶対に参照する必要があります。
- フォームのレンダリング後は、サーバーサイドの計算を実行できません。フォームが Forms サービスに送り返されると、データが抽出され、サーバーサイドの計算なしで返されます。
- HTML は実行時にのみリンク画像を使用できるので、埋め込まれた画像を使用して HTML を生成することはできません。これは、Forms サービスが参照先のフォームデザインから画像を取得することで、HTML での埋め込み画像をサポートしているためです。値で渡されたフォームデザインには参照先がないので、HTML ページが表示されているときに埋め込み画像を抽出することはできません。したがって、画像参照は、HTML でレンダリングする絶対パスにする必要があります。
手順の概要 summary-of-steps
値でフォームをレンダリングするには、次の手順を実行します。
- プロジェクトファイルを含めます。
- Forms Client API オブジェクトを作成します。
- フォームデザインを保存します。
- 値でフォームをレンダリングします。
- フォームデータストリームをクライアントの Web ブラウザーに書き込みます。
プロジェクトファイルの組み込み
必要なファイルを開発プロジェクトに含めます。Java を使用してクライアントアプリケーションを作成する場合は、必要な JAR ファイルを含めます。Web サービスを使用している場合は、プロキシファイルを必ず含めるようにします。
Forms Client API オブジェクトの作成
プログラムによってデータを PDF form クライアント API に読み込む前に、Data Integration Service クライアントを作成する必要があります。サービスクライアントを作成する場合、サービスを呼び出すために必要な接続設定を定義します。
フォームデザインの参照
値でフォームをレンダリングする場合は、レンダリングするフォームデザインを含む com.adobe.idp.Document オブジェクトを作成する必要があります。既存の XDP ファイルを参照することも、実行時にフォームデザインを動的に作成してそのデータを com.adobe.idp.Document に入力することもできます。
値でフォームをレンダリング
値でフォームをレンダリングするには、フォームデザインを含む 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 を使用して値でフォームをレンダリング render-a-form-by-value-using-the-java-api
Forms API(Java)を使用して値でフォームをレンダリング:
-
プロジェクトファイルを含める
クライアント JAR ファイル(adobe-forms-client.jar など)を Java プロジェクトのクラスパスに含めます。
-
Forms Client API オブジェクトの作成
- 接続プロパティを含む
ServiceClientFactoryオブジェクトを作成します。 - コンストラクターを使用して
ServiceClientFactoryオブジェクトを渡し、FormsServiceClientオブジェクトを作成します。
- 接続プロパティを含む
-
フォームデザインの参照
- コンストラクターを使用して、XDP ファイルの場所を指定する文字列の値を渡すことにより、レンダリングするフォームデザインを表す
java.io.FileInputStreamオブジェクトを作成します。 - コンストラクターを使用して
java.io.FileInputStreamオブジェクトを渡すことにり、com.adobe.idp.Documentオブジェクトを作成します。
- コンストラクターを使用して、XDP ファイルの場所を指定する文字列の値を渡すことにより、レンダリングするフォームデザインを表す
-
値でフォームをレンダリング
FormsServiceClientオブジェクトのrenderPDFFormメソッドを呼び出して、以下の値を渡します。- 空の文字列の値(通常、このパラメーターにはフォームデザインの名前を指定する文字列の値が必要です)。
- フォームデザインを含む
com.adobe.idp.Documentオブジェクト。通常、このパラメーター値はフォームにマージするデータ用に予約されています。 - 実行時オプションを保存する
PDFFormRenderSpecオブジェクト。これはオプションのパラメーターで、実行時オプションを指定しない場合は、nullを指定できます。 - Forms サービスで必要となる URI 値が含まれる
URLSpecオブジェクト。 - 添付ファイルを保存する
java.util.HashMapオブジェクト。これはオプションのパラメーターで、フォームにファイルを添付しない場合にnullを指定できます。
renderPDFFormメソッドは、クライアント web ブラウザーに書き込むことができるフォームデータストリームを含むFormsResultオブジェクトを返します。 -
フォームデータストリームをクライアント 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メソッドを呼び出して、javax.servlet.ServletOutputStreamオブジェクトを作成します。このオブジェクトは、フォームデータストリームをクライアント web ブラウザーに書き込むために使用されます。com.adobe.idp.DocumentオブジェクトのgetInputStreamメソッドを呼び出すことによって、java.io.InputStreamオブジェクトを作成します。- バイト配列を作成し、
InputStreamオブジェクトのサイズを割り当てます。InputStreamオブジェクトのavailableメソッドを呼び出して、InputStreamオブジェクトのサイズを取得します。 InputStreamオブジェクトのreadメソッドを呼び出して、バイト配列を引数として渡すことにより、バイト配列にフォームデータストリームを格納します。javax.servlet.ServletOutputStreamオブジェクトのwriteメソッドを呼び出して、フォームデータストリームをクライアント web ブラウザーに送信します。バイト配列をwriteメソッドに渡します。
関連項目
Web サービス API を使用して値でフォームをレンダリング render-a-form-by-value-using-the-web-service-api
Forms API(web サービス)を使用して値でフォームをレンダリングします。
-
プロジェクトファイルを含める
- Forms Service WSDL を使用する Java プロキシクラスを作成します。
- Java プロキシクラスをクラスパスに含めます。
-
Forms Client API オブジェクトの作成
FormsServiceオブジェクトを作成し、認証情報を設定します。 -
フォームデザインの参照
- コンストラクターを使用して
java.io.FileInputStreamオブジェクトを作成します。XDP ファイルの場所を指定する文字列の値を渡します。 - コンストラクターを使用して
BLOBオブジェクトを作成します。BLOBオブジェクトは、パスワードで暗号化された PDF ドキュメントを保存するために使用されます。 java.io.FileInputStreamオブジェクトのコンテンツを格納するバイト配列を作成します。availableメソッドを使用してjava.io.FileInputStreamオブジェクトのサイズを取得することにより、バイト配列のサイズを指定できます。java.io.FileInputStreamオブジェクトのreadメソッドを呼び出してバイト配列を渡すことにより、バイト配列にストリームデータを格納します。setBinaryDataメソッドを呼び出してバイト配列を渡すことにより、BLOBオブジェクトに入力します。
- コンストラクターを使用して
-
値でフォームをレンダリング
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 ブラウザーに書き込む必要のあるフォームデータストリームを入力します。 -
フォームデータストリームをクライアント 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メソッドに渡します。
関連項目
Base64 エンコーディングを使用した AEM Forms の呼び出し