2

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 のビューアーではなく Adob​​e の 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 ファイルを個別にダウンロードする必要はありません。

4

3 に答える 3

2

http://itextpdf.com/examples/iia.php?id=173に従って、コンテンツの長さを設定するのを忘れています。response.setContentLength(baos.size());前に追加してみてくださいServletOutputStream out = response.getOutputStream();

于 2013-05-14T21:42:35.320 に答える
-1

私はこれに対する答えを持っています.PDFファイルを新しいタブで開くことで成功しました.開発の観点からは、クリックするとボタンまたはリンクターゲットのいずれかが無効になる必要があります.eg(target = _blank)

于 2014-10-21T11:25:17.393 に答える