从 tcpdf 中的数据库生成数据 table

generating data from db in tcpdf table

我正在尝试使用 tcpdf 生成包含数据库值的 pdf。

我有一个像这样获取数据的函数

function fetch_data()
{
$output = '';  
    include('../connection.php');
        // Colors, line width and bold font
        //My sql
        $sql =""; 
$query = mysqli_query($con, $sql) or die (mysqli_error($con));  
$total_amt = 0;
$tax_amt = 0;
while($row = mysqli_fetch_array($query)) { 
$output .= '<tr>  
                          <td style="border-bottom:1px thin #666; font-size:12px; font-weight:normal; font-style:normal;">'.$row["product"].' - '.$row['description'].'</td>  
                          <td style="border-bottom:1px thin #666"; align="center">'.$row["uom"].'</td>  
                          <td style="border-bottom:1px thin #666"; align="center">'.$row["price"].'</td>  
                          <td style="border-bottom:1px thin #666"; align="center">'.$row["qty"].'</td>  
                          <td style="border-bottom:1px thin #666"; align="center">'.$row["discount"].'</td>  
                          <td style="border-bottom:1px thin #666"; align="center">'.$row["taxation"].'%</td>
                          <td style="border-bottom:1px thin #666"; align="center">'.$row["total"].'</td>    
                     </tr>  
                          ';  
                          $total_amt += $row['total']; 
      $tax_amt += $row['tax_amount'];
      } 
$output .= '<tr><td colspan="7" style="border-top:1px thin #666";></td></tr><tr><td colspan="5" align="left"><strong>Total</strong></td><td align="center">'.number_format($tax_amt,2).'</td><td align="center">'.number_format($total_amt,2).'</td></tr>';

      return $output;
}

然后我展示它

$content = ''; 

      $content .= '  

      <table border="1"><tr><td width="100%">
      <table border="0">
           <tr bgcolor="#796799" style="color:#FFF;">' ;
         $pdf->SetFont('arsenalb', 'B', 12);  

        $content .= '  
                <th width="40%" style="border-left-width:14px;border-left-color:#796799;"  height="30" align="center">Description</th>  
                <th width="10%" align="center">UOM</th>  
                <th width="13%" align="center">Price</th>  
                <th width="7%" align="center">Qty</th>  
                <th width="7%" align="center">Disc</th> 
                <th width="10%" align="center">Tax</th>  
                <th width="13%" align="center">Total</th>   
           </tr>  
      '; 
     $pdf->SetFont('arsenal', '', 10); 
      $content .= fetch_data();  
      $content .= '</table></td></tr></table>';  
$pdf->writeHTML($content);  

我只希望 table header 加粗,所以我在 header 之后使用 $pdf->SetFont('arsenal', '', 10); 。但它使 header 也正常,而不是粗体。如果我删除它,那么整个 table 数据将变为粗体。

有什么办法可以将 table 这样的东西分开吗? https://tcpdf.org/examples/example_011/

这行不通的原因很简单。在第二个 SetFont 行之后将所有 $content 写入 $pdf。这意味着使用了第一行,但由于没有向 pdf 添加任何内容,因此它不会显示任何内容。

既然 tcpdf 允许你写 HTML,为什么不使用 HTML 来使 header 加粗?使用 <b> 标签。另一种选择是制作两个 table。一份用于 header,一份用于内容。由于您定义了列的宽度,因此您可以这样做。

你会得到如下信息: $hdr = 'full table with header data';

 $pdf->SetFont('arsenalb', 'B', 12);
 $pdf->writeHTML($hdr);

 $content .= 'new table, with column with defined';
 $content .= fetch_data();  
 $content .= '</table></td></tr></table>';  

 $pdf->SetFont('arsenal', '', 10); 
 $pdf->writeHTML($content);

但这可能会起作用,具体取决于您是否需要第二个外部 table。如果你需要它,它很可能是不可能的,除非你可以写 partial HTML yo $pdf->writeHTML()。我不确定你 can/cannot.