Home > PHP

PHPからPDFファイル生成

2010.06.28 15:33
  1. PHPからPDFファイルを生成する(アルファベット)
  2. PHPからPDFファイルを生成する(日本語)
 PDFファイルの使い道って今いちわからない私です。というのも別にWeb上のテキストで見れればいいじゃないか...というところで、何もPDFファイルじゃなくても情報は伝わるでしょ...といいたいところですが、お役所手続きのようにPDFファイルが好きな方々が沢山おられるみたいです。
 PDFファイルのメリットは、以下のようになっています。
  • PDFファイルは無償のソフトで閲覧できるため誰でも無料でファイルを開くことができる。
  • PDFファイルはパスワードによるロックをかけたりすることができる。
  • PDFファイルは軽い。
 ツッコミどころは沢山あるのですが、ファイルの改竄という意味ではお役所的には使い心地がいいのかもしれません。(改竄されるようなファイルをネットワーク上で簡単にやりとりするんじゃないよ。)
 私も仕事上必要に迫られたので、ちょっと勉強を。そんなわけで使い方を紹介します。
 
 PDF+PHP+MySQLという組み合わせで様々なPDFファイルを作成したいという際には実に沢山の方法があるようです。しかし今現在のところFPSDというフリーランスの拡張クラスを使うのが一番使いやすくわかりやすいみたいです。PDFlibとかライセンスもののライブラリーもありますが使い方が全然わからないし情報もないというわけでそんなの誰も使いません。ですので、FPDFを使ってください。(配布先のOliver氏に感謝してください。彼はjapanese.phpの管理者です。)

ダウンロードと入手

 FPDFを入手するには以下のサイトからダウンロードします。
 再配布してもよいそうなので、オムニオラボから直接ダウンロードしてもいいです。
 ダウンロードしたら適当な場所に解凍します。
fpdf16.zip 
|-- FAQ.htm
|-- doc[D]
|-- font[D]
|-- fpdf.css
|-- fpdf.php
|-- histo.htm
|-- install.txt
|-- license.txt
`-- tutorial[D]
 というディレクトリとファイルが展開されますが、FAQ.htm、doc[D]、fpdf.css、histo.htm、install.txt、license.txt、tutorial[D]は特に必要ないので後から削除しても大丈夫です。コアになるのはfpdf.phpのみです。(fontも必要ですが...。)

インクルードパスに加える

 展開されたfpdf.phpは、基本的にはどこにおいても構いません。置いた場所から読み出せばいいわけですがせっかくなのでinclude_pathに加えておくことをおすすめします。
1. 上記で展開したファイルすべてを/usr/local/lib/php5/includes/以下にコピーまたは移動する。
2. php.iniのinclude_pathに
include_path = ".:/usr/local/lib/php5/includes
というように付け加えます。
3. Apache2の再起動。
 私の環境では/usr/local/libまでしか存在しなかったので、それ以下のディレクトリを手動で作成しました。またパーミッション関係ですが、ディレクトリは755、ファイルは644で大丈夫です。オーナーとグループはroot:rootで。
 正しくインクルードパスが設定されていればエラーはでません。
<?
require ("fpdf.php");
print "OK<br />\n";
?> 
こんな感じで簡単にテストしてみてください。

 私のサーバー環境では、
Fatal error: Allowed memory size of 262144 bytes exhausted (tried to allocate 77824 bytes) in /usr/local/lib/php5/includes/fpdf.php on line 672
メモリが足りないぞ...みたいなことを言われましたので、php.iniのmemory_limitを-1にしておきました。
;memory_limit = 16MB (コメントアウト)
memory_limit = -1
 この設定はPHPが使用するメモリの制限を切ってしまっているので、もし変なスクリプトを走らせるとごっそりとメモリをもっていかれるのでご注意。

簡単なコード

 文字列をPDFファイルとして出力するだけの最も簡単なコードを書いてみます。
<?php
require('fpdf.php');

//FPDFオブジェクトを生成
$pdf=new FPDF();

//ドキュメントの属性を指定
$pdf->SetAuthor('omnioo.com');
$pdf->SetTitle('test_PDF');

//ドキュメント全体のフォントを指定
$pdf->SetFont('Helvetica','',15);
$pdf->SetTextColor(50,50,50);

//ページの設定
$pdf->AddPage('P');
$pdf->SetDisplayMode(real,'default');
$text = "Here, It can write Alphabet only !";
$pdf->Write(5,$text);

//ドキュメントを出力
$pdf->Output('example1.pdf','I');
?>
となります。ちょっと説明すると、

先ほどインクルードパスで設定したFPDFのモジュール(というかクラス)本体を呼び出します。インクルードパスなのでrequire('fpdf.php');だけで/usr/local/lib/php5/includes以下に行ってくれます。
require('fpdf.php');
FPDFオブジェクトを作成します。ここまでがPDFファイル作成の基本中の基本です。
$pdf=new FPDF();
次に著作者と生成するドキュメントのタイトルを設定します。テストコードなのでアルファベットだったら何でもいいです。
$pdf->SetAuthor('omnioo.com');
$pdf->SetTitle('test_PDF');
フォントや文字色をあらかじめ設定しておきます。フォントの設定では、フォントファミリーとその形状(boldとか)文字の大きさを指定します。ここではHelveticaのレギュラー(パラメーターなし) で15pxの文字サイズを指定しています。また文字色はRGBで指定できます。(たぶん#000000みたいな16進数は残念ながらダメ)ここでは適当なグレー
$pdf->SetFont('Helvetica','',15);
$pdf->SetTextColor(50,50,50);

いよいよPDFファイルを生成するわけですが、新規でPDFファイルを生成するには、$pdf->AddPage('P');というように設定します。取るパラメーターはPとLで、
  • P または Portrait(縦)
  • L または Landscape (横)
という意味です。 何も指定しなかった場合はP(縦)になります。
$pdf->AddPage('P');
PDFビューアで表示する際の見え方を設定します。ここでは実寸表示(100%)を指定しています。いろいろなパラメータがあるのでマニュアルで調べてみてください。(普通はこの設定で問題ないと思います。)
$pdf->SetDisplayMode(real,'default');
適当なテキストを用意します。ここではアルファベットだけにしてください。日本語を設定すると、まだその設定をやっていないので文字化けします。
$text = "Here, It can write Alphabet only !";
上記の文字列を行間5pxでPDFファイルとして書き出すというクライマックスです。
$pdf->Write(5,$text);
最後にこれまでの設定でもってファイル出力します。
$pdf->Output('example1.pdf','I');

 ここまででいい感じでPDFファイルが出力できたと思います。それぞれのメソッドに関するマニュアルは以下からダウンロードするか、こちらをどうぞ。FPDFリファレンス(日本語版)
(英語圏の人は楽でいいですね。日本語の場合はこれから別途設定がまた必要なのです。しかも日本語表示は文字コードSJIS以外ではダメだそうで...。。)






プロフィール



  • Name :: 山上オサム ♂(39)
  • Hobby :: 武術
  • Work :: Web Designer