TEDIA会員に登録したメールアドレスとパスワードを入力してください

メールアドレス:

     パスワード:


パスワードを忘れた方はパスワードの確認を行ってください。

TEDIA会員へのご登録がお済みで無い方はこちらで登録ができます


>> テクノロジーポータル TEDIA トップページへ戻る <<

Think IT Software Developer's Think IT Find-IT 失敗しないソフト選び Find-IT TEDIA テクノロジーポータル TEDIA インストールマニアックス2008 インストールマニアックス2008

TEDIA SponsorsOpen 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が実際に作成されていることを確かめる。


前のページ     1    2    3    4    5    次のページ

Copyright © 2008 Ziff Davis Enterprise, Inc.
Originally appearing in the U.S. Edition of Dev Shed. All Rights Reserved.