Formsサービスは、ユーザーから情報を収集するために、クライアントデバイス(通常はWebブラウザー)に対してインタラクティブなPDF formsをレンダリングします。 インタラクティブフォームがレンダリングされた後、ユーザーはフォームフィールドにデータを入力し、フォーム上の送信ボタンをクリックして、情報をFormsサービスに送り返すことができます。 インタラクティブPDFフォームを表示するには、クライアントのWebブラウザーをホストするコンピューターにAdobe ReaderまたはAcrobatをインストールする必要があります。
Formsサービスを使用してフォームをレンダリングする前に、フォームデザインを作成します。 通常、フォームデザインはDesignerで作成され、XDPファイルとして保存されます。 フォームデザインの作成について詳しくは、「Formsデザイナー」を参照してください。
ローンの申し込み例
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サービスのクライアント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 {
}
通常、FormsサービスのクライアントAPIコードは、JavaサーブレットのdoGet
メソッドまたはdoPost
メソッド内に配置しません。 このコードを別のクラスに配置し、doPost
メソッド(またはdoGet
メソッド)内からクラスをインスタンス化して、適切なメソッドを呼び出す方が、プログラミングのベストプラクティスです。 ただし、コードを簡潔にするために、この節のコード例は最小限に抑え、コード例はdoPost
メソッドに配置します。
Formsサービスの詳細については、『AEM Formsのサービスリファレンス』を参照してください。
手順の概要
インタラクティブPDFフォームをレンダリングするには、次のタスクを実行します。
プロジェクトファイルを含める
必要なファイルを開発プロジェクトに含めます。 Javaを使用してクライアントアプリケーションを作成する場合は、必要なJARファイルを含めます。 Webサービスを使用している場合は、プロキシファイルを必ず含めてください。
FormsクライアントAPIオブジェクトの作成
プログラムでFormsサービスのクライアントAPI操作を実行する前に、Formsクライアント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サービスのクライアントAPIを使用して上書きしないでください。 つまり、FormsAPIを使用してターゲットURLを設定すると、フォームデザインで指定されたURLが、APIを使用して指定されたURLにリセットされます。 PDFフォームをフォームデザインで指定されたターゲットURLに送信する場合は、プログラムでターゲットURLを空の文字列に設定します。
送信ボタンと計算ボタン(サーバーで実行される対応するスクリプトを含む)を含むフォームがある場合、スクリプトを実行するためにフォームを送信する先のURLをプログラムで定義できます。 フォームデザインの送信ボタンを使用して、フォームデータが投稿されるURLを指定します。 (「フォームデータの計算」を参照)。
XDPファイルを参照するURL値を指定する代わりに、com.adobe.idp.Document
インスタンスをFormsサービスに渡すこともできます。 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オプションを設定できます。
FormsAPI(Java)を使用してインタラクティブPDFフォームをレンダリングします。
プロジェクトファイルを含める
Javaプロジェクトのクラスパスに、adobe-forms-client.jarなどのクライアントJARファイルを含めます。
FormsクライアントAPIオブジェクトの作成
ServiceClientFactory
オブジェクトを作成します。FormsServiceClient
オブジェクトを渡して、ServiceClientFactory
オブジェクトを作成します。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
オブジェクト'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
オブジェクトのread
メソッドを呼び出して、バイト配列を引数として渡すことで、フォームデータストリームを設定します。javax.servlet.ServletOutputStream
オブジェクトのwrite
メソッドを呼び出して、フォームデータストリームをクライアントのWebブラウザーに送信します。 バイト配列をwrite
メソッドに渡します。FormsAPI(Webサービス)を使用してインタラクティブPDFフォームをレンダリングします。
プロジェクトファイルを含める
Formsクライアント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ブラウザーに書き込まれると、フォームはユーザーに表示されます。