このドキュメントのサンプルと例は、JEE 環境の AEM Forms のみを対象としています。
Forms サービスは、ユーザーから情報を収集するために、インタラクティブ PDF forms をクライアントデバイス(通常は web ブラウザー)にレンダリングします。インタラクティブフォームがレンダリングされると、ユーザーはフォームフィールドにデータを入力し、フォーム上の送信ボタンをクリックして、情報を Forms サービスに送り返すことができます。インタラクティブな PDF フォームを表示するには、クライアント Web ブラウザーをホストするコンピューターに Adobe Reader または Acrobat をインストールする必要があります。
Forms サービスを使用してフォームをレンダリングする前に、フォームデザインを作成します。通常、フォームデザインは Designer で作成され、XDP ファイルとして保存されます。フォームデザインの作成について詳しくは、Forms Designer を参照してください。
ローン申し込みのサンプル
Forms サービスが、どのようにしてインタラクティブフォームを使用してユーザーから情報を収集するかを示すために、サンプルのローン申し込みフォームが紹介されています。このアプリケーションを使用すると、ユーザーはローンのセキュリティ保護に必須のデータをフォームに入力し、データを Forms サービスに送信できます。次の図に、ローン申し込みのロジックフローを示します。
次の表に、この図の手順を示します。
ステップ |
説明 |
---|---|
1 |
この |
2 |
この |
3 |
ユーザーがローン申し込みフォームに入力し、送信ボタンをクリックすると、データが |
4 |
この |
5 |
確認フォームが web ブラウザーにレンダリングされます。ユーザーの姓や名などのデータは、レンダリング前にフォームと結合されます。(編集可能なレイアウトを使用した Forms の事前入力を参照してください。) |
ローン申し込みフォーム
このインタラクティブなローン申し込みフォームは、サンプルのローン申請の GetLoanForm
Java サーブレットによってレンダリングされます。
確認フォーム
このフォームは、サンプルのローン申請の HandleData
Java サーブレットにレンダリングされます。
この HandleData
Java サーブレットは、このフォームにユーザーの姓と名および金額を事前入力します。フォームが事前入力された後、クライアントの web ブラウザーに送信されます。(編集可能なレイアウトを使用した Forms の事前入力)
Java サーブレット
サンプルのローン申し込みフォームは、Java サーブレットとして存在する Forms サービスアプリケーションの一例です。Java サーブレットは、WebSphere などの J2EE アプリケーションサーバー上で実行される Java プログラムで、Forms Service Client API コードを含みます。
次のコードは、GetLoanForm という名前の Java サーブレットの構文を示します。
public class GetLoanForm extends HttpServlet implements Servlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp
throws ServletException, IOException {
}
public void doPost(HttpServletRequest req, HttpServletResponse resp
throws ServletException, IOException {
}
通常、 Java サーブレットの doGet
または doPost
メソッドには Forms Service Client API コードを配置しません。より優れたプログラミング方法としては、このコードを別のクラスに配置し、そのクラスを、doPost
メソッド(または doGet
メソッド)でインスタンス化し、適切なメソッドを呼び出します。ただし、コードを簡潔にするため、このセクションでのコードの例は最小限に抑えられ、コード例は doPost
メソッドで配置されています。
Forms サービスについて詳しくは、AEM Forms のサービスリファレンスを参照してください。
手順の概要
インタラクティブ PDF フォームをレンダリングするには、次のタスクを実行します。
プロジェクトファイルの組み込み
必要なファイルを開発プロジェクトに含めます。Java を使用してクライアントアプリケーションを作成する場合は、必要な JAR ファイルを含めます。Web サービスを使用している場合は、プロキシファイルを必ず含めてください。
Forms Client API オブジェクトの作成
Forms Service Client API 操作をプログラムで実行する前に、Forms Client API オブジェクトを作成する必要があります。Java API を使用している場合は、FormsServiceClient
オブジェクトを作成します。Forms web サービス API を使用している場合は、FormsService
オブジェクトを作成します。
URI 値の指定
Forms サービスでフォームをレンダリングするために必要な URI 値を指定できます。Forms アプリケーションの一部として保存されたフォームデザインは、コンテンツルート URI 値 repository:///
を使用して参照できます。例えば、FormsApplication という Forms アプリケーション内にある Loan.xdp という次のフォームデザインを考えます。
このフォームデザインにアクセスするには、フォーム名(renderPDFForm
メソッドに渡される最初のパラメーター)として Applications/FormsApplication/1.0/FormsFolder/Loan.xdp
を指定し、コンテンツルート URI 値として repository:///
を指定します。
Workbench を使用した Forms アプリケーションの作成について詳しくは、Workbench ヘルプを参照してください。
Forms アプリケーション内のリソースへのパスは次のとおりです。
Applications/Application-name/Application-version/Folder.../Filename
URI 値の一例を以下に示します。
インタラクティブフォームをレンダリングする際に、フォームデータの送信先となるターゲット URL などの URI 値を定義できます。ターゲット URL は、次のいずれかの方法で定義できます。
ターゲット URL がフォームデザイン内で定義されている場合は、Forms サービス Client API を使用して上書きしないでください。Forms API を使用してターゲット URL を設定すると、フォームデザインで指定された URL が、API を使用して指定された URL にリセットされます。フォームデザインで指定されたターゲット URL に PDF フォームを送信する場合は、プログラムによってターゲット URL を空の文字列に設定します。
「送信」ボタンと「計算」ボタン(サーバーで実行される対応するスクリプト)を含むフォームがある場合、フォームが送信されるスクリプトの URL をプログラムで定義してスクリプトを実行できます。フォームデザインの送信ボタンを使用して、フォームデータが投稿される URL を指定します(フォームデータの計算を参照)。
XDP ファイルを参照する URL 値を指定する代わりに、Forms サービスに com.adobe.idp.Document
インスタンスを渡すこともできます。com.adobe.idp.Document
インスタンスにはフォームデザインが含まれています(Forms サービスにドキュメントを渡すを参照)。
フォームにファイルを添付する
フォームにファイルを添付できます。添付ファイルを含む PDF フォームをレンダリングすると、ユーザーは添付ファイルペインを使用して Acrobat で添付ファイルを取得できます。フォームには、テキストファイルなどの様々なファイルタイプを添付したり、バイナリファイル(JPG ファイルなど )に添付したりできます。
フォームへのファイルの添付はオプションです。
インタラクティブ PDF フォームのレンダリング
フォームをレンダリングするには、Designer で作成され、XDP ファイルまたは PDF ファイルとして保存されたフォームデザインを使用します。また、Acrobat を使用して作成され、PDF ファイルとして保存されたフォームをレンダリングすることもできます。インタラクティブな PDF フォームをレンダリングするには、FormsServiceClient
オブジェクトの renderPDFForm
メソッドまたは renderPDFForm2
メソッドを呼び出します。
renderPDFForm
は URLSpec
オブジェクトを使用します。XDP ファイルへのコンテンツルートは、URLSpec
オブジェクトの setContentRootURI
メソッドを使用して Forms サービスに渡されます。フォームデザイン名(formQuery
)は別のパラメーター値として渡されます。2 つの値が連結され、フォームデザインへの絶対参照が取得されます。
renderPDFForm2
メソッドはレンダリングする XDP ドキュメントまたは PDF ドキュメントを含む com.adobe.idp.Document
インスタンスを受け取ります。
入力ドキュメントが PDF ドキュメントの場合、タグ付き PDF の実行時オプションは設定できません。入力ファイルが XDP ファイルの場合は、「タグ付き PDF」オプションを設定できます。
Forms API(Java)を使用してインタラクティブ PDF フォームをレンダリングします。
プロジェクトファイルを含める
adobe-forms-client.jar などのクライアント JAR ファイルを Java プロジェクトのクラスパスに含めます。
Forms Client API オブジェクトの作成
ServiceClientFactory
オブジェクトを作成します。ServiceClientFactory
オブジェクトを渡すことによって、FormsServiceClient
オブジェクトを作成します。URI 値を指定
URLSpec
オブジェクトを作成します。URLSpec
オブジェクトの setApplicationWebRoot
メソッドを呼び出して、アプリケーションの web ルートを表す文字列値を渡します。URLSpec
オブジェクトの setContentRootURI
メソッドを呼び出して、コンテンツルート URI 値を指定する文字列値を渡します。フォームデザインがコンテンツルート URI に配置されていることを確認します。そうでない場合、Forms サービスは例外をスローします。リポジトリを参照するには、repository:///
を指定します。URLSpec
オブジェクトの setTargetURL
メソッドを呼び出して、フォームデータの送信先となるターゲット URL の値を指定する文字列を渡します。フォームデザインでターゲット URL を定義する場合、空の文字列を渡すことができます。また、計算を実行するためのフォームの送信先の URL を指定することもできます。フォームにファイルを添付する
コンストラクターを使用して、添付ファイルを格納する java.util.HashMap
オブジェクトを作成します。
レンダリングされたフォームに添付するファイルごとに java.util.HashMap
オブジェクトの put
メソッドを呼び出します。このメソッドに次の値を渡します。
添付ファイルを含む com.adobe.idp.Document
オブジェクト
フォームに添付するファイルごとに、この手順を繰り返します。この手順はオプションです。添付ファイルを送信しない場合は、null
を渡すことができます。
インタラクティブ PDF フォームのレンダリング
FormsServiceClient
オブジェクトの renderPDFForm
メソッドを呼び出して、次の値を渡します。
Applications/FormsApplication/1.0/FormsFolder/Loan.xdp
com.adobe.idp.Document
オブジェクト。データを結合しない場合は、空の com.adobe.idp.Document
オブジェクトを渡します。PDFFormRenderSpec
オブジェクト。これはオプションのパラメーターで、実行時オプションを指定しない場合は、null
を指定できます。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
メソッドを呼び出して、フォームデータストリームをクライアント web ブラウザーに書き込むために使用される javax.servlet.ServletOutputStream
オブジェクトを作成します。com.adobe.idp.Document
オブジェクトの getInputStream
メソッドを呼び出すことによって java.io.InputStream
オブジェクトを作成します。InputStream
オブジェクトの read
メソッドを呼び出してバイト配列を引数として渡すことによって、バイト配列を作成してフォームデータストリームを入力します。javax.servlet.ServletOutputStream
オブジェクトの write
メソッドを呼び出して、フォームデータストリームをクライアント web ブラウザーに送信します。write
メソッドにバイト配列を渡します。Forms API(web サービス)を使用してインタラクティブ PDF フォームをレンダリングします。
プロジェクトファイルを含める
Forms Client API オブジェクトの作成
FormsService
オブジェクトを作成し、認証値を設定します。
URI 値を指定
URLSpec
オブジェクトを作成します。URLSpec
オブジェクトの setApplicationWebRoot
メソッドを呼び出して、アプリケーションの web ルートを表す文字列値を渡します。URLSpec
オブジェクトの setContentRootURI
メソッドを呼び出して、コンテンツルート URI 値を指定する文字列値を渡します。フォームデザインがコンテンツルート URI に配置されていることを確認します。そうでない場合、Forms サービスは例外をスローします。リポジトリを参照するには、repository:///
を指定します。URLSpec
オブジェクトの setTargetURL
メソッドを呼び出して、フォームデータの送信先となるターゲット URL の値を指定する文字列を渡します。フォームデザインでターゲット URL を定義する場合、空の文字列を渡すことができます。また、計算を実行するためのフォームの送信先の URL を指定することもできます。フォームにファイルを添付する
コンストラクターを使用して、添付ファイルを格納する java.util.HashMap
オブジェクトを作成します。
レンダリングされたフォームに添付するファイルごとに java.util.HashMap
オブジェクトの put
メソッドを呼び出します。このメソッドに次の値を渡します。
添付ファイルを含む BLOB
オブジェクト
フォームに添付するファイルごとに、この手順を繰り返します。
インタラクティブ PDF フォームのレンダリング
FormsService
オブジェクトの renderPDFForm
メソッドを呼び出して、次の値を渡します。
Applications/FormsApplication/1.0/FormsFolder/Loan.xdp
BLOB
オブジェクト。データを結合しない場合は、空の null
オブジェクトを渡します。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
メソッドに渡します。フォームデータストリームをクライアント web ブラウザーに書き込む
Forms サービスがフォームをレンダリングすると、クライアントの web ブラウザーに書き込む必要があるフォームデータストリームが返されます。クライアント Web ブラウザーに書き込まれると、フォームはユーザーに対して表示されます。