SSブログ
お知らせ

 当ブログは、ブログに割当てられたディスク容量が満杯になったため、2017年1月8日に、続ブログへ移転しました。

 【移転先】
  続・Emi Clockは、どうなったの?
  https://yuna-k.blog.ss-blog.jp/


  RSSフィード
  https://yuna-k.blog.ss-blog.jp/index.xml

※ 60秒後に自動的に続ブログへ移動します。

ひみつの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]

nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

Facebook コメント

caution.gif当ブログ記事は、日本国著作権法および国際法により権利が保護されています。無断で 画面の写真、ハードコピー、その他の二次複製物を無断で使用することは権利の 侵害になりますのでご注意下さい。
This blog post, right has been protected by copyright law and international law. Without permission screen photo of, hard copy, that you use the other secondary copies without permission is a violation of the rights Please note.
- - - - -
All rights reserved. Copyright (C) Motosoft(Toshi At Kuroneko) 2007-2022.

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。