No.404


【PHP】【HTML】PDFファイルをブラウザで開く

今回はダウンロードさせたいんじゃないんだ…

 業務システムだと良くあるのが帳票をPDFファイルにして出力する機能。

 普通はローカルにダウンロードさせることが多いけど、たまにchromeでクリックしたときのように「WEB画面で見たい」という要求がある。プレビューとか。

 そんなときはHTTPヘッダを調整すれば万事OK。


HTTPヘッダの記述

 Content-Disposition の値によって挙動が変わる。

Content-Dispositionの値 挙動
inline 画面内部で開く
attachment ダウンロードさせる

 画像ファイルをダウンロードさせる仕組みなどはこれを使っているわけだ。

例:PDFファイルをブラウザで開かせる

$filename = '/foo/bar/hoge.pdf';
header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename="' . basename($filename) . '"');
header('Content-Length: ' . filesize($filename));

 ファイル名やファイルサイズは適当に書き換えてどうぞ。
 日本語ファイル名はrawurlencode()でエンコードしないと化けるので注意。
 ファイルサイズはなくても良いけど、つけて悪いことはないので是非つけよう。

例:PNGファイルをダウンロードさせる

$filename = '/foo/bar/hoge.png';
header('Content-Type: image/png');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
header('Content-Length: ' . filesize($filename));

 よくあるアイコンファイルダウンロードなイメージ。