先日、PHPでPDFを生成するTCPDFを使ったときにパソコンでは問題なくPDFが表示できるのに、スマートフォンだと表示できない現象が発生しました。下記にその対処方法を明記しておきます。
TCPDFでPDFを表示しようとすると
TCPDF ERROR: Some data has already been output, can’t send PDF file
などと表示され、PDFが表示できない場合があります。その対策として、「ob_end_clean()」を「$pdf->Output()」の前に入れると出力用バッファがクリアされて表示できるようになるという情報があります。
しかし、どういう訳だかパソコンのブラウザでは特に問題なく表示できるのに、スマートフォンのブラウザでは上手く表示できない現象が発生しました。今回この現象が発生したのはAndroid端末(iPhone系は未確認)で標準ブラウザでもGoogle Chromeでもダメでした。
その後、いろいろ試した結果、表示させようとしているページの拡張子に「*.pdf」を付けたら正常に表示されました!私の環境だけなのかわかりませんが、今回はこれで成功しました。
今回表示できなかったシステムはPHPのフレームワーク「CakePHP」を使っていたのですが、ここで表示しようとしているページは
http://hoge.com/users/pdf/abcd
といった感じのURLになります。CakePHPを利用すると上記のように拡張子無しでURLが生成されます。このURLを
http://hoge.com/users/pdf/abcd.pdf
と、いう感じに末尾に「*.pdf」を付けたら正常に表示されました。スマホのブラウザがなぜこのようなしようなのかなどは調べていませんが、同じような原因で悩んでいる人がいましたら、参考にしてみてください。結構悩んでしまいました(^^ゞ
PHPライブラリ&サンプル実践活用[厳選100] (Software Design plus) 本
価格¥2,728
順位404,478位
著WINGSプロジェクト, 山田 祥寛, 小林 昌弘, ほか
発行技術評論社
発売日2014/06/24