PHPでPDFを出力しようとして はまる。
PHPでPDFを出力方法には大きく2通りあるようで、1つはベタに「PDFファイルを自力で書き上げる」という方法。これはFPDFというのがあるらしい。
しかしLINE文とPAINT文で絵を描くようなことは、もうしたくないっすーーッ!!
そんな僕にはmPDFってのがありました!
なんとHTMLを(ほぼ)そのままPDFに変換してくれるというスグレモノ。
ここで手抜きをしてるくらいなので、作り方もやたらと簡単で、
mpdfを適当な位置に持ってきておいて
include("mpdf/mpdf.php"); $html = file_get_contents("http://www.google.com"); $mpdf=new mPDF('sjis', 'A4','8'); $mpdf->WriteHTML($html); $mpdf->Output(); exit;
とか書くだけでおしまい。もうベスト過ぎっ!
ではどこではまったのかというと、むしろPHPな部分で・・・。
PHPの実行結果が得られない
file_get_contents()で指定するのをPHPにして、その出力結果を印刷したい。同じディレクトリにあるファイルなので
file_get_contents(結果表示.php);
みたいにしようとする。すると、
echo "結果だよ!";
などと、おちゃめにソースを表示してしまうのでした。なんでだよー、と思ったところ、どうやらfile_get_contents()というのはhttp://〜で書かないと実行結果が得られないらしい。
file_get_contents()をhttp://~で指定するとエラーが出る
ファイル名だけじゃfopen的なことをしちゃうんでしょ?じゃあわかったよ、http://で指定しますよって思ったら、今度は
「failed to open stream なんちゃらかんちゃら」
というエラーが出る。ファイルはあるんだよほらここに!と直接入力すると表示されるURLなのだけど、file_get_contents()の中でそのURLを指定するとエラーになる。
これ、サーバーとして許可するかしないかの設定があるらしい。
php.iniのallow_url_fopenをOnにしなければ、このようになるみたい。
じゃあOnにすればいいやん!と思うのだけど、セキュリティを考えるとあまりオススメできない設定のよう。
あとはPEAR:HTTP_Requestを使う方法かな。これはそういう設定要らないのかなぁ・・・。もごもご。
すでに「結果表示.php」はできているためそれを叩けばいいだけやん! って楽勝思考でいたのだけれど、PDF変換クン.phpのなかで出力結果を作るようなものに作り替えないといけないようだなぁ・・・。
制作済みの動的なページを、そのページに配置した「PDFで出力!」ボタンからPDFにする方法って、なんかないものかなぁ・・・。
手軽に。