ひみつのPDFフォーム(その6)

あなたは 人目の訪問者です。
あなたは 人目の訪問者です。

※このブログの内容は、アドビ社から公開されている情報に基づき、個人の趣味で記述しています。
PDFフォームに入力したデータを、Webサーバへ送信するには、送信ボタンを使えば簡単にできます。
※OS: Windows 7 Ultimete SP1
※Java SE: Java SE SDK 6 Update 19
※Java IDE: Eclipse 3.7.2 Indigo SR2
※ + Pleiades All in One e3.7 Java
※Webサーバ/APサーバ: Apache Tomcat 6.0.35
※Webブラウザ: IE 8.0, Safari 5.1.5
※PDF表示: Adobe Reader X 10.1.3
※PDF作成: Adobe Acrobat X Pro 10.1.3
※PDFフォーム作成: Adobe LiveCycle Designer ES2 9.0.0
PDFフォームの送信ボタンは、HTMLのSUBMITボタンのような働きをし、PDFフォームに入力されたデータを、HTTP POSTリクエストでWebサーバへ送信できます。
PDFフォームに入力したデータは、XML形式、または、URLエンコード形式を選択することができますが、HTMLフォームとの互換性を考慮し、URLエンコード形式を用いることにします。
PDFフォームから送信されたデータを受け取るサーブレットを作ります。
Eclipseを起動し、プロジェクトエクスプローラ上の、作成した動的 Webプロジェクトで右クリックし、「新規」 – 「サーブレット」を選び、適当なJavaパッケージ名を付けます。
ここでは、クラス名は“SubmitPdfForm”にして、完了をクリックします。
SubmitPdfFormサーブレットを作成します
できあがったサーブレットの雛形”は”SubmitPdfForm.java”に、コードを書いていきます。
まずは、doPostメソッドに、Webブラウザで開いたPDFフォームから送信されてきたHTTP POSTリクエストデータを取り出して、コンソールに表示するようにします。
ただ、それだけだと、HTTP POSTリクエストのレスポンスがカラッポになり、Webブラウザ画面が真っ白になりますので、簡単なHTMLでメッセージを返すことにします。

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// PDFフォームからのHTTP POSTリクエストデータを読み込む
Enumeration<?> params = request.getParameterNames();
while (params.hasMoreElements()) {
String key = (String)params.nextElement();
String value = request.getParameter(key);
System.out.println("INFO: Key=" + key + ", value=" + value);
}
// 適当なレスポンスを返す
response.setContentType("text/html");
response.setCharacterEncoding("Windows-31J");
PrintWriter out = response.getWriter();
out.print("<html><body><font size=\"6\">");
out.print("PDFからのデータを読み込みました。");
out.print("</font></body></html>");
}

URLエンコードを選択した場合は、サーブレットのコードは、HTMLフォームからフォームデータを受け取る場合と同じコードになります。
サーブレットができたところで、メニューから「実行」-「実行」で、ローカルホストのTomcat 6.0サーバを起動し、サーブレットを呼び出せる状態にします。
LiveCycle Designer ES2で、すでに作成済みのPDFフォームの「保存」ボタンをクリックし、オブジェクトタブで、コントロールの種類を、”標準”から“送信”に変更します。
コントロールの種類を、
さらに、送信タブに切り替えて、送信先URLに、さきほど作成したサーブレットのURLである、“http://localhost:8080/WS4PDF/SubmitPdfForm” を指定します。
送信形式は“URL エンコードデータ(HTTP Post)”、データエンコーディングは“UTF-8”に設定して、PDFフォームを保存します。
送信ボタンの設定
ローカルディスクに保存したPDFフォームからフォームデータを送信することも出来てしまう(セキュリティ警告が出ますが、無視して実行可能)のですが、ここでは、Webブラウザに表示したPDFフォームをWebサーバへ送信するものとします。
WebブラウザにPDFフォームを表示するには、「ひみつのPDF(その4)」で作成した、LoadPdfTemplateサーブレットを経由して、PDFフォームをHTTP GETで取得します。
“C:\pdf_template に、OrderForm107.pdf”を配置しておき、IE8を起動して、アドレスバーに以下のURLを入力して、ウィンドウ内にPDFフォームを表示します。
http://localhost:8080/WS4PDF/LoadPdfTemplate?template=OrderForm107.pdf
PDFフォームが表示されたら、テキストフィールドやコンボボックスにデータを入力します。
テキストフィールドやコンボボックスにデータを入力します
PDFフォームへのデータ入力を終えたら、「保存」ボタンをクリックし、SubmitPdfFormサーブレットへデータを送信します。
サーブレットから、レスポンスのHTMLが返ってきて、「PDFからのデータを読み込みました。」と表示されます。
サーブレットからのレスポンス
このように、HTTP POSTでPDFフォームを送信した場合、入力したPDFフォームの表示が書き換わってしまう点に注意です。
これを回避し、PDFフォームの表示を書き換えないためには、工夫が必要になります。
Eclipseのコンソールペインには、以下のようなコンソールログが表示され、PDFフォームからのデータを受信できたことがわかります。

INFO: PDF=c:\pdf_template\OrderForm107.pdf
INFO: Key=EXAMINATION_MINUTES, value=0
INFO: Key=EXAMINATION_HOUR, value=9
INFO: Key=CLIENT_BIRTHDAY, value=1986/3/11
INFO: Key=EXAMINATION_MONTH, value=4
INFO: Key=PAYMENT_ORDER, value=1
INFO: Key=CARTE_NO, value=CT80010001
INFO: Key=DOCTOR_AUTH_DATE, value=2012-04-24
INFO: Key=DIVISION_NAME, value=1
INFO: Key=CLIENT_SEX, value=女
INFO: Key=EXAMINATION_DAY_OF_WEEK, value=1
INFO: Key=DOCTOR_NAME, value=秋元康
INFO: Key=EXAMINATION_ZONE, value=1
INFO: Key=CLIENT_NAME, value=篠田麻里子
INFO: Key=RESERVATION_ZONE, value=1
INFO: Key=EXAMINATION_DAY, value=30
INFO: Key=RESERVATION_HOUR, value=8
INFO: Key=RESERVATION_MINUTES, value=0

コンボボックスの値は、LiveCycle Designer ES2で、テキストに連結した数値になります。
なお、Safari 5.1でPDFフォームを表示した場合には、PDFフォームの送信が機能しませんでした。
[シリーズブログ]
ひみつのPDFフォーム
[1] [2] [3] [4] [5] [6] [7]

タイトルとURLをコピーしました