【PHP】TCPDF-4 Multicellセルの枠線

枠線をうまく利用することによって請求書などのビジネス文書やを動的に生成できるプログラムが実装できます。

Multicellメソッドの第4引数で枠線を指定できます。

簡単に指定する方法
1を指定すると、上下左右に枠線がつきます。
“L”,”R”,”T”, “B”を指定すると、左、右、上、下に枠線がつきます。
(”LR”など組み合わせも可能です)

$pdf->MultiCell(100, 0, 'all', 1, 'L', 0, 1, '', '', true, 0);
$pdf->MultiCell(100, 0, 'left', 'L', 'L', 0, 1, '', '', true, 0);
$pdf->MultiCell(100, 0, 'top', 'T', 'L', 0, 1, '', '', true, 0);
$pdf->MultiCell(100, 0, 'right', 'R', 'L', 0, 1, '', '', true, 0);
$pdf->MultiCell(100, 0, 'bottom', 'B', 'L', 0, 1, '', '', true, 0);

SetLineStyleメソッドを使用すると、線の種類を変更できます。

細かな枠線指定
引数に以下のような連装配列を渡すと、細かい設定も可能です。

$cellBorder = array(
'R' => array('width' => 0.1, 'cap' => 'square','dash' => 0, 'color' => array(0, 0, 0)),
'L' => array('width' => 0.1, 'cap' => 'square','dash' => 0, 'color' => array(0, 0, 0)),
'T' => array('width' => 0.1, 'cap' => 'square','dash' => 0, 'color' => array(0, 0, 0)),
'B' => array('width' => 0.1, 'cap' => 'square','dash' => 0, 'color' => array(0, 0, 0)),
);

width
widthの値を変更すると、以下のように線の太さを調整できます。

$dash = 0;
$cellBorder = array(
'B' => array('width' => 0.1, 'cap' => 'square', 'dash' => 0, 'color' => array(0, 0, 0)),
);

$width = 0.1;
for ($i = 0; $i < 200; $i++) {
    $cellBorder['B']['width'] = $width;
    $pdf->MultiCell(0, 0, 'width = ' . $width, $cellBorder, 'L', 0, 1, '', '', true, 0);
    $width += 0.1;
}

cap
末端部のスタイル(butt, round, square)

$cellBorder = array(
'R' => array('width' => 2.0, 'cap' => 'butt', 'dash' => 0, 'color' => array(0, 0, 0)),
'L' => array('width' => 2.0, 'cap' => 'butt', 'dash' => 0, 'color' => array(0, 0, 0)),
'T' => array('width' => 2.0, 'cap' => 'butt', 'dash' => 0, 'color' => array(0, 0, 0)),
'B' => array('width' => 2.0, 'cap' => 'butt', 'dash' => 0, 'color' => array(0, 0, 0)),
);

$pdf->MultiCell(0, 0, 'butt', $cellBorder, 'L', 0, 1, '', '', true, 0);

$pdf->setY($pdf->GetY() + 10);


$cellBorder = array(
'R' => array('width' => 2.0, 'cap' => 'round', 'dash' => 0, 'color' => array(0, 0, 0)),
'L' => array('width' => 2.0, 'cap' => 'round', 'dash' => 0, 'color' => array(0, 0, 0)),
'T' => array('width' => 2.0, 'cap' => 'round', 'dash' => 0, 'color' => array(0, 0, 0)),
'B' => array('width' => 2.0, 'cap' => 'round', 'dash' => 0, 'color' => array(0, 0, 0)),
);

$pdf->MultiCell(0, 0, 'round', $cellBorder, 'L', 0, 1, '', '', true, 0);

$pdf->setY($pdf->GetY() + 10);

$cellBorder = array(
'R' => array('width' => 2.0, 'cap' => 'square', 'dash' => 0, 'color' => array(0, 0, 0)),
'L' => array('width' => 2.0, 'cap' => 'square', 'dash' => 0, 'color' => array(0, 0, 0)),
'T' => array('width' => 2.0, 'cap' => 'square', 'dash' => 0, 'color' => array(0, 0, 0)),
'B' => array('width' => 2.0, 'cap' => 'square', 'dash' => 0, 'color' => array(0, 0, 0)),
);

$pdf->MultiCell(0, 0, 'square', $cellBorder, 'L', 0, 1, '', '', true, 0);

dash
dashの値を変更すると、以下のように点線の間隔を調整できます。

$dash = 0;
for ($i = 0; $i < 10; $i++) {
    $cellBorder['B']['dash'] = $dash;
    $pdf->MultiCell(0, 0, 'dash = ' . $dash, $cellBorder, 'L', 0, 1, '', '', true, 0);
    $dash += 1;
}

color
RGBで指定します。

$dash = 0;
$cellBorder = array(
'R' => array('width' => 2.0, 'cap' => 'square', 'dash' => 0, 'color' => array(255, 0, 0)),
'L' => array('width' => 2.0, 'cap' => 'square', 'dash' => 0, 'color' => array(0, 255, 0)),
'T' => array('width' => 2.0, 'cap' => 'square', 'dash' => 0, 'color' => array(0, 0, 255)),
'B' => array('width' => 2.0, 'cap' => 'square', 'dash' => 0, 'color' => array(0, 0, 0)),
);

$pdf->MultiCell(100, 0, 'color', $cellBorder, 'L', 0, 1, '', '', true, 0);