lowagie/iTextPDF を使用して Java で PDF を生成していますが、Firefox と Chrome で出力を表示する際に問題がありますが、IE8 では問題なく表示されます。
Firefox と Chrome は、次のように意味不明に表示されます。
%PDF-1.4 %���� 2 0 obj <>ストリーム x���1B1C��#@�0#��Tm>}Zh�nO?8���1�a���غ�y�ӓB ���$��:9XC�a.�/f{���$� o�-$?Ө � ^�c�/��'E�j��}WT�/��Y< ?� �5* endstream endobj 4 0 obj <>>>/MediaBox[0 0 612 1008]/Rotate 90>> endobj 1 0 obj <> endobj 3 0 obj <> endobj 5 0 obj <> endobj 6 0 obj <> endobj Xref 0 7 0000000000 65535 f 0000000379 00000 n 00000015 00000 N 0000000467 00000 n 0000000211 00000 N 0000000530 00000 N 0000000575 00000 Nトレーラー<]/情報
サーブレット コードの一部を次に示します。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Document reportPDFDocument = (Document)generateReport(request,conn,baos);
PdfWriter.getInstance(reportPDFDocument, baos);
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/pdf");
response.setHeader("Content-disposition","inline; filename=PrintedSchedule.pdf");
ServletOutputStream out = response.getOutputStream();
baos.writeTo(out);
out.flush();
Firefox の更新、PDF プラグインの更新、および Firefox のビューアーではなく Adobe の PDF ビューアーを使用するように設定されていることを確認しました。
テストとして、次の行を変更しました。
から:
response.setHeader("Content-disposition","inline; filename=PrintedSchedule.pdf");
に:
response.setHeader("Content-disposition","attachment; filename=PrintedSchedule.pdf");
Internet Explorer は、ダウンロードされているのが PDF であることを認識しているようです。IE で次のようなポップアップ ウィンドウが表示されます。
このファイルを開くか保存しますか:
名前: PrintedSchedule.pdf タイプ: ADobe Acrobat ドキュメント
しかし、FireFox はそれが 'htm' ドキュメントであると判断し、次のように表示します。
開くことを選択しました:
HTMLドキュメントであるPrintedSchedule.pdf
Firefox では、Adobe Reader を選択して開くと、問題なく動作します。しかし、タイトル バーで、ファイル名の末尾に「.htm」が追加されていることに気付きました。
これは問題の手がかりになるでしょうか?もしそうなら、どうすれば Firefox に強制的に PDF として認識させることができますか? ユーザーは、PDF がポップアップ ウィンドウではなくブラウザーに表示されることを望んでおり、PDF ファイルを個別にダウンロードする必要はありません。