• 締切済み

Java Webアプリ。PDFダウンロード

Tomcat6(Struts2.x)で構築されたWebサイトにPDFダウンロード機能を実装しています。 PDFファイルの内容は動的に変更する必要があり別のライブラリを使いExcelテンプレートを元にに生成しています。 この処理(Excelテンプレ → (DBなどのデータを動的に埋め込み) → PDFファイル生成)は正常にできています。 ただ正常に動かす為には生成したPDFファイルをサーバー内のディレクトリに置いた後、そのファイルを使い InputStream inputStream = FileUtils.openInputStream(new File("そのファイル")); としてこの inputStream をStruts2のアクションの設定ファイルで --------------------------------------------------------------------------- <result type="stream"> <param name="contentType">application/pdf</param> <!-- 上記のメンバ変数の imputStreamを指定。 --> <param name="inputName">inputStream</param> <param name="contentDisposition">attachment; filename = ${fileName}</param> <param name="bufferSize">${bufferSize}</param> <param name="contentLength">${contentLength}</param> </result> --------------------------------------------------------------------------- としています。この方法だとうまくいってますし最終的にやりたい事も実現できてます。 しかし、 生成したPDFファイルをサーバー内のディレクトに置くという処理が気になっています。 というのも前述したExcelファイルからPDFを生成するライブラリは以下のように使います。 ※わかり辛いですが全体的な処理の流れとしては上記までが下記より後に実行されます!! --------------------------------------------------------------------------- // まず FileOutputStream のインスタンスを作る(C:/hoge.pdf はもちろんこの時点では存在しなくてOK)。 FileOutputStream fos = new FileOutputStream("C:/hoge.pdf"); // PDF生成ライブラリのクラスのコンストラクタ。 HogeTemplatePdf pdf = new HogeTemplatePdf("サーバー内に置いたExcelのテンプレ"); // このprintPdf()メソッドを実行するとPDF(C;/hoge.pdf)が生成されます。 pdf.printPdf(fos); --------------------------------------------------------------------------- ※このPDF生成のライブラリは私の方では変更できないものです。 このように printPdf() メソッドは OutputStream へPDFを出力します。 しかし一番上に書いたファイルそのもののダウンロード処理は inputStream で指定しないといけないようです。 つまり現在の処理の流れは、 (FileOutputStream)  ↓ (PDFファイル生成 ※実際に指定したサーバーのパスにファイルができる)  ↓ (サーバー内にできたファイルを指定して inputStream を生成)  ↓ (ダウンロード) という流れですがこれを (FileOutputStream)  ↓ (??? 実際にサーバー内にファイルは生成して欲しくない)  ↓ (サーバー内にできたファイルを指定して inputStream を生成)  ↓ (ダウンロード) のような実装にしたいと考えています。 つまり outputStream を inputStream に変換(?)のような事が行いたいです。 実際にサーバー内にファイルを作るのではなくメモリ上にファイルをつくる(?)のような感じですかね? このような事は可能でしょうか?? 以上です。よろしくお願いします。

  • Java
  • 回答数2
  • ありがとう数1

みんなの回答

  • kakusuke
  • ベストアンサー率36% (95/259)
回答No.2

コードを見ている限り、 ファイルストリームにする必要は無さそうです。 ByteArrayOutputStream o = new ByteArrayOutputStream() ; HogeTemplatePdf pdf = new HogeTemplatePdf("サーバー内に置いたExcelのテンプレ"); pdf.printPdf(o); ByteArrayInputStream in = new ByteArrayInputStream( o.toByteArray() ) ; o.close() ; o = null ;

回答No.1

#Strus2学ぶの面倒だから試さず、 >つまり outputStream を inputStream に変換(?)のような事が行いたいです。 しか読んでないが、前にそんなの書いたなーと。dosでやったほうが良かったかな…当時も http://ideone.com/DqOFW

