- PR -

StrutsからiTextを使用してPDFを出力するとファイルのダウンロードダイアログが開いてしまう

1
投稿者投稿内容
ちゅん
会議室デビュー日: 2004/04/04
投稿数: 8
投稿日時: 2004-04-04 17:35
はじめまして。
Windows2000サーバ
Tomcat4.1.29
Struts1.1
iText
を使用して業務アプリケーションを作成しています。

帳票を出力するのにiTextのライブラリを使用して、出力しようとしているのですがネスケだとAcrobatプラグインにより、ネスケ上に作成したPDFが表示されます。
ただ、ie6(パッチを全て適用済み)で同じようにアクセスするのですがファイルのダウンロードダイアログが表示されてしまいます。
ie6でもネスケと同じように動作するようにしたいのですが調べてもわかりませんでした。
わかる方がいらっしゃいましたら、教えて下さい。
宜しくお願い致します。

---- PDF作成Javaソースの一部 ----
Document doc=new Document(PageSize.A4.rotate());
response.setContentType("application/pdf");
PdfWriter writer=PdfWriter.getInstance(doc,response.getOutputStream());
doc.open();
〜出力するコード
doc.close();

return null;
---- ここまで ----
sugimoto
常連さん
会議室デビュー日: 2002/12/05
投稿数: 45
投稿日時: 2004-04-05 17:48
杉本と申します。

クライアント側の設定かもしれません。
Explorerで ツール - フォルダオプション - ファイルの種類
で、拡張子「PDF」を探します。

PDFの設定の「詳細設定」ボタンをクリックします。
そこに「ダウンロード後に常に開くように設定する」と
ありますので、それにチェックを入れてみてはどうでしょう?

# でも僕のは、チェックはいってないのに、開く・・・
# 関係ないかもしれないので、参考までに。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2004-04-05 18:20
ダウンロードするファイルの拡張子は何になっているのでしょうか?
拡張子がなかったりして、開かずにダウンロードになったとか・・・
iti
会議室デビュー日: 2003/09/02
投稿数: 3
投稿日時: 2004-04-05 20:13
Content-Dispositionは設定されていないのでしょうか?。

Content-Dispositionでinlineを指定すれば、開いてくれると思うんですけど。

こんな感じ。
response.setHeader("Content-Disposition", "inline; filename=\"" + filename + "\"");
ちゅん
会議室デビュー日: 2004/04/04
投稿数: 8
投稿日時: 2004-04-06 01:45
返信、ありがとうございます。
拡張子の設定は、確認しました。
今日、検索でitiさんと同じ指摘されている内容を見つけました。
itiさんに教えて頂いた、設定で実行した結果、ブラウザがプラグインを実行し、上手くいったと思ったのですが、出力は、Acrobatのコントロールが無い状態で空白ページが出力されてしまいます。
ちゅん
会議室デビュー日: 2004/04/04
投稿数: 8
投稿日時: 2004-04-06 02:27
自己レスです。
マイクロソフトのFAQにて見つけました。
----- ここから
現象
Internet Explorer で .pdf (Portable Document Format) ファイルを開こうとしたときに、Adobe Acrobat Reader で表示される代わりに、プレースホルダ アイコンのみの空白のページが表示されることがあります。
原因
この現象は、.pdf ファイルへの URI (Uniform Resource Identifier) の最後が ".pdf" になっておらず、サーバーから返された content-type の MIME (Multipurpose Internet Mail Extensions) ヘッダーが "unknown/unknown" になっているか、content-length ヘッダーが返されなかった場合に発生します。URI の最後が ".pdf" になっていないケースは、スクリプトを通じてファイルが開かれたり、動的にファイルが生成された場合などに発生します。ただし、Netscape スタイルのプラグインをサポートしている以前のバージョンの Internet Explorer では、content-type ヘッダーがない場合も .pdf ファイルを正常に開くことができます。
解決方法
この現象を回避するには、.pdf ファイルへのリンクを右クリックし、[対象をファイルに保存] をクリックして .pdf ファイルをローカルのコンピュータに保存します。.pdf ファイルをローカルに保存したら、そのファイルをダブルクリックすることによって、Adobe Acrobat Reader で開くことができます。

この問題を解決するには、Web サイトの作成者または管理者に問い合わせてください。Web サイトの作成者または管理者は、 content-type (MIME タイプ) ヘッダーに "application/pdf" を設定し、適切な content-length ヘッダーを返すように Web サーバーを構成することによって 、この問題を解決できます。この解決方法の詳細については、使用している Web サーバーのドキュメントを参照してください。
----- ここまで

動的に作成しているPDFファイルのサイズって求められるのでしょうか?
宜しくお願い致します。
takegata
会議室デビュー日: 2004/05/09
投稿数: 1
投稿日時: 2004-05-09 02:16
Strutsではありませんが、最近似たような問題で悩みました。
Netscape7.1では出ないダイアログがIEで出てしまうのであれば、その理由は
httpヘッダのcontentTypeでapplication/pdfの後ろにcharset=xxxxが付いて
しまっているからかも知れません。私の環境では、文字列のエンコーディングに
デフォルトのキャラクタセットを使っている場合はこの現象が起きませんでした。

余計なことをしてくれるのはjasperです。tomcat-devのMLで開発者に問い合わ
せたところ、「それは仕様だ」と言われました。(外人に英語圏以外の事情を説
明するのは難しい)

おそらくサーブレットで書けばこの現象は回避できます。Strutsの事情はよく
分かりませんが、文字コードをjasperのデフォルトに合わせてやるとうまくい
くと思います(この辺のことはhttp://jamy.to/itext/に書きました)。

iTextで動的にPDFを生成する場合、ByteArrayOutputStreamを使うと思いますが、
ここに書き込んだ後size()メソッドでサイズが取得できます。


[ メッセージ編集済み 編集者: takegata 編集日時 2004-05-09 02:17 ]
1

スキルアップ/キャリアアップ(JOB@IT)