VISH,Inc.

FPDFで決まった単位でのページ番号を表示させる

phpのFPDFを使ってPDF出力をする場合のに、
ページ番号を表示させるには

// 現在のページ番号を取得
$page_no = $pdf->PageNo();
// 「現在のページ番号/総ページ数」を表示
$pdf->Cell(0, 4, $page_no.'/{nb}', 0, 0, 'C');

などのようにして出力すれば良いのですが、
ある決まった単位(管理番号ごとなど)で
ページ番号を1から始める、つまり
1ページ目:1/2
2ページ目:2/2
3ページ目:1/4   ←単位の切り替わり
4ページ目:2/4
5ページ目:3/4
・・・
のようにする方法を紹介します。

まず、FPDF本体のfpdf.phpファイルを修正します。
(1)クラスのメンバ変数に総ページ数を保持する配列を定義します。

var $unitPageNo;        //Unit page number

(2)function FPDFメソッド内でメンバ変数を初期化しているところで$unitPageNoの初期化も一緒に行ないます。

$this->unitPageNo = array();

(3)総ページ数をセットするメソッドを追加します。

function SetUnitPageNo($page_no, $unit_page_no)
{
    // 指定ページ番号($page_no)に表示する総ページ数($unit_page_no)をセット
    $this->unitPageNo[$page_no] = $unit_page_no;
}

(4)function _putpagesメソッド内の「if(!empty($this->AliasNbPages))」の条件分岐内の処理を以下に置き換えます。

for($n=1;$n<=$nb;$n++){
    $this->pages[$n]=str_replace($this->AliasNbPages, $this->unitPageNo[$n], $this->pages[$n]);
}

あとは、FPDFクラスを呼び出している処理で以下のことを行ないます。
(5)総ページ数を保持する変数を定義し、決まった単位(管理番号など)が変わるタイミングで値を0に戻します。

$unit_page_no = 0;

(6)ページ番号を表示をしている箇所を以下のようにして、総ページ数をセットします。

$unit_page_no++;
$pdf->Cell(0, 4, $unit_page_no.'/{nb}', 0, 0, 'C');
for($i = 0; $i < $unit_page_no; $i++){
    $no = $pdf->PageNo() - $i;
    $pdf->SetUnitPageNo($no, $unit_page_no);
}

これで、決まった単位ごとのページ数が出力されるようになります。

blog.vish.co.jp

Leave a Reply


VISH企業サイト
サイトマスター.jp
モバイルサイト制作・構築