関連するQ&A

  • BufferedWriterのcloseメソッド

    ファイル出力に関して、次のようなコードをよく目にします。 例外処理省略 FileOutputStream fos = new FileOutputStream("hoge.txt"); OutputStreamWriter osw = new OutputStreamWriter(fos); BufferedWriter bw = new BufferedWriter(osw); //ファイルに出力 bw.close(); osw.close(); fos.close(); 同様の処理で、次のようなコードも目にします。 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("hoge.txt"))); //ファイルに出力 bw.close(); 下のコードで、関連するソースを見てみると、BufferedWriterオブジェクトをcloseする際に、そのオブジェクトが参照を持っているOutputStreamWriterオブジェクトはcloseされているように見えるのですが、FileOutputStreamオブジェクトがcloseされているようには見えませんでした。 下のようなコードは安全といえるのでしょうか?BufferedWriterオブジェクトのcloseで引数として渡される各オブジェクトもcloseされるのでしょうか?

  • javaからのPDF作成について

    現在servletで印刷用にPDFを作成しようと思っているのですが 行き詰まってしまいました。 やろうとしていることは 1.日本語でPDFファイルを生成する。 2.PDFファイルには表をつけたい servletによるダウンロードは完璧なのですがPDFファイルの作り方が わかりません。 iTextなどのライブラリを使ってみたのですが、 日本語の出力、表の作成の単独ではサンプルもあり動作確認 ができたのですが、それをどう組み合わせていいかわかりません。 やってみたことのある方いらっしゃったら教えてください。 ちなみに有償のものを使わずにフリーのものもののみで構築しようと 考えています。おすすめがあればそれも教えていただければ うれしいです。

    • ベストアンサー
    • Java
  • DoJa5.1でiアプリを作っています。

    DoJa5.1でiアプリを作っています。 サーバー上のテキストファイルの内容を、スクラッチパッドに保存しようとしています。 サーバ(さくらのレンタルサーバ)がcontentLengthを返していないようで、 うまく動作しません。 サーバ上のテキストファイルはサイズが一定ではありません。 contentLengthを取得する方法、または別の解決方法があったら教えてください。 よろしくお願いします。 HttpConnection http = null; InputStream in = null; data = null; try{   http = (HttpConnection)Connector.open("http://xxxxx.sakura.ne.jp/cgi-bin/xxxxx.cgi", Connector. READ);   http.setRequestMethod(HttpConnection.GET);   http.setRequestProperty("Content-Type","text/plain");   http.connect();   int contentLength = (int)http.getLength();   in = http.openInputStream();   // textbox.setText(Integer.toString(contentLength));   // contentLengthの値を確認したらなにもない(空欄のまま)   // ちなみに、5行まえの「http.setRequestProperty("Content-Type","text/plain");」   // をコメントアウトすると、contentLengthは「-1」になりました。   // data = new byte[contentLength];   // contentLengthが取得できないので、ここでエラーになる   // in.read(data); } catch... サーバ上のCGIです。 -------------------------------------------------------------- #!/usr/bin/perl print "Content-type: text/plain\n\n"; print "test"; --------------------------------------------------------------

    • ベストアンサー
    • Java
  • txtやpdfを開かないでダウンロードさせるには?

    お世話になります。 txtファイルやpdfファイル(Acrobat Readerが入っていると仮定する)等をサーバー上に おいて、そのファイルのURLを指定するとブラウザに表示されますが これをZipやLzhを指定した時のようにダイアログボックスを表示し(圧縮をしないで)ダウンロードさせたいのですが やり方が解りません。 ご教授よろしくお願いします。

  • Webサーバからファイルをダウンロード

    Webサーバの既知のディレクトリ(http://aaa.co.jp/bbb/)に 保管されているPDFファイル(ccc.pdf)をクラインアントから 次のようにダウンロードさせるサイトが作りたいです。 (1)クライアントが、Webサイトのテキストボックスにファイル名(ccc.pdf)を   入力して、保存ボタンを押す。 (2)クライアントに、「名前を付けて保存」ダイアログを表示させる。   (デフォルトでファイル名は ccc.pdf となっている。) (3)クライアントが「保存する場所」を指定して、「保存」ボタンを押すと、   http://aaa.co.jp/bbb/ccc.pdf がダウンロードされ、指定の場所に   ファイルが保存される。 この(2)、(3)の処理をさせるのに、JavaScriptでどのように書けば 良いのでしょうか? (location.href でファイルをブラウザで表示させることはできますが、  表示させることなく、保存だけしたいです。) 素人のため、言葉の使い方がおかしいかもしれませんが、 宜しくお願い致します。

  • JPEG画像の書き出し

    JPEG画像を読み込んで別ファイルに出力するという操作を行いたくて、以下のように書きました。 //画像情報の取得 try { FileInputStream fis = new FileInputStream(fileName); JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(fis); image = decoder.decodeAsBufferedImage(); fis.close(); } catch (IOException e) { System.err.println("Can't open the file."); } //** 中略 **// //画像情報の出力 try{ FileOutputStream fos = new FileOutputStream(fileName); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos); JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image); param.setQuality((float)1.0, false); encoder.setJPEGEncodeParam(param); encoder.encode(image); fos.close(); } catch (IOException e){ System.out.println("Can't save the new file."); } これで、実際に入出力はできるのですが、圧縮されるのかオリジナルとは違うものが出力されてしまいます。 コピーではなく、画素値の変更が一切ないように出力したい場合はどうしたらいいでしょうか?

    • ベストアンサー
    • Java
  • swfファイルがhtmlファイルよりも上位階層にある場合の設定方法

    1つのswfファイルを複数のhtmlで使うため、下記の階層にしています。 hoge.swf  +1   +index.html  +2   +index.html  +3   +index.html 単純に相対パスで指定してもダメでした。 <param name="movie" value="../hoge.swf" /> そもそも読み込むことが可能なのでしょうか? 可能でしたら指定方法を教えてください。

    • ベストアンサー
    • Flash
  • 指定したURLからファイル(PDFなど)をダウンロードして、それをサー

    指定したURLからファイル(PDFなど)をダウンロードして、それをサーバー上にアップロードしたいのですが、どのように作ればいいでしょうか。 よろしくお願いします。

    • 締切済み
    • PHP
  • WebLogic6.0 でのJSPプリコンパイルについて

    WebLogic6.0でJSPのプリコンパイルを行いたいのですが、 Javaコマンドからのコンパイルはできるのに、 weblogic.xml で <jsp-descriptor> <jsp-param> <param-name>precompile</param-name> <param-value>true</param-value> </jsp-param> </jsp-descriptor> と指定しても web.xml で <context-param> <param-name>weblogic.jsp.precompile</param-name> <param-value>true</param-value> </context-param> と指定しても、 エラーがでるだけ、または何も起こらずクラスファイルが生成されない、 となってしまいます。 WebLogic6.0のspecificationにはプリコンパイルの方法がのっているのに 付属のマニュアルにはのっていないので、これはいまだ 解決できないバグということなのでしょうか。 どなたかご存じの方がいましたら教えてください。

    • ベストアンサー
    • Java
  • phpを使用してPDFファイルを作成してメール添付で送信したい

    phpを使用してPDFを作成し、そのファイルをEメール添付で指定されたアドレスへ送信したいと思っています。 PDFファイルの生成、Eメール送信をする処理はそれぞれできたのですが、生成したファイルをEメール添付する方法がわかりません。 まだまだ勉強不足で、どのようにしたらいいかご教授をお願いいたします。サンプルなどあれば助かります。 環境:php4、FPDFを使用 どうぞよろしくお願いいたします。

    • 締切済み
    • PHP

専門家に質問してみよう