-
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
-
今回は write1DBarcode メソッドを使って 一次元バーコード を表示する方法について説明します。
一次元バーコード といえば商品などに付いている「JAN」「CODE39」「CODE128」のバーコードです。 ちなみに「JAN」は日本のみの呼称で「EAN」または「UPC」と呼ばれるそうです。
ここで write1DBarcode メソッドの引数について説明を記します。// write1DBarcodeメソッド public function write1DBarcode($code, $type, $x=null, $y=null, $w=null, $h=null, $xres=null, $style=array(), $align='') // $code : 印刷するコード // $type : バーコードのタイプ("C39", "C93", "C138", "EAN13", "EAN8"など) // $x : X位置(指定されたユーザの単位)(NULL:カレントのX位置) // $y : Y位置(指定されたユーザの単位)(NULL:カレントのY位置) // $w : 横幅(指定されたユーザの単位)(NULL:カレントのX位置から用紙出力の横幅MAXまで) // $h : 縦幅(指定されたユーザの単位)(NULL:カレントのX位置から用紙出力の縦幅MAXまで) // $xres : バーの最小幅(NULL:デフォルトで「0.4mm」) // $style : 出力オプションを配列で指定 // $style['border']:boolean:trueでボーダー出力 // $style['padding']:int:バーコード周囲の余白('auto':自動設定) // $style['hpadding']:int:水平方向の余白('auto':自動設定) // $style['vpadding']:int:垂直方向の余白('auto':自動設定) // $style['fgcolor']:color array:バーと文字色 // $style['bgcolor']:color array:背景色 // $style['text']:boolean:trueでバーコードの下にテキスト出力 // $style['label']:string:デフォルトのラベル // $style['font']:string:テキストのフォント名 // $style['fontsize']:int:テキストのフォントサイズ // $style['stretchtext']:int:出力テキストの伸縮(ストレッチ)モード // [0]: 不可 // [1]: 水平方向(必要な場合) // [2]: 水平方向(強制的) // [3]: 空白文字(必要な場合) // [4]: 空白文字(強制的) // $style['position']:string:横幅で指定されるセル上での水平配置 // ['L']: 左寄せ // ['C']: 中央揃え // ['R']: 右寄せ // $style['align']:string:横幅で指定されるセル上での水平配置 // ['L']: 左寄せ // ['C']: 中央揃え // ['R']: 右寄せ // $style['stretch']:boolean:trueでバー最小幅を計算上のMAXにする // $style['fitwidth']:boolean:trueでバーコードと余白幅を含めてフィットとさせる // (この指定がtrueの場合は$style['stretch']がfalseとなる) // $style['cellfitalign']:バーコードセルの位置指定 // ($style['fitwidth']がtrueで$style['position']が未設定の場合のみ有効) // ['L']: 左寄せ // ['C']: 中央揃え // ['R']: 右寄せ // $align : 出力後のカーソルの移動方法を指定 // [T]: 右上へ移動 // [M]: 右中央へ移動(既定) // [B]: 右下へ移動 // [N]: 次の行へ移動
それでは write1DBarcode メソッドを使用したバーコードの表示の簡単な例を以下に記します。
■write1DBarcode メソッドを使用したバーコードの表示
以下の例では CODE39, CODE39 + CHECKSUM, CODE128, EAN8, EAN13, CODABAR のバーコードを表示しています。
<?php require_once('../tcpdf/tcpdf.php'); // クラス生成 $pdf = new TCPDF(); // デフォルトで用意されている日本語フォント[小塚ゴシックPro M] $strFont = "kozgopromedium"; // ヘッダ・フッタ出力設定(特にいらないが) $pdf->setPrintHeader(false); $pdf->setPrintFooter(false); // 本文の日本語フォント[小塚ゴシックPro M] $pdf->SetFont($strFont, "", 10); // 新しいpdfページを追加 $pdf->AddPage(); $pdf->Write(0, '一元バーコード表示テスト', '', false, '', true); $pdf->Ln(); // define barcode style $style = array( 'border' => true, //枠線有 'hpadding' => 'auto', //水平空白埋め自動 'vpadding' => 'auto', //垂直空白埋め自動 'fgcolor' => array(0,0,0), //テキスト色黒 'bgcolor' => false, //背景色指定無し 'text' => true, //テキスト表示 'font' => 'helvetica', // 'fontsize' => 8, // 'stretchtext' => 4 , // 'position' => '', //位置は現在位置 'align' => 'C', //中央揃え 'stretch' => false, //ストレッチ無し 'fitwidth' => true, //横幅にフィット 'cellfitalign' => '', //バーコードセルの位置指定無し ); // 各種の代表的なバーコード出力 // CODE 39 $pdf->Cell(0, 0, '[CODE39]のテスト : CODE39 TEST', 0, 1); $pdf->write1DBarcode('CODE39 TEST', 'C39', '', '', '', 18, 0.4, $style, 'N'); $pdf->Ln(); // CODE 39 + CHECKSUM $pdf->Cell(0, 0, '[CODE39チェックサム付]のテスト : CODE39 CHECKSUM', 0, 1); $pdf->write1DBarcode('CODE39 CHECKSUM', 'C39+', '', '', '', 18, 0.4, $style, 'N'); $pdf->Ln(); // CODE 128 $pdf->Cell(0, 0, '[CODE128]のテスト : CODE128 TEST', 0, 1); $pdf->write1DBarcode('CODE128 TEST', 'C128', '', '', '', 18, 0.4, $style, 'N'); $pdf->Ln(); // EAN 8 $pdf->Cell(0, 0, 'EAN8 : 4901234', 0, 1); $pdf->write1DBarcode('4901234', 'EAN8', '', '', '', 18, 0.4, $style, 'N'); $pdf->Ln(); // EAN 13 $pdf->Cell(0, 0, 'EAN13 : 490123456789', 0, 1); $pdf->write1DBarcode('490123456789', 'EAN13', '', '', '', 18, 0.4, $style, 'N'); $pdf->Ln(); // CODABAR $pdf->Cell(0, 0, 'CODABAR : 123456789', 0, 1); $pdf->write1DBarcode('123456789', 'CODABAR', '', '', '', 18, 0.4, $style, 'N'); $pdf->Ln(); // pdf表示設定 $pdf->Output('pdf-barcode-1.pdf', 'I'); ?>
これの実行結果は以下の通りです。
バーコードの種類は TCPDF のソースから以下のものが在ることが分かります。C39 : CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9. C39+ : CODE 39 with checksum C39E : CODE 39 EXTENDED C39E+ : CODE 39 EXTENDED + CHECKSUM C93 : CODE 93 - USS-93 S25 : Standard 2 of 5 S25+ : Standard 2 of 5 + CHECKSUM I25 : Interleaved 2 of 5 I25+ : Interleaved 2 of 5 + CHECKSUM C128 : CODE 128 C128A : CODE 128 A C128B : CODE 128 B C128C : CODE 128 C EAN2 : 2-Digits UPC-Based Extension EAN5 : 5-Digits UPC-Based Extension EAN8 : EAN 8 EAN13 : EAN 13 UPCA : UPC-A UPCE : UPC-E MSI : MSI (Variation of Plessey code) MSI+ : MSI + CHECKSUM (modulo 11) POSTNET : POSTNET PLANET : PLANET RMS4CC : RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code) KIX : KIX (Klant index - Customer index) IMB : Intelligent Mail Barcode - Onecode - USPS-B-3200 CODABAR : CODABAR CODE11 : CODE 11 PHARMA : PHARMACODE PHARMA2T: PHARMACODE TWO-TRACKS
PR -
今回は「Cellメソッド」を使って、配列データをテーブルの表として枠線と背景色を塗りながら、四角い領域に表示する方法について説明します。
「Cellメソッド」の説明は以下のページで行っていますので、詳しくはそちらを参照して下さい。
⇒PHP PDF出力の方法について・矩形領域への文字列出力(Cellメソッド)
ここであらためて、Cell メソッドの引数について説明を記します。// Cellメソッド public function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M') // $w : 矩形領域の幅、0であれば、右マージンまで自動的に拡張される。 // $h : 矩形領域の縦幅(デフォルト:0) // $txt : 表示文字列(デフォルト:"") // $border : 境界線表示(0:枠無し,1:枠有 または "LRTB"の文字列で「左右上下」を指定) // $ln : 出力後のカーソルの移動方法を指定 // [0]: 右へ移動(既定) // [1]: 次の行へ移動 // [2]: 下へ移動 // $align : テキストの整列を指定 // [L] or 空文字: 左揃え(既定) // [C]: 中央揃え // [R]: 右揃え // [J]: 両端揃え // $fill : 矩形領域の塗つぶし指定 // [false] : 透明(既定) // [true] : 塗つぶす // $link : 登録するリンク先のURL // $stretch: テキストの伸縮(ストレッチ)モード: // [0] : なし // [1] : 必要に応じて水平伸縮 // [2] : 水平伸縮 // [3] : 必要に応じてスペース埋め // [4] : スペース埋め // $ignore_min_height:「true」矩形領域の高さの最小値調整をしない // $calign : 指定されたY座標に対するセルの配置 // [T] : cell top // [C] : center // [B] : cell bottom // [A] : font top // [L] : font baseline // [D] : font bottom // $valign : セルの中のテキストの垂直方向の配置 // [T] : top // [M] : middle // [B] : bottom
今回はテーブルとして見える様に、境界線指定の「$border」と矩形領域の塗つぶし指定の「$fill」引数を指定します。
それでは Cell メソッドを使用したデータテーブルの表示の簡単な例を以下に記します。
■Cell メソッドを使用したデータテーブルの表示
setLineStyle メソッドのスタイル指定連想配列は、ほぼ以下の様にしています。
<?php require_once('../tcpdf/tcpdf.php'); // クラス生成 $pdf = new TCPDF(); // デフォルトで用意されている日本語フォント[小塚ゴシックPro M] $strFont = "kozgopromedium"; // ヘッダ・フッタ出力設定(特にいらないが) $pdf->setPrintHeader(false); $pdf->setPrintFooter(false); // 本文の日本語フォント[小塚ゴシックPro M] $pdf->SetFont($strFont, "", 10); // 新しいpdfページを追加 $pdf->AddPage(); $pdf->Write(0, '[Cell]関数でのテーブル表示テスト', '', false, '', true); // 各色指定による[Cell]関数でのテーブル表示 $arrTableData = [ ['A001', 'aaaa' , 'a002', 'AAAAA' ] , ['B001', 'bbbb' , 'b002', 'BBBBBBBB'] , ['C001', 'cccccc', 'c002', 'CCCCCC' ] , ['D001', 'dddddd', 'd002', 'DDDDDDD' ] , ]; // 各データのセル幅 $arrWidth = [40, 35, 40, 45]; // 各データの高さ $intHeight = 6; // 塗潰し色設定 : [Cell()]のfill指定に適用される $pdf->setFillColor(224, 235, 255); // テキスト色設定 $pdf->setTextColor(0); // 線色設定 : [Cell()]のborder指定に適用される $pdf->setDrawColor(0, 0, 255); // 線の幅設定 : [Cell()]のborder指定に適用される $pdf->setLineWidth(0.3); // 現在のX座標取得 $x = $pdf->GetX(); // 各データのセル幅の合計値でセルの[Top]の枠線を引く(高さは「0」指定) $pdf->Cell(array_sum($arrWidth), 0, '', 'T', 0); // カーソルは右端指定 // カーソルのX座標指定 $pdf->SetX($x); // 塗潰し指定(最初は塗潰し無し) $fill = 0; // データ配列からテーブル表示 foreach($arrTableData as $data) { // 各カラムは左右の枠線描画指定 $pdf->Cell($arrWidth[0], $intHeight, $data[0], 'LR', 0, 'L', $fill); $pdf->Cell($arrWidth[1], $intHeight, $data[1], 'LR', 0, 'L', $fill); $pdf->Cell($arrWidth[2], $intHeight, $data[2], 'LR', 0, 'R', $fill); $pdf->Cell($arrWidth[3], $intHeight, $data[3], 'LR', 0, 'R', $fill); $pdf->Ln(); // 塗潰し指定反転 $fill = !$fill; } // 各データのセル幅の合計値でセルの[Top]の枠線を引く(高さは「0」指定) $pdf->Cell(array_sum($arrWidth), 0, '', 'T'); // pdf表示設定 $pdf->Output('pdf-cells-color-1.pdf', 'I'); ?>
これの実行結果は以下の通りです。
各データの縦の枠線は Cell メソッドの枠指定 'LR' で左右の枠を指定します。 また、各データの塗潰しの指定は true と false が交互に指定される様にしています。
テーブルの上下の横線はテーブル全部の横幅の合計数に対して Cell メソッドで高さ「0」の枠のみを描画させています。
なお、塗潰し色・テキスト色・線の色は以下のメソッドで指定したものが適用されます。- 塗潰し色設定 :setFillColor
- テキスト色設定:setTextColor
- 線色設定 :setDrawColor
関連する記事
⇒PHP PDFファイル出力の方法について(TCPDF)
⇒PHP TCPDF PDFのワークシートの処理について
⇒PHP TCPDF PDFのワークシートのセルへのアクセスについて
⇒PHP TCPDF PDFのワークシートのセルへのアクセスについて(行・列指定)
⇒PHP TCPDF PDFのワークシートのセルへ漢字(全角文字)の設定について
⇒PHP TCPDF PDFのワークシートの紙の大きさやページ設定について
-
以下の記事では Cell メソッド及び MultiCell メソッドについて説明しましたが、 それらのメソッドの前に setLineStyle メソッドで枠線の設定を行うと矩形領域の枠線に変化を付けて表示されます。
- PHP PDF出力の方法について・矩形領域への文字列出力(Cellメソッド)
- PHP PDF出力の方法について・矩形領域への文字列出力(MultiCellメソッド)
- PHP PDF出力の方法について・矩形領域への文字列出力(MultiCellメソッド)その2
それでは setLineStyle メソッドの引数ついて説明します。// setLineStyleメソッド public function setLineStyle($style, $ret=false) // // $style : スタイルを指定する連想配列(以下のKEYで指定) // 'width' (float) : 線の太さ // 'cap' (string) : 線の端の部分の種類('butt', 'round', 'square') // ・'butt' (端の部分が線の長さと等しく平ら) // ・'round' (丸) // ・'square'(端を四角く) // 'square'(string) : 線の頂点結合の種類('miter', 'round', 'bevel') // ・'miter'(鋭角) // ・'round'(丸) // ・'bevel'(面取り) // 'dash' (mixed) : 破線パターン // [例] // ・string "2" : 2 ON, 2 OFF の繰り返し // ・string "2,1" : 2 ON, 1 OFF の繰り返し // ・array "2,3,1,2" : 2 ON, 3 OFF, 1 ON, 2 OFF の繰り返し // 'phase' (integer): 破線パターン開始位置のシフト長 // 'color' (array) : 描画色で以下の4種類の指定がある // ・array(GREY) : グレー値(0~255) // ・array(R,G,B) : RGB設定値(それぞれ0~255) // ・array(C,M,Y,K): CMYK設定値(それぞれ0~100) // ・array(C,M,Y,K,SpotColorName): // $ret : true の場合はコマンドを送信しない // (通常は指定無しでOKです)
■簡単な例で矩形領域の枠線表示
setLineStyle メソッドのスタイル指定連想配列は、ほぼ以下の様にしています。
$pdf->setLineStyle( array('width' => 1.0, // 枠線幅を太く1mmにする 'cap' => 'butt', // 端の部分は平ら 'join' => 'miter', // 鋭角 'dash' => 10, // 10:ON ,10:OFF を繰り返す 'color' => array(R,G,B) // RGB指定で各々の色 ) );
ここで 'dash' の値ですがピクセル値(px)なので「mm」換算では以下の計算式になります。
「'dash'値mm換算」=「'dash'値(px)」/(「DPI値」/「25.4」)
よって上記の「'dash'値(px)」が「10」の場合は
「'dash'値mm換算」=「10」/(「72(DPIデフォルト値)」/「25.4」)=3.5277…(mm)
画面上は約3.53mmの破線間隔になります。
以下にソースを記します。<?php require_once('../tcpdf/tcpdf.php'); // TCPDFクラス生成 $pdf = new TCPDF(); // デフォルトで用意されている日本語フォント[小塚ゴシックPro M] $strFont = "kozgopromedium"; // ヘッダ・フッタ出力設定 $pdf->setPrintHeader(true); $pdf->setPrintFooter(true); // 本文の日本語フォント[小塚ゴシックPro M] $pdf->SetFont($strFont, "", 14); // 新規ページの追加 $pdf->AddPage(); $pdf->Write(0, 'SetLineStyle() のテスト', '', 0, 'L', true, 0, false, false, 0); $pdf->Ln(); $pdf->setLineStyle(array('width' => 1.0, 'cap' => 'butt', 'join' => 'miter', 'dash' => 10, 'color' => array(255, 0, 0))); $pdf->setFillColor(255,255,128); $pdf->setTextColor(0,0,128); $text="Cell メソッドでの出力"; $pdf->Cell(0, 0, $text, 1, 1, 'L', 1, 0); $pdf->Ln(); $text="MultiCell メソッドでの出力"; $pdf->setLineStyle(array('width' => 1.0, 'cap' => 'butt', 'join' => 'miter', 'dash' => 10, 'color' => array(0, 0, 255))); $pdf->setFillColor(255,255, 0); $pdf->setTextColor( 0, 0,255); $pdf->MultiCell(60, 4, $text, 1, 'C', 1, 0); $pdf->SetX($pdf->GetX() + 1.0); $pdf->setLineStyle(array('width' => 1.0, 'cap' => 'butt', 'join' => 'miter', 'dash' => 10, 'color' => array(255, 192, 0))); $pdf->setFillColor( 0,255,255); $pdf->setTextColor(128,128,128); $pdf->MultiCell(60, 4, $text, 'LR', 'C', 1, 0); $pdf->SetX($pdf->GetX() + 1.0); $pdf->setLineStyle(array('width' => 1.0, 'cap' => 'butt', 'join' => 'miter', 'dash' => "10,2,2", 'color' => array(255, 0, 255))); $pdf->setFillColor(0,255,0); $pdf->setTextColor(255,0,255); $pdf->MultiCell(60, 4, $text, 1, 'C', 1, 1); // pdf表示設定 $pdf->Output('pdf-setlinestyle-1-1.pdf', 'I'); ?>
これの実行結果は以下の通りです。
Cell メソッドに対応する setLineStyle メソッドのスタイル指定配列では 'dash' を「10」としているので 破線の表示「約3.53mm」非表示「約3.53mm」の繰り返し表示されます。
また、破線の端がきっちりとさせる為に 'cap' を「'join'」 'join' を「'miter'」にしています。
MultiCell メソッドの2番目のテストは枠線の表示指定を 'LR' として枠の左右しか描画させていません。
また、3番目のテストは 'dash' を「'10,2,2'」にして見た目「一点鎖線」の様になっています。
この場合の破線の表示パターンは「10:ON , 2:OFF , 2:ON , 2:OFF」の繰り返しになります。
(ちなみに、破線パターンの「2」は「換算mm」「2」/(「72(DPIデフォルト値)」/「25.4」)=0.705…(mm)となります。)
-
段組み とは1ページの中で複数の列に分けて、テキストを左の列から右方向へ順次出力することを言います。
以下の画像は 段組み のテストとして、ワードで作成した3段組のものです。
この様な段組みが TCPDF では簡単にできますので、この説明を行っていきます。TCPDF での 段組み は AddPage メソッドを実行後に、「カラム定義の設定」「開始カラムの指定」を行い、 テキストの文字列を Write メソッドを実行すれば実現します。
取敢えず 段組み に必要な各種のメソッドに付いて以下に記します。// // 同一幅の段組み設定 public function setEqualColumns($numcols=0, $width=0, $y=null) // $numcols : カラム数(「0」設定で段組みを不可指定) // $width : カラム幅 // $y : カラム開始Y座標(「null」であれば現在位置から出力) // 段組みのカラムを削除 public function resetColumns() // カラム定義を配列で設定 public function setColumnsArray($columns) // $columns : カラム定義配列 // $columns[]['w'] : カラム幅 // $columns[]['s'] : カラムの空白幅 // $columns[]['y'] : カラムの先頭位置 // 開始カラムの選択 public function selectColumn($col=null) // $col : カラム番号(番号は「0」から始まる、「null」の場合は現在のカラム) // 現在カラムの取得 public function getColumn() // 現在のカラム数の取得 public function getNumberOfColumns() //
■段組みでのテキストデータ表示
表示を行うテキストデータは「test-mul-col.txt」として同一ディレクトリ内に設定しておきます。
AddPage メソッドを実行後に、resetColumns メソッドでカラムをリセットし、「カラム定義の設定」を setEqualColumns メソッドで カラム数は「3」で幅は「60mm」を指定します。
その後「開始カラムの指定」を selectColumn メソッドで「0」カラムから出力する様に指定します。
テキスト文字列の出力は file_get_contents メソッドでテキストファイルの内容を読込んで Write メソッドを実行します。<?php require_once('../tcpdf/tcpdf.php'); // TCPDFクラス生成 $pdf = new TCPDF(); // デフォルトで用意されている日本語フォント[小塚ゴシックPro M] $strFont = "kozgopromedium"; // ヘッダ・フッタ出力設定 $pdf->setPrintHeader(true); $pdf->setPrintFooter(true); // 本文の日本語フォント[小塚ゴシックPro M] $pdf->SetFont($strFont, "", 12); // 新規ページの追加 $pdf->AddPage(); // カラム制御をリセット $pdf->resetColumns(); // カラム定義の設定(3カラムで、幅は60mm) $pdf->setEqualColumns(3, 60); // カラム定義の指定 $pdf->selectColumn(0); // 外部テキストファイルの読込 $content = file_get_contents('test-mul-col.txt', false); // テキスト色 $pdf->setTextColor(50, 50, 50); // 内容を出力 $pdf->Write(0, $content, '', 0, 'J', true, 0, false, true, 0); // pdf表示設定 $pdf->Output('pdf-mul-col-1-1.pdf', 'I'); ?>
これの実行結果は以下の通りです。(ワードの出力とはフォントの違いなどから若干の表示が異なります。)
上記のソースで setEqualColumns メソッドでは同じカラム幅なのでこのメソッドを用いましたが、 その部分を以下の様に setColumnsArray メソッドで置き換えができます。// カラム定義の設定(3カラムで、幅は60mm) //$pdf->setEqualColumns(3, 60); // [setColumnsArray]に置き換え $columns = [ ['w' => 60, 's' => 0, 'y' => 10], ['w' => 60, 's' => 0, 'y' => 10], ['w' => 60, 's' => 0, 'y' => 10] ]; $pdf->setColumnsArray($columns); //
この方式で、3カラムの幅が異なる例をテストしてみます。
<?php require_once('../tcpdf/tcpdf.php'); // TCPDFクラス生成 $pdf = new TCPDF(); // デフォルトで用意されている日本語フォント[小塚ゴシックPro M] $strFont = "kozgopromedium"; // ヘッダ・フッタ出力設定 $pdf->setPrintHeader(true); $pdf->setPrintFooter(true); // 本文の日本語フォント[小塚ゴシックPro M] $pdf->SetFont($strFont, "", 12); // 新規ページの追加 $pdf->AddPage(); // カラム制御をリセット $pdf->resetColumns(); // カラム定義の設定 $columns = [ ['w' => 30, 's' => 0, 'y' => 10], ['w' => 60, 's' => 0, 'y' => 10], ['w' => 90, 's' => 0, 'y' => 10] ]; $pdf->setColumnsArray($columns); // カラム定義の指定 $pdf->selectColumn(0); // 外部テキストファイルの読込 $content = file_get_contents('test-mul-col.txt', false); // テキスト色 $pdf->setTextColor(50, 50, 50); // 内容を出力 $pdf->Write(0, $content, '', 0, 'J', true, 0, false, true, 0); // pdf表示設定 $pdf->Output('pdf-mul-col-1-1.pdf', 'I'); ?>
これの実行結果は以下の通りです。(カラム幅が異なっていることが確認できます。)
-
「PHP PDF出力の方法について・マージンとヘッダ/フッタ(TCPDF)」 の記事では TCPDF クラスを継承し Header メソッドを上書きすることでページのヘッダ処理のカスタマイズを行いました。
この Header メソッドは、ページを追加するメソッドの AddPage を実行すると毎回CALLされる様になっています。
TCPDF クラスを継承し Header メソッドのに、ページ全体に背景画像を設定する様にしてみます。
取敢えず Image メソッドの引数はに付いて以下に記します。// Imageメソッド public function Image($file, $x=null, $y=null, $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0, $fitbox=false, $hidden=false, $fitonpage=false, $alt=false, $altimgs=array()) // $file : 画像ファイル名 // $x : 領域左上のX座標[指定しない場合、現在のX座標位置] // $y : 領域左上のY座標[指定しない場合、現在のY座標位置] // $w : 領域の幅 [指定しない場合、自動計算される] // $h : 領域の高さ [指定しない場合、自動計算される] // $type : 画像フォーマット("JPEG", "PNG") // $link : AddLink()で作成したリンク識別子 // $align : 次の画像を表示する位置 // [T]: top-right for LTR or top-left for RTL // [M]: middle-right for LTR or middle-left for RTL // [B]: bottom-right for LTR or bottom-left for RTL // [N]: next line // $resize : [true]画像サイズを$wや$hに合わせてリサイズ // $dpi : 解像度(dot per inch) // $palign : 画像を現在の行のどこに配置するか // [L] : 左端 // [C] : 中央 // [R] : 右端 // ['']: 左端(RTLの場合は右端) // $ismask : [true]画像をマスクする場合 // $imgmask : 画像オブジェクトをメソッドの戻り値として取得する // (描画しない、w、h、x、yは無視される)場合true // $border : 境界線表示(0:枠無し,1:枠有 または "LRTB"の文字列で「左右上下」を指定) // $fitbox : [ture]($w, $h)で指定する領域に合わせて拡縮 // $hidden : [ture]画像を画面に表示しない // $fitonpage : [ture]ページの大きさに拡大する // $alt : If true the image will be added as alternative and not directly printed // (the ID of the image will be returned). // $altimgs : Array of alternate images IDs. Each alternative image must be an array with two values: // an integer representing the image ID (the value returned by the Image method) // and a boolean value to indicate if the image is the default for printing.
■ページを追加するごとに、画像を用紙全体に表示する
画像データは以下のものを使います。画像の大きさは「459×640」ピクセルです。
この画像を用紙全体に表示を行います。
TCPDF を継承しクラス名を EXPDF とします。 Header メソッド内の処理は先ず getBreakMargin メソッドで改頁までの余白を取得し getAutoPageBreak メソッドで自動改ページモードを取得し退避します。
その後で SetAutoPageBreak メソッドで自動改ページ機能をOFF、及びページ下端からのマージンを「0」に設定します。 そして Image メソッドで画像をページ全体指定で表示します。
画像表示後 SetAutoPageBreak メソッドで自動改ページ状態と改頁までの余白の設定値を戻してやります。
ここで少し注意点があります。TCPDF クラスではデフォルトでヘッダ出力の設定が true になっているので AddPage メソッド実行時に上書きした Header メソッドが実行されます。 ただし setPrintHeader メソッドで false に設定すると Header メソッドが実行されなくなるので注意が必要です。<?php require_once('../tcpdf/tcpdf.php'); // TCPDF クラスを継承 class EXPDF extends TCPDF { // [Header]を上書き public function Header() { // 改頁までの余白取得 $svBreakMargin = $this->getBreakMargin(); // 自動改ページモード取得 $svAutoPageBreak = $this->getAutoPageBreak(); // 自動改ページ機能をOFF(ページ下端からのマージン;0設定) $this->SetAutoPageBreak(false, 0); // ページ全体に画像を張り付け $this->Image('../_test_pdf/test-backg.png', 0, 0, 210, 297); // ページ設定を元に戻す $this->SetAutoPageBreak($svAutoPageBreak, $svBreakMargin); } } // TCPDFを継承したクラス生成 $pdf = new EXPDF(); // デフォルトで用意されている日本語フォント[小塚ゴシックPro M] $strFont = "kozgopromedium"; // ヘッダ・フッタ出力設定 $pdf->setPrintHeader(true); // デフォルトではヘッダ出力「true」なので要らないが $pdf->setPrintFooter(false); // 本文の日本語フォント[小塚ゴシックPro M] $pdf->SetFont($strFont, "", 10); // 新しいpdfページを追加 $pdf->AddPage(); // 1ページ目タイトル表示 $strOut = '<h1>HTML Imageテスト3・1ページ目表示</h1>'; $pdf->writeHTML($strOut, true, false, true, false, ''); // 新しいpdfページを追加 $pdf->AddPage(); // 1ページ目タイトル表示 $strOut = '<h1>HTML Imageテスト3・2ページ目表示</h1>'; $pdf->writeHTML($strOut, true, false, true, false, ''); // pdf表示設定 $pdf->Output('pdf-img-7-1.pdf', 'I'); ?>
これの実行結果は以下の通りです。