通常、Designerで作成されたフォームデザインは、Formsサービスへの参照によって渡されます。 フォームデザインは大きくなる場合があり、その結果、フォームデザインのバイトを値でマーシャリングする必要がなくなるように、参照によって渡す方が効率的になります。 また、Formsサービスはフォームデザインをキャッシュできるので、キャッシュしたときにフォームデザインを継続的に読み取る必要がありません。
フォームデザインにUUID属性が含まれる場合は、キャッシュされます。 UUID値は、すべてのフォームデザインで一意で、フォームを一意に識別するために使用します。 値を指定してフォームをレンダリングする場合、フォームを繰り返し使用する場合にのみキャッシュする必要があります。 ただし、フォームを繰り返し使用せず、一意である必要がある場合は、AEM FormsAPIで設定されたキャッシュオプションを使用してフォームをキャッシュしないでください。
また、Formsサービスは、フォームデザイン内のリンクされたコンテンツの場所を解決することもできます。 例えば、フォームデザイン内から参照されるリンク画像は、相対URLです。 リンクされたコンテンツは、常にフォームデザインの場所に対する相対コンテンツであると見なされます。 したがって、リンクされたコンテンツを解決するには、フォームデザインの絶対位置に相対パスを適用して位置を決定する必要があります。
フォームデザインを参照で渡す代わりに、値でフォームデザインを渡すことができます。 フォームデザインを動的に作成する場合、値を使用してフォームデザインを渡す方法が効率的です。つまり、クライアントアプリケーションが実行時にフォームデザインを作成するXMLを生成する場合です。 この場合、フォームデザインはメモリに保存されるので、物理リポジトリには保存されません。 実行時に動的にフォームデザインを作成し、値を渡す場合は、フォームをキャッシュして、Formsサービスのパフォーマンスを向上させることができます。
値によるフォームの渡しの制限
フォームデザインが値によって渡される場合、次の制限が適用されます。
値ごとに異なる種類のフォーム(HTMLフォームや使用権限を含むフォームなど)をレンダリングできますが、この節ではインタラクティブPDF formsのレンダリングについて説明します。
Formsサービスの詳細については、『AEM Formsのサービスリファレンス』を参照してください。
値を指定してフォームをレンダリングするには、次の手順を実行します。
プロジェクトファイルを含める
必要なファイルを開発プロジェクトに含めます。 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ブラウザーに書き込まれると、フォームはユーザーに表示されます。
関連トピック
WebサービスAPIを使用して値でフォームをレンダリングする
FormsAPI(Java)を使用して値でフォームをレンダリングする:
プロジェクトファイルを含める
Javaプロジェクトのクラスパスに、adobe-forms-client.jarなどのクライアントJARファイルを含めます。
FormsクライアントAPIオブジェクトの作成
ServiceClientFactory
オブジェクトを作成します。FormsServiceClient
オブジェクトを渡して、ServiceClientFactory
オブジェクトを作成します。フォームデザインの参照
java.io.FileInputStream
オブジェクトを作成します。com.adobe.idp.Document
オブジェクトを渡すことによって、java.io.FileInputStream
オブジェクトを作成します。値によるフォームのレンダリング
FormsServiceClient
オブジェクトのrenderPDFForm
メソッドを呼び出し、次の値を渡します。
com.adobe.idp.Document
オブジェクト。 通常、このパラメーターの値はフォームにマージされるデータ用に予約されています。PDFFormRenderSpec
オブジェクト。 これはオプションのパラメーターです。実行時のオプションを指定しない場合は、null
を指定できます。URLSpec
オブジェクト。java.util.HashMap
オブジェクト。 これはオプションのパラメーターです。フォームにファイルを添付しない場合は、null
を指定できます。renderPDFForm
メソッドは、クライアントのWebブラウザーに書き込み可能なフォームデータストリームを含むFormsResult
オブジェクトを返します。
フォームデータストリームをクライアントの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
メソッドに渡します。関連トピック
クイック開始(SOAPモード):Java APIを使用した値によるレンダリング
FormsAPI(Webサービス)を使用して値でフォームをレンダリングする:
プロジェクトファイルを含める
FormsクライアントAPIオブジェクトの作成
FormsService
オブジェクトを作成し、認証値を設定します。
フォームデザインの参照
java.io.FileInputStream
オブジェクトを作成します。XDPファイルの場所を指定するstring値を渡します。BLOB
オブジェクトを作成します。BLOB
オブジェクトは、パスワードで暗号化されたPDFドキュメントを保存するために使用します。java.io.FileInputStream
オブジェクトの内容を格納するバイト配列を作成します。 java.io.FileInputStream
オブジェクトのサイズを取得するには、available
メソッドを使用します。java.io.FileInputStream
オブジェクトのread
メソッドを呼び出し、バイト配列を渡すことで、ストリームデータをバイト配列に入力します。BLOB
オブジェクトを入力するには、setBinaryData
メソッドを呼び出し、バイト配列を渡します。値によるフォームのレンダリング
FormsService
オブジェクトのrenderPDFForm
メソッドを呼び出し、次の値を渡します。
BLOB
オブジェクト。 通常、このパラメーターの値はフォームにマージされるデータ用に予約されています。PDFFormRenderSpec
オブジェクト。 これはオプションのパラメーターです。実行時のオプションを指定しない場合は、null
を指定できます。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
メソッドに渡します。関連トピック