8年の月日が流れましたが、FPDF を TCPDF に変えても、FPDI が自動的に全て処理するので、TCPDF のプラグインのような形で動作します。
▼ main ではこんなかんじ
require_once("../common/tcpdf_include.php");
require_once("../../fpdi/fpdi.php");
require_once("../common/common.php");
require_once("model.php");
<?php
// ***********************************************
//
// 部 品 名 : モデル
// プログラム名 : 社員一覧印刷
// 作 成 者 : lightbox
// 作 成 日 : 2014/06/06
//
// 概要 :
// 印刷処理の為のテンプレート
// ここでは、プログラム固有の処理を定義します
//
// ***********************************************
// ***********************************************
// データベース読み出し
// ***********************************************
function query() {
global $connect,$row,$SEARCH_DATA;
$pdf = new FPDI(
"L",
PDF_UNIT,
"A4",
true,
"UTF-8",
false,
false // PDF/A モード
);
# PDF を読み込んでページ数を得る
$pagecount = $pdf->setSourceFile("Book1.pdf");
# ページ番号より ID を取得する
$tplidx = $pdf->ImportPage(1);
//**********************************************************
// 設定
//**********************************************************
$pdf->setFontSubsetting(false);
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pdf->SetFont('meiryo001', '', 12);
// デフォルトが true なので、デバッグ時に混乱しないように false に設定
$pdf->SetAutoPageBreak(false);
$pdf->AddPage();
// テンプレートの適用
$pdf->useTemplate($tplidx);
// AddPage 実行後に取得する
$query = apply_value("select.sql");
$result = $connect->query($query);
$counter = 0;
$cur_position = print_header( $pdf );
while ($row = $result->fetch_array(MYSQLI_BOTH)) {
$counter++;
if ( $counter > 20 ) {
$counter = 0;
$pdf->AddPage();
// テンプレートの適用
$pdf->useTemplate($tplidx);
$cur_position = print_header( $pdf );
}
user_text( $pdf, 10, $cur_position, $row['社員コード'] );
user_text( $pdf, 28, $cur_position, $row['氏名'] );
$cur_position = user_text( $pdf, 63, $cur_position, number_format($row['給与']), 20, 0, "R" );
}
// ブラウザへ PDF を出力します
$pdf->Output("syain.pdf", "I");
// 実際の SQL の結果の情報を返します
return $result;
}
// ***********************************************
// ヘッダ印字
// ***********************************************
function print_header( $pdf ) {
$page_info = $pdf->getPageDimensions();
$cur_position = $page_info['tm']; // トップマージン
$cur_position = user_text( $pdf, 125, $cur_position, "社員マスター一覧表" );
$cur_position = user_text( $pdf, 0, $cur_position, "" );
user_text( $pdf, 10, $cur_position, "コード" );
user_text( $pdf, 28, $cur_position, "名前" );
$cur_position = user_text( $pdf, 63, $cur_position, "給与", 20, 0, "R" );
return $cur_position;
}
?>
TCPDF で動作している場合 FPDI を 読み込んで、TCPDF クラス をそのまま FPDI クラスに変更し、既存 PDF を読み込んで、AddPage する毎にテンプレート使用( $pdf->useTemplate($tplidx) ) を実行するだけです。 本来の目的であるフォームのオーバーレイを想定して、枠線だけを持つ PDF を Microsoft Excel で作成して重ねました。 実行結果 FPDI のドキュメントはこちらを参照 ▼ 以下は TCPDF 用の実行環境設定用のファイルです( require_once します )
<?php
// Include the main TCPDF library (search for installation path).
$path = "C:\user\web\tcpdf";
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
require_once('examples/config/tcpdf_config_alt.php');
require_once('tcpdf.php');
?>
▼ 以下は、印字用の関数です( 今回の FPDI に関するでページあふれ対応はしていません )
# **********************************************************
# テキスト印字
# **********************************************************
function user_text( $pdf, $x, $y, $text, $w=1, $h=0, $p="L" ) {
text( $pdf, $x, $y, $text, $w, $h, $p );
return $y;
}
# **********************************************************
# 位置指定印字
# ※ 改行コードで自動改行
# ※ ページあふれで自動改ページ
# ※ 内部印字位置は保存( 元に戻す )
# **********************************************************
function text( $pdf, $x=0, &$y=0, $txt='', $w=1, $h=0, $p="L" ) {
$a = $pdf->GetX();
$b = $pdf->GetY();
$hm = $pdf->getPageHeight( );
$dm = $pdf->getPageDimensions();
$tm = $dm['tm'];
$bm = $dm['bm'];
$txt = str_replace( "\r","", $txt );
$data = explode("\n", $txt );
if ( count( $data ) > 1 ) {
for( $i = 0; $i < count($data); $i++ ) {
if ( $i == 0 ) {
$pdf->SetXY( $x, $y );
}
else {
$y += $pdf->getLastH();
if ( $y >= ( $hm - $tm - $bm ) ) {
$pdf->AddPage();
$y = $tm;
}
$pdf->SetXY( $x, $y );
}
$pdf->Cell($w, $h, $data[$i], 0, 0, $p);
}
}
else {
$pdf->SetXY( $x, $y );
$pdf->Cell($w, $h, $txt, 0, 0, $p);
}
$y += $pdf->getLastH();
$pdf->SetXY($a,$b);
}
TCPDF に関しては、『TCPDFマニュアル(勝手訳)』といのが検索するとすぐ見つかります。これでほぼ OK です。 関連する記事 TCPDF で非埋め込み型として『メイリオ』を使う手順 ▼ 以下は古い記事です 2006-11-26 の記事 PDF は、基本ブラウザに埋め込まれるので、Webアプリの印刷処理として最適です。 多少制限もありますが普通に日本語使えますし。知らないと損しますね。 詳細は↓ http://winofsql.jp/VA003334/phpVarious061126183640.htm 一つのパッケージでは無いので構成するのにそれなりの知識が必要になります。ソースも少し書き換えが発生します。 既存のPDF 利用の部分は日本語マニュアル無いみたいですし・・・ でもまあ、プログラマなら理解できる程度の英語です。















※ エキスパートモードで表示しています
アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります


















