忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

PHP TCPDF出力の方法について・矩形領域への枠線設定(setLineStyleメソッド)

以下の記事では Cell メソッド及び MultiCell メソッドについて説明しましたが、 それらのメソッドの前に setLineStyle メソッドで枠線の設定を行うと矩形領域の枠線に変化を付けて表示されます。


それでは 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)となります。)












PR

コメント

コメントを書く