2007年6月12日火曜日

PHPからのPDF出力でハマる.

 また珍しく平日にメモ.

 PHPからPDF出力すると言えば

  ・PDFLib
  ・FPDF
  ・Zend Framework

 あたりが代表格かと思います.
 Zend FrameworkでのPDF出力はまだ試してませんが(正確には0.xの時に上手く動作させる事が出来ませんでした orz)、PDFLibもFPDFも基本的にはPHPのコードからPDFを吐き出す事に変わりありません.

 そして出力時の問題で有名なのがIEとsessionの問題.
 PHPでsessionを使っている場合、普通にPDF出力するとIEではまったく表示されない状態になります(画面真っ白).
 その為、IEを考慮する場合に於いて、sessionを使ってるコードからPDFを吐き出す時は

  session_cache_limiter('private')

 をsession_start前に宣言してやる必要があります.
 当たり前ですがここまでは知っています.

 んが!
 まさかOpera9でも同じ状況になるとは?! orz
 そんな事まったく知らず「あれ?何で?何で?何で出ないの?」と大ハマり.
 Opera8まではinlineで表示できなかったので、Operaの事はまったく気にしてませんでしたよ.
 まったく、相変わらずOperaは色々と面白い事をやらかしてくれます.
 Opera8→9で、JavaScriptからIFrame内をprintした時の挙動も違いますしw
 今更ですが、Opera9をもう少し触ってみる必要がありそうです.

 そしてもう一個.
 原因は良く分かりませんが、Safariで同じ様にPHP→PDF出力すると、場合によって

  ファイルの最初に%PDF- がありません。

 と言うエラーが出ます(Ver 1.3.2でしか確認してません).
 出ますと言うか出てしまって、またしてもハマりました orz
 未だに原因が分からないんですが、取り敢えず

  header('Content-Length: [バッファサイズ]')

 を送出しなければこのエラーが起きない事が判明.
 なんだかなぁ.
 対処出来てるのはいいんですが、非常に気持ち悪いです.
 どっかでコード間違えてるんだろうか?
 でもSafari以外で出ないんだよなぁ orz

 しかも、今日『Windows版のSafari』が開発中である事が発表されました.
 iPodでiTunesが普及した様に、抱き合わせ戦法でWindowsにSafariが普及した場合、無視できない存在になるかもしれません.
 正直もうブラウザは増えなくていいですから orz

※現状Windows版Safariはまともに動きません

0 件のコメント: