Java

HTTPレスポンスでPDFをプレビューする

2019年6月19日

このページに書いてあること。

Javaアプリの開発で、PDFを操作する機会があったのですが、HTTPのレスポンスにPDFをセットすると勝手にダウンロードしてしまい、プレビュー表示ができなかったので解決策のメモ

  • 発生した問題
  • 解決方法

背景:

Jasper Reportというライブラリを使ってPDFをJava内で生成、HTTPのレスポンスとして返却という仕組みを作っていたのですが、ブラウザでURLにアクセスすると必ずダウンロードされてしまいます。期待する動作は、一旦ブラウザのプレビューで見たいというものです。

Edgeで試しました。非常に単純な話です。

HTTPのレスポンスタイプに指定する情報が誤っていただけでした。

修正前:

response.setContentType("application/octet-stream");

response.setHeader("Content-Disposition", "attachment; filename=" + "sample.pdf");

この記述では、ブラウザの判断は、application/octet-streamにより「なんのファイルかわからないけどよろしく!」という意味になります。Edgeなどはたいていダウンロードするようです。

また、Content-Disposition:attachment; filename=sample.pdfにより、「sample.pdfの名前で保存してね!」という意味なります。

なるほど。

以下のように直すことで、プレビューできるようになりました。

response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline");

このあたりの情報は、以下のサイト様で確認することができました。

https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Content-Disposition

###############お知らせ################
ブログランキングのITカテゴリに参加してみました。
この記事が役に立ったなどお力になれたら、 このバナーを押していただけると嬉しいです。

#####################################

-Java