※このブログの内容は、アドビ社から公開されている情報に基づき、個人の趣味で記述しています。
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プロジェクトで右クリックし、「新規」 - 「サーブレット」を選び、適当なJavaパッケージ名を付けます。
ここでは、クラス名は“LoadPdfTemplate”にして、完了をクリックします。
できあがったサーブレットの雛形“LoadPdfTemplate.java”に、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”を配置しておきます。
Webブラウザ(Safari 5.5)を起動し、以下のURLを開きます。
↓ IE8でも、結果は同じです
http://localhost:8080/WS4PDF/LoadPdfTemplate?template=OrderForm102.pdf
※localhostでの実行になります。インターネットには公開していません
このように、Webサーバ上の非公開ディレクトリ上にあるPDFフォームをWebブラウザで表示することができます。
Eclipseのコンソールには、サーブレットから出力されたコンソールメッセージが出力されています。
以上は、サーバサイドから、HTTPレスポンスのコンテンツとしてPDFファイルを返し、WebブラウザへPDFファイルを表示する基本処理になります。
[シリーズブログ]
ひみつのPDFフォーム
[1] [2] [3] [4] [5]