
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 に変換(?)のような事が行いたいです。
実際にサーバー内にファイルを作るのではなくメモリ上にファイルをつくる(?)のような感じですかね?
このような事は可能でしょうか??
以上です。よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PDF PDFに精通した方に質問。JPEGファイル群を一つのPDFファイルにするときの容量変化について 6 2023/07/23 19:06
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) ファイル一覧表を使ったファイルの移動 5 2022/08/10 15:37
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Excel(エクセル) 【マクロ】ファイル名の日付によって、保管するフォルダを、自動選択したい 4 2023/08/16 11:24
- Excel(エクセル) PDFファイルに日付を名前にして保存したい。 エクセル2019でワークシートに請求書のフォームを作り 2 2023/05/27 11:13
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/26 17:13
- その他(IT・Webサービス) WPからダウンロードしたファイル名を指定したい 2 2022/04/08 08:31
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EclipseでHTTP404エラーが出る。
-
「メイン・マニフェスト属性が...
-
Eclipse・プロジェクトで、フォ...
-
macでのファイル場所指定
-
プログラム実行の際に、「ソー...
-
jarファイルの解凍ができない
-
「削除するか、クラスパスの正...
-
earファイルを展開する方法
-
javaのCLASS ファイルについて
-
教科書に載っているJavaプログ...
-
環境変数の取得について
-
EclipseでのJDBCドライバについて
-
eclipseでjarのエクスポートが...
-
Eclipseで、配布可能なJARファ...
-
Eclipse「リフレッシュ」と「ク...
-
jarの分割に関するベストプラク...
-
「至急」 教えてください。メ...
-
VisualStudioでC++クラスを追加...
-
”書きこみできません”とエラー...
-
JSP内で外部jsファイルを指定する
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
classファイルについて
-
SVFの設定について:クラスパス...
-
Eclipse・プロジェクトで、フォ...
-
javaクラスファイルをEclipseで...
-
Eclipse「リフレッシュ」と「ク...
-
earファイルを展開する方法
-
eclipse でclassesフォルダーが...
-
「メイン・マニフェスト属性が...
-
jdbcドライバのjarファイルにク...
-
【Eclipse】パッケージ・エクス...
-
java クラスファイルとソースコ...
-
プログラム実行の際に、「ソー...
-
EclipseでHTTP404エラーが出る。
-
Jarコマンドでマニフェストファ...
-
「main メソッドを持つクラスが...
-
サーバから落としてきたWebアプ...
-
EclipseでのJSP・Servlet開発に...
-
「削除するか、クラスパスの正...
-
ファイルのパスの取得について
-
VisualStudioでC++クラスを追加...
おすすめ情報