2017.07.20 システム
Edge でPDFが開けない!
こんにちは、システムエンジニアの大貫です。
今回開発している案件で、ハマったので、情報共有のため、ブログに残したいと思います。
PDFをphpで開く際に、以下のようなコードを書くかと思います。
header(‘Content-Type: application/pdf’);
header(‘Content-Length: ‘ . filesize($strPdfFileName));
header(‘Content-Disposition: inline; filename=’ . $strPdfFileName);
header(‘Cache-Control: public’);
header(‘Pragma: public’);
readfile($strPdfFilePass);
?>
検証のタイミングで発覚したのですが、IEやFirefox、Chromeでは問題なくPDFビューワーが開き、正常にPDFが開けるのに・・・
Edgeで開こうとすると、白い画面が開き、一瞬読み込みが始まったようなステータスバーが出て動きが止まってしまう。。。
しかも、その間、別のタブで、別のページを開こうとしても、読み込み中のまま返ってこなくなってしまいました。
また、「Content-Type: application/pdf」の形式ではなく、直接サーバ上にファイルを置き、Edgeで「http://xxxxx/xxx.pdf」のように直接開くと、問題なく開けました。
・・・とすると、何か記述が足りないのかと思い、色々なサイトを調べたり、ヘッダー情報を確認したり、コードを修正してみるものの
・・・原因が分かりませんでした。。。
そんな中、10分以上過ぎた頃・・・
さっきまで固まっていたEdgeにPDFが正しく表示されておりました!
動きが止まってしまういうよりは、裏側で、PDFを一生懸命読み込んでいたみたいです。
ちなみにそのPDFファイルは、1000ページ10MBくらいのファイルだったのですが、10分位読み込みにかかったので、試しに10KBのPDFをダウンロードしてみたところ、
一瞬で表示されました!
このことから、記述には問題がなく、「Content-Type: application/pdf」の形式では開くのに時間が掛るような不具合がEdgeにあるのでは?
と思い調べてみると・・・
明確なドキュメントは発見できなかったのですが、EdgeのPDFビューワーに問題があり、「Content-Type: application/pdf」で
開けないといった旨の記事を見つけました。
お客様から許可をいただき、Edge場合は、「PDFビューワーで表示」ではなく「PDFをダウンロードする」という仕様に変更させていただき
無事対応できました。
// MS Edgeの場合
header(‘Content-Type: application/force-download’);
header(‘Content-Length: ‘ . filesize($strPdfFileName));
header(‘Content-Disposition: attachment; filename=’ . $strPdfFileName);
readfile($strPdfFilePass);
?>
何かの参考になれば・・・。
▼参考サイト
https://connect.microsoft.com/IE/Feedback/Details/1621308