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

Angular 9中Pdfmake含跨行(rowspan)与超长数据时边框显示异常

解决Angular 9中pdfmake表格跨行(rowSpan)加超长文本导致的边框异常问题

问题根源

你的表格边框异常是两个核心原因叠加导致的:

  • 跨行单元格(rowSpan=7)的后续行中,手动将前两列边框全设为[false,false,false,false],破坏了pdfmake对跨行单元格边框的连贯性计算逻辑;
  • 存在未自动换行的超长文本,超出页面范围后打乱了表格的整体布局渲染。

具体修复方案

1. 精准控制单元格边框,避免全局隐藏

不要直接把跨行单元格对应的后续行边框全设为false,而是只隐藏不需要显示的边框(比如上边框),保留左右边框维持跨行的视觉连贯性。例如将后续行前两列的边框改为[true, false, true, false](左、上、右、下,仅隐藏上边框)。

2. 给超长文本添加自动换行配置

给包含超长文本的单元格添加wordWrap: 'break-word'和alignment: 'left'(或justify),强制文本换行,避免溢出页面打乱布局。

3. 调整表格列宽,给长文本列预留足够空间

适当调整超长文本所在列的宽度百分比,比如把第10列("Thời gian thực hiện hợp đồng")的宽度从9%调至12%,其他列对应缩小,保证总宽度占比为100%。

修改后的docDefinition示例

{
  "widths": ["7%", "9%", "9%", "8%", "8%", "8%", "8%", "8%", "8%", "12%", "11%"],
  "body": [
    [
      {"text":"STT","fontSize":11,"style":"tableHeader"},
      {"text":"Tên nhà thầu","fontSize":11,"style":"tableHeader"},
      {"text":"Mã số thuế","fontSize":11,"style":"tableHeader"},
      {"text":"Giá dự thầu (VND)","fontSize":11,"style":"tableHeader"},
      {"text":"Giá dự thầu sau hiệu chỉnh sai lệch thừa (nếu có), giảm giá (nếu có) (VND)","fontSize":11,"style":"tableHeader"},
      {"text":"Điểm kỹ thuật (nếu có)","fontSize":11,"style":"tableHeader"},
      {"text":"Giá đánh giá (nếu có) (VND)","fontSize":11,"style":"tableHeader"},
      {"text":"Giá trúng thầu (VND)","fontSize":11,"style":"tableHeader"},
      {"text":"Thời gian thực hiện gói thầu","fontSize":11,"style":"tableHeader"},
      {"text":"Thời gian thực hiện hợp đồng","fontSize":11,"style":"tableHeader"},
      {"text":"Các nội dung khác (nếu có)","fontSize":11,"style":"tableHeader"}
    ],
    [
      {"text":1,"fontSize":11,"rowSpan":7,"style":""},
      {"text":"Liên danh bảo hiểm Tổ hợp bauxit - nhôm Lâm Đồng","fontSize":11,"rowSpan":7,"style":""},
      {"text":"9876543219","fontSize":11,"style":""},
      {"text":"1.071.031.727","rowSpan":7,"fontSize":11,"style":""},
      {"text":" ","rowSpan":7,"fontSize":11,"style":""},
      {"text":" ","rowSpan":7,"fontSize":11,"style":""},
      {"text":" ","rowSpan":7,"fontSize":11,"style":""},
      {"text":"1.071.031.727","rowSpan":7,"fontSize":11,"style":""},
      {"text":"365 ngày kể từ 0 giờ 00 phút ngày 01/01/2025 đến 24 giờ 00 phút ngày 31/12/2025","rowSpan":7,"fontSize":11,"style":""},
      {"text":"Giá dự thầu sau hiệu chỉnh sai lệch thừa (nếu có), á dự thầu sau hiệu chỉnh thầu sau hiệu chỉnh sai lệch thừa (nếu có), giảm giá (nếu có) (VND)Giá dự thầu sau hiệu chỉnh sai lệch thừa (nếu có), á dự thầu sau lệch thừa (nếu có), giảm giá (nếu có) (VND)","fontSize":11,"rowSpan":7,"style":"","wordWrap":"break-word","alignment":"left"},
      {"text":" ","rowSpan":7,"fontSize":11,"style":""}
    ],
    [
      {"text":" ","border":[true, false, true, false]},
      {"text":" ","border":[true, false, true, false]},
      {"text":"0967722385","fontSize":11,"style":""},
      {"text":" ","border":[false,false,false,false]},
      {"text":" ","border":[false,false,false,false]},
      {"text":" ","border":[false,false,false,false]},
      {"text":" ","border":[false,false,false,false]},
      {"text":" ","border":[false,false,false,false]},
      {"text":" ","border":[false,false,false,false]},
      {"text":" ","border":[false,false,false,false]},
      {"text":" ","border":[false,false,false,false]}
    ],
    [{"text":" ","border":[true, false, true, false]},{"text":" ","border":[true, false, true, false]},{"text":"0967722386","fontSize":11,"style":""},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]}],
    [{"text":" ","border":[true, false, true, false]},{"text":" ","border":[true, false, true, false]},{"text":"0912348085","fontSize":11,"style":""},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]}],
    [{"text":" ","border":[true, false, true, false]},{"text":" ","border":[true, false, true, false]},{"text":"0912348086","fontSize":11,"style":""},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]}],
    [{"text":" ","border":[true, false, true, false]},{"text":" ","border":[true, false, true, false]},{"text":"9876543214","fontSize":11,"style":""},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]}],
    [{"text":" ","border":[true, false, true, false]},{"text":" ","border":[true, false, true, false]},{"text":"9876543215","fontSize":11,"style":""},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]},{"text":" ","border":[false,false,false,false]}]
  ],
  "preserveLeadingSpaces":true
}

额外注意事项

  • 确保使用pdfmake的最新稳定版,旧版本可能存在跨行表格的渲染bug;
  • 若表格需要分页,尽量避免跨行单元格刚好卡在分页位置,可通过调整内容或页面边距优化;
  • 不要手动修改跨行单元格的高度,让pdfmake自动根据内容计算,避免边框错位。

内容的提问来源于stack exchange,提问作者Văn Giang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:39:51