webdevqa.jp.net

可変行パディングを使用してTCPDFHTMLテーブルを作成する方法

TCPDFでHTMLテーブルを作成しようとしています。行の間に大きなスペースがある行(パディング)と、小さいパディングがある行があります。

$html = '<table border="0" cellpadding="6">
        <tr>
            <td style="width="52%">' . lang('ticket_name') . '</td>
            <td style="width="18%">' . lang('ticket_price') . '</td>
            <td style="width="12%">' . lang('quantity') . '</td>
            <td style="width="18%">' . lang('total') . '</td>
        </tr>
    <tr>
            <td style="padding: 10px">' . $item['name'] . '</td>
            <td style="padding: 10px">' . $item['unit_price'] . '</td>
            <td style="padding: 10px">' . $item['quantity'] . '</td>
            <td style="padding: 10px">' . $item['row_total'] . '</td>
        </tr>
        <tr>
            <td style="text-align:right" colspan="3">' . lang('price_basis') . ': </td>
            <td>' . $totals['total_before_tax'] . '</td>
        </tr>
            <tr>
            <td style="text-align:right" colspan="3">' . 'Ukupni popust' . ': </td>
            <td>' . $totals['total_discount'] . '</td>
        </tr>
            <tr>
            <td style="text-align:right" colspan="3">' . 'Sveukupno' . ': </td>
            <td>' . $totals['grand_total'] . '</td>
        </tr>
    </table>';
$pdf->writeHTML($html, $linebreak = true, $fill = false, $reseth = true, $cell = false, $align = '');

ご覧のとおり、tableタグにcellpadding属性があり、正常に機能していますが、2行目に別のパディングが必要です。パディングスタイルは明らかに「td」タグでも「tr」タグでも機能しません。

セルパディングが異なる2つの別々のテーブルで実行できることは知っていますが、かなり間違っているようです。別の方法があるはずです。

16
Bero_zg

TCPDFはすべてのCSS属性をサポートしているわけではありません。たとえば、TCPDFはpaddingおよびmargin属性をサポートしていません。内部テーブルでパディングをシミュレートできます。

<tr>
 <td>
  <table><tr>
   <td style="width:10px;"></td>
   <td>' . $item['name'] . '</td>
   <td style="width:10px;"></td>
  </tr></table>
 </td>
</tr>

または、行ごとに異なるcellpaddingを持つ異なるテーブルを使用できます。

<table border="0" cellpadding="6">
 <tr>
  <td>' . lang('ticket_name') . '</td>
  <td>' . lang('ticket_price') . '</td>
  <td>' . lang('quantity') . '</td>
  <td>' . lang('total') . '</td>
 </tr>
</table>
<table border="0" cellpadding="5">
 <tr>
  <td>' . $item['name'] . '</td>
  <td>' . $item['unit_price'] . '</td>
  <td>' . $item['quantity'] . '</td>
  <td>' . $item['row_total'] . '</td>
 </tr>
</table>
6
Alex

ここでの他の答えはオールラウンドパディングを提供しますが、上部または下部にパディングが必要な場合、解決策は設定された高さ/幅の透明なPNGを使用することです。

_private function padding($width,$height){
    return '<img src="/imagepath/images/transparent.png" width="'.$width.'" height="'.$height.'">'; 
}
_

次に、パディングが必要なTD:

$this->padding(82,11)

したがって、テーブルセルに定義された幅が必要です。これは左/右のパディングでも機能する可能性がありますが、試したことはありません。

0
Ukuser32