Skip to main content.

Monday, June 25, 2007

FPDFの利用(その3)mbfpdfの導入

前回の続きでFPDFを利用してのPHPからのPDFファイル出力についてです。今回はmbfpdfを使ってみます。

mbfpdfとはこちらのfpdfの導入編にも書きましたが、日本語(シフトJIS、EUC-JP)と中国語(GB,Big5)を扱えるFPDF拡張版(作者 airwhite氏)です。当サイトからもダウンロード(MBFPDF1.0b)出来るように置いておきます。

インストール
単純にmbfpdfを展開して、本家のfpdfをインストールしたフォルダに上書きでコピーすればいいです。(※fontフォルダを上書きコピーして、mbfpdf.phpを単純にコピーします。)jasjis_readme.txtによると、FPDF 1.51がターゲットだったようですが、ここでは、FPDFは1.53です。

基本的は使い方は以下のようになるようです。

  • require "fpdf.php" のかわりに require "mbfpdf.php" とします。
  • FPDFクラスを使うかわりに MBFPDFクラスを使います。
  • AddMBFont()メソッドで、利用するマルチバイトフォントを宣言します。
  • 文字列出力前に、SetFont()メソッドで、出力フォントを設定します。
  • EUC-JP -> SJIS 変換を自動的で行う場合は、25行目の$EUC2SJISの値をtrueに変えるか実行時に$GLOBAL['EUC2SJIS']をtrueに設定します。
(※以上、詳細は、mbfpdfを展開して、jasjis_readme.txt、exja.phpを参照して下さい。)

CSVファイルのデータ出力
前回と同じような処理ですが、出力するCSVファイルをEUCに変換して、mbfpdfを使って出力してみました。

サンプルで使用したCSVファイル(EUCデータ、このサーバ上)
上記データのPDFファイル出力の実行

CSVファイル(EUC)のデータ出力のPHPプログラム
以下、実際のプログラムです。
<?php 
require('mbfpdf.php'); 

//この帳票のクラス(MBFPDFを継承)
class PDFReport extends MBFPDF
{
    //
    //ページごとのヘッダ部分出力
    //
    function Header()
    {
        //ページごとのタイトル
        $this->SetFont(GOTHIC,'',11);

        //このソース自体はEUCで保存しています。
        $this->write(3,"国土交通省 街区レベル位置参照情報 横浜市中区");

        //ページごとの項目ヘッダ
        $this->SetFont(GOTHIC,'',11);
        $header=array('都道府県名','市区町村名','大字・町丁目','街区符号・地番','座標系番号','X座標','Y座標','緯度','経度');

        //文字が重ならないように改行
        $this->Ln(5);

        //上の項目名をそれぞれ出力
        foreach($header as $col){
            $this->Cell(30,7,$col,1,0,'C');
        }

        $this->Ln();
    }

    //
    // ページごとのフッタ部分出力
    //
    function Footer()
    {
        //下から1.5センチのところ
        $this->SetY(-15);

        //Arial イタリック 
        //$this->SetFont('Arial','I',9);

        //ページ番号
        $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
    }

    //
    // CSVファイル(EUC)からデータを一括で読み込み
    //
    function LoadData($file)
    {
        $handle = fopen($file,"r");
        while (($linedata = fgetcsv($handle, 120, ",")) !== FALSE) {
            $data[] = $linedata;
        }

        fclose($handle);

        return $data;
    }

    //
    // データを出力
    //

    function OutputTable($data)
    {
        $this->SetFont(GOTHIC,'',11);

        // データを1項目ずつ出力
        foreach($data as $row){
            $colCnt = 0;

            foreach($row as $col){
                //住所部分までは左詰め
                if($colCnt<3){
                    $ass = 'L';
                //数値データは右詰め
                }else{
                    $ass = 'R';
                }
                $this->Cell(30,6,$col,1,0,$ass);
                $colCnt++;
            }

            $this->Ln();
        }
    }
}

//帳票作成、出力
//オブジェクト生成
$pdf=new PDFReport('L');
$pdf->AliasNbPages();

//データ読み込み
$data=$pdf->LoadData('./14104_2006.csv');

//フォント設定
$pdf->AddMBFont(GOTHIC,'EUC-JP');

//ページ追加
$pdf->Open();
$pdf->AddPage();

//データ出力
$pdf->OutputTable($data);

//出力
$pdf->Output();
?>

関連サイト
本家サイト
日本語での情報交換を行うためのサイト
FPDI

FPDF + FPDI でPDF帳票を作成
PHP tools PDF関連情報

以上、作者の方々、いろいろな情報を公開されている皆様には大変感謝致します。ありがとうございます。

Webプログラミング関連記事