FPDFを使ってPDFにページ番号を振る
某アプリケーションのページ番号を振る機能が貧弱だったので、PHP で PDF ファイルを出力するライブラリ FPDF を使って作ってみた。
もとからある PDF を取り込む場合は FPDI というライブラリを使う。
バージョンはそれぞれ FPDF 1.6, FPDI 1.4.2 を使う。(FPDF 1.7 はフォントが見つからないと言われて動かない)
<?php define('FPDF_FONTPATH', dirname(__FILE__) . '/fpdf/font/'); require 'fpdf/fpdi.php'; // ページ番号からページ番号の文字列を生成する関数 // 1 => i, 2 => ii, 3 => iii など $numberingFunction = 'romanNumeral'; $pdf =& new FPDI(); // SetXY() で座標を指定するときに影響を受けるのでゼロ // 改ページしないようにする $pdf->SetMargins(0, 0, 0); $pdf->SetAutoPageBreak(false); $pagecount = $pdf->setSourceFile($argv[1]); $start = isset($argv[2]) ? $argv[2] : 1; // 開始ページ番号 // 各ページを読み込んでページ番号を付けていく for ($i = 1; $i <= $pagecount; $i++) { $tplidx = $pdf->importPage($i, '/MediaBox'); $pdf->addPage(); $pdf->useTemplate($tplidx); $pdf->SetFont('Times', '', 10); $pdf->SetTextColor(0, 0, 0); $pageNum = $numberingFunction($start + $i - 1); // 座標は [mm] で指定する。用紙がA4であることを想定 $x = (210 - $pdf->GetStringWidth($pageNum)) / 2; $y = 297 - 20; $pdf->SetXY($x, $y); // 第1引数は行の高さ [pt] $pdf->Write(10, $pageNum); } $pdf->Output('a.pdf', 'F');
使用例
% php addpagenumber.php input.pdf