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

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

※このブログの内容は、アドビ社から公開されている情報に基づき、個人の趣味で記述しています。
Webサーバ上の非公開ディレクトリ上にあるPDFフォームをWebブラウザで表示するには、Java Servletを使えば簡単にできます。
※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
あらかじめ、Java SEのJREを、JDKのJREランタイムに変更しておきます。
※このための設定方法は割愛します。ネットで検索するなどして調べてください。
あらかじめ、Eclipseに、Apache Tomcat v6.0をインストールしておき、サーバ構成を作っておきます。
Tomcatのサーバ構成の作り方は、ここでは割愛しますが、コマンドラインから、”startup”で起動し、Webブラウザから、”http://localhost:8080/”へのアクセスにより、Tomcatのトップページが表示される状態になっているとします。
※このための設定方法は割愛します。ネットで検索するなどして調べてください。
Eclipseを起動し、メニューから「ファイル」 – 「新規…」 – 「動的 Webプロジェクト」を選び、適当なプロジェクト名を付けます。
動的 Webプロジェクトを作る< プロジェクトエクスプローラ上の、作成した動的 Webプロジェクトで右クリックし、「新規」 - 「サーブレット」を選び、適当なJavaパッケージ名を付けます。 ここでは、クラス名は“LoadPdfTemplate”にして、完了をクリックします。
新規サーブレット名称を付与する
できあがったサーブレットの雛形“LoadPdfTemplate.java”に、Javaでコードを書いていきます。
EclipseでJavaコードを書いて、サーブレットを実装する
今回は、HTTP GETリクエストでPDFフォームを返すようにするため、doGetメソッドにコードに、コードを書きます。
おおまかな処理の流れは、以下のようになります。
(1) HTTPリクエストパラメタから、PDFテンプレート名称を取得
(2) HTTPレスポンスヘッダを設定
(3) サーバ側で公開されていないディレクトリ上にあるPDFテンプレートを読み込み、
 読み込んだPDFテンプレートを、HTTP RESPONSEへ出力ストリームで返す
これらの処理を、Javaで記述します。
doGetメソッドのコードは、エラー処理や、リソース処理などを極力省いて簡略化し、エッセンシャルのみを記述しています。

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
// (1) HTTPリクエストパラメタから、PDFテンプレート名称を取得
String template = request.getParameter("template");
if (template != null) {
// PDFテンプレートファイルのフルパス
final String TEMPLATE_BASE = "c:\\pdf_template";
String templateFilePath = TEMPLATE_BASE + "\\" + template;
System.out.println("INFO: PDF=" + templateFilePath);
File templateFile = new File(templateFilePath);
// (2) HTTPレスポンスヘッダを設定
response.setContentType("application/pdf");
response.addHeader("Accept-Ranges", "none");
response.setContentLength((int)templateFile.length());
response.addHeader("Expires", "0");
// (3) サーバ側で公開されていないディレクトリ上にあるPDFテンプレートを読み込み、
//   読み込んだPDFテンプレートを、HTTP RESPONSEへ出力ストリームで返す
OutputStream outStream = response.getOutputStream();
InputStream inStream = null;
try {
inStream = new BufferedInputStream(new FileInputStream(templateFile));
byte[] byteBuf = new byte[4096];
for (;;) {
int iRead = inStream.read(byteBuf, 0, byteBuf.length);
if (iRead < 0) {
break;
}
outStream.write(byteBuf, 0, iRead);
}
} catch (Exception e) {
// TODO 自動生成された catch ブロック
System.out.println("ERROR: PDFストリームが生成できませんでした.");
e.printStackTrace();
} finally {
inStream.close();
}
}
else
System.out.println("ERROR: templateパラメタがありません.");
}

※上記コードはコピペして、煮るなり焼くなり、好きに使ってください
ソースコードを記述して、エラーや警告が無ければ、サーブレットを実行してみます。
メニューから、「実行 – 「実行」で進めると、Tomcatが起動し、サーブレットが deploy されます。
アプリケーションを実行するには、Webサーバには公開されない場所に、PDFテンプレートを配置するパスにディレクトリを作成しておく必要がありますが、ここでは、“c:\pdf_template”ディレクトリを作成し、この中に、“OrderForm102.pdf”を配置しておきます。
PDFテンプレートをディレクトリに配置
Webブラウザ(Safari 5.5)を起動し、以下のURLを開きます。
  ↓  IE8でも、結果は同じです
http://localhost:8080/WS4PDF/LoadPdfTemplate?template=OrderForm102.pdf
※localhostでの実行になります。インターネットには公開していません
このように、Webサーバ上の非公開ディレクトリ上にあるPDFフォームをWebブラウザで表示することができます。
Webサーバ上の非公開ディレクトリ上にあるPDFフォームをWebブラウザで表示することができます
Eclipseのコンソールには、サーブレットから出力されたコンソールメッセージが出力されています。
Tomcatのコンソールログで動作を確認
以上は、サーバサイドから、HTTPレスポンスのコンテンツとしてPDFファイルを返し、WebブラウザへPDFファイルを表示する基本処理になります。
[シリーズブログ]
ひみつのPDFフォーム
[1] [2] [3] [4] [5]