You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PHP与TCPDF生成PDF时,如何实现单元格并排的横向表格?

解决TCPDF横向表格(表头与值分别同行并排)的实现问题

需求说明

使用TCPDF生成PDF时,需将自定义字段以横向表格展示,要求:

  • 所有表头在同一行并排
  • 对应的值也在同一行并排

预期格式:

header | header | header | header  // 所有表头在一行
Value  | Value  | Value  | Value   // 所有对应值在一行

现有代码问题

  • 原代码1:尝试给<tr>设置display: table-cell,但无法实现单元格并排,不符合预期
  • 修改后的代码:每个表头与对应值单独占一行,形成纵向表格,不符合需求

正确实现方案

核心思路:先收集所有非空字段的名称和值,再分别构建单一行的表头和单一行的值,而非为每个字段单独生成行。

完整代码

$tableHTML = '<table>';
$fieldNames = [];
$fieldValues = [];

foreach ($pdf_custom_fields as $field) {
    $value = get_custom_field_value($estimate->id, $field['id'], 'estimate');
    if ($value == '') {
        continue;
    }
    // 收集非空的字段名和对应值
    $fieldNames[] = $field['name'];
    $fieldValues[] = $value;
}

// 仅当有非空字段时构建表格行
if (!empty($fieldNames)) {
    // 构建表头行(所有<th>在同一个<tr>内)
    $tableHTML .= '<tr>';
    foreach ($fieldNames as $name) {
        $tableHTML .= '<th style="border: 1px solid #999; font-weight:bold; color: #fff; background-color:#242c39;">' . htmlspecialchars($name) . '</th>';
    }
    $tableHTML .= '</tr>';

    // 构建值行(所有<td>在同一个<tr>内)
    $tableHTML .= '<tr>';
    foreach ($fieldValues as $value) {
        $tableHTML .= '<td style="border: 1px solid #999;">' . htmlspecialchars($value) . '</td>';
    }
    $tableHTML .= '</tr>';
}

$tableHTML .= '</table>';

// 将表格添加到指定变量
$organization_info2 .= $tableHTML;

代码要点

  1. 过滤空字段:跳过值为空的字段,避免表格出现空单元格
  2. 同行构建:表头所有单元格放在一个<tr>中,值的所有单元格也放在一个<tr>中,确保横向并排
  3. 安全处理:用htmlspecialchars()转义字段名和值中的特殊字符,防止破坏HTML结构,适配TCPDF的HTML解析

内容的提问来源于stack exchange,提问作者Wonder In Wonderland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:57:38