Open Source Web Development Tutorials - Dev Shed
PHPのPDF作成ライブラリ
(2009/01/30公開)
ブラウザ表示用のPDF文書を作成する
コマンドプロンプトでPDF文書を作成することができるようになったが、次はブラウザ用のPDF文書を作ることにしよう。
下のコードをコピーして、Webサーバーにファイルとして保存しよう。
<?php
# pdf_example3
# for the browser
// create a new pdf document
$pdf = pdf_new();
$filename = 'c:pdf_example3.pdf';
pdf_open_file($pdf、 $filename);
// start a new page (Letter size)
pdf_begin_page($pdf、 612、 792);
// setup font and print hello world
pdf_set_parameter($pdf、 'FontOutline'、
'Arial=c:windowsfontsarial.ttf');
$font = pdf_findfont($pdf、 "Arial"、 "host"、 1);
pdf_setfont($pdf、 $font、 24);
pdf_show_xy($pdf、 "pdf_example3 for the browser"、 50、 680);
// done
pdf_end_page($pdf);
pdf_close($pdf);
pdf_delete($pdf);
// send it to browser
header("Content-type: application/pdf");
header("Content-Disposition: inline; filename=pdf_example3.pdf");
readfile($filename);
unlink($filename);
?>
このコードの最初の部分は、コマンドライン版で「hello world」の例を作ったときと全く同じものだ。
PDFファイルができたらならば、このコンテンツをブラウザに渡すだけでよい。
header("Content-type: application/pdf");
header("Content-Disposition: inline; filename=pdf_example3.pdf");
readfile($filename);
この、「c: pdf_example3.pdf」というファイルは一時的なものなので、後ほどどこのディレクトリにでも保存することができる。ただ、Webサーバーにおいてそのディレクトリが書き込みパーミッション指定されているかは確認する必要がある。このファイルがブラウザに渡された後は、このファイルを次のように消去することができる。
unlink($filename);
ではこのページをブラウザで開いてみよう。ブラウザ内にPDFファイルが次のように表示される。
トラブルシューティング
下にユーザーがよく直面するエラーの説明と対策を加えておこう。
もし下のエラーメッセージが出たなら:
PHP Warning: PHP Startup: pdf: Unable to initialize module
Module compiled with module API=20060613、 debug=0、 thread-safety=0
PHP compiled with module API=20060613、 debug=0、 thread-safety=1
These options need to match
これはつまり、作動しているPHPのバージョンがスレッドセーフ版であり、php_pdf.dllが非スレッドセーフ版であるということだ。スレッドセーフ版のphp_pdf.dllをPHPの公式サイトからダウンロードすれば、この問題は解消する。
もし下のエラーメッセージが出たなら:
PHP Fatal error: Call to undefined function pdf_new() in helloworld_pdf.php on line 3
つまり、php_pdf.dllが読み込まれていないということだ。php.iniをチェックし、下の行が追加されているか見てみよう。
extension=php_pdf.dll
上の行が存在しているにもかかわらずこのエラーが出る場合、それはおそらく使用中のPHPのバージョンとphp_pdf.dllの互換性の問題ということになる。ネット上には非常に多くのバージョンのphp_pdf.dllが散在しているため、いくつか試しにダウンロードしてみて、動くかどうか確認してみるとよいだろう。
旧バージョンのPHP用のコンパイル済みphp_pdf.dllのいくつかはpecl4win.php.netからダウンロードできる。
もし下のエラーメッセージが出たなら:
PHP Fatal error: Uncaught exception 'PDFlibException' with message
'Couldn't open font file 'c:windowsfontsarial1.ttf' for reading (file not found)' in helloworld_pdf.php
これはフォント名のスペルを間違ったか、あるいはそのフォントが使用中のWindowsのフォントフォルダに存在しないということだ。
もし下のエラーメッセージが出たなら:
PHP Fatal error: Uncaught exception 'PDFlibException' with message
'Function must not be called in 'object' scope' in helloworld_pdf.php
出力PDFファイルがAdobe Acrobat Readerで開かれてないか確かめる。もし開かれているのなら、一旦閉じてからもう一度実行すれば解決するだろう。
最後に、仮に上に挙げた「hello world」の例がコマンドラインでは問題なく実行できるものの、ブラウザ上で走らせると何も表示されないとしよう。
その場合はまず、php.iniでエラー報告をonにして、エラーメッセージが表示されないか見てみよう。
また、一時PDFファイルのディレクトリがWebサーバーによって書き込みパーミッションが設定されているか確かめる。上の例では「'c:pdf_example3.pdf」としているので、c:が書き込みパーミッション設定になっているかどうかを見る。
またunlink($filename)の行をコメントアウトして、ページを再読み込みし、pdf_example3.pdfが実際に作成されていることを確かめる。
Copyright © 2008 Ziff Davis Enterprise, Inc.
Originally appearing in the U.S. Edition of Dev Shed. All Rights Reserved.









