[2023/03/13] PHP TCPDFの一次元バーコードの表示方法について(write1DBarcodeメソッド) (No.310)
[2023/03/10] PHP TCPDFの「Cellメソッド」を使ったテーブル表示(背景色あり)の方法について (No.309)
[2023/02/08] PHP TCPDF出力の方法について・矩形領域への枠線設定(setLineStyleメソッド) (No.308)
[2023/02/07] PHP TCPDFのテキストデータの段組みの方法について (No.307)
-
今回は write2DBarcode メソッドを使って 二次元バーコード(QR-CODE) を表示する方法について説明します。
二次元バーコード といえばあの車部品メーカーで有名な DENSO が開発したバーコードです。 実際はバーコードでは無く2次元的な四角い領域に白黒のマスを描画して比較的長いテキストを表現できるものです。
開発した DENSO は QR-CODE の特許をオープンしたため最初は工場などの管理のためのものでしたが、 最近はいろんなところで利用されています。 コードの中に URL を埋め込んでおいて、スマホからそれを読み取ってアクセスする等の利用が増えています。
ここで write2DBarcode メソッドの引数について説明を記します。// write2DBarcodeメソッド public function write2DBarcode($code, $type, $x=null, $y=null, $w=null, $h=null, $style=array(), $align='', $distort=false) // $code : 印刷するコード // $type : バーコードのタイプ("C39", "C93", "C138", "EAN13", "EAN8"など) // $x : X位置(指定されたユーザの単位)(NULL:カレントのX位置) // $y : Y位置(指定されたユーザの単位)(NULL:カレントのY位置) // $w : 横幅(指定されたユーザの単位)(NULL:カレントのX位置から用紙出力の横幅MAXまで) // $h : 縦幅(指定されたユーザの単位)(NULL:カレントのX位置から用紙出力の縦幅MAXまで) // $style : 出力オプションを配列で指定 // $style['border']:boolean:trueでボーダー出力 // $style['padding']:int:バーコード周囲の余白('auto':自動設定) // $style['hpadding']:int:水平方向の余白('auto':自動設定) // $style['vpadding']:int:垂直方向の余白('auto':自動設定) // $style['fgcolor']:color array:バーと文字色 // $style['bgcolor']:color mixed:背景色(falseであれば、透明) // $style['module_width']: width of a single module in points // $style['module_height']: height of a single module in points // $style['position']:string:ページにおけるバーコードの位置: // ['L']: 左マージン // ['C']: 中央揃え // ['R']: 右マージン // ['S']: ストレッチ // $align :string:ページにおけるバーコードの位置: // ['T']: top-right // ['M']: middle-right // ['B']: bottom-right // ['N']: next line // $distort :boolean:trueで幅と高さをフィットとさせる // (それ以外はアスペクト比を維持する)
それでは write2DBarcode メソッドを使用したバーコードの表示の簡単な例を以下に記します。
■write2DBarcode メソッドを使用したバーコードの表示
以下の例では QRCODE の レベル L, レベル M, レベル Q, レベル H のバーコードを表示しています。
<?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(); // set style for barcode $style = array( 'border' => true, //ボーダー有 'vpadding' => 'auto', //縦パディングAUTO 'hpadding' => 'auto', //水平パディングAUTO 'fgcolor' => array(0,0,0),//テキスト・バー色(黒) 'bgcolor' => false, //背景色指定無し 'module_width' => 1, // width of a single module in points 'module_height' => 1 // height of a single module in points ); // 出力URL $strURL = "https://www.yahoo.co.jp/"; // QRCODE,L : QR-CODE Low error correction $pdf->write2DBarcode($strURL, 'QRCODE,L', 20, 30, 50, 50, $style, 'N'); $pdf->Text(20, 25, 'QRCODE L'); // QRCODE,M : QR-CODE Medium error correction $pdf->write2DBarcode($strURL, 'QRCODE,M', 80, 30, 50, 50, $style, 'N'); $pdf->Text(80, 25, 'QRCODE M'); // QRCODE,Q : QR-CODE Better error correction $pdf->write2DBarcode($strURL, 'QRCODE,Q', 20, 90, 50, 50, $style, 'N'); $pdf->Text(20, 85, 'QRCODE Q'); // QRCODE,H : QR-CODE Best error correction $pdf->write2DBarcode($strURL, 'QRCODE,H', 80, 90, 50, 50, $style, 'N'); $pdf->Text(80, 85, 'QRCODE H'); // pdf表示設定 $pdf->Output('pdf-barcode-qr-1.pdf', 'I'); ?>
これの実行結果は以下の通りです。
レベル L, レベル M, レベル Q, レベル H は読み取り時の誤り訂正レベルを表しています。
「誤り訂正」とはQR-CODEに汚れや破損があっも正しく読み取れるように間違いを補正することをいいます。
なお、以下に訂正率を記します。- レベル L:コード語の約7%が訂正可能
- レベル M:コード語の約15%が訂正可能
- レベル Q:コード語の約25%が訂正可能
- レベル H:コード語の約30%が訂正可能
- レベル S:コード語の約50%が訂正可能
QR-CODEの仕様には レベル S までありますが、TCPDF では レベル H までが実装されています。
また、バージョンが1~40までありますが、TCPDF の内部では出力データの容量に応じてバージョンを計算している様です。 (私がソースを読んでみてのことなので正しいかどうかは分かりませんが…)
各種データの種類ごとの最大容量は以下の通りです。
データ種別 最大容量 備考 数字のみ 7,089文字 英数字(ASCII) 4,296文字 バイナリ(8ビット) 2,953バイト 漢字・かな (Shift_JIS) 4,296文字 全角英数字 (2バイト文字)を含み、半角カタカナ (1バイト文字)を含まない ※最大容量はバージョンを最大(40)、誤り訂正レベルを最低(L) にした場合
PR -
今回は 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
-
今回は「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'); ?>
これの実行結果は以下の通りです。(カラム幅が異なっていることが確認できます。)