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

打印PDF时实现HTML多列表格的自动列分页需求

多列HTML表格打印PDF时列自动分页解决方案

问题描述

我有一个包含50列及以上的HTML表格,需求是打印为PDF时,若列无法在单页容纳,需自动移至下一页。该表格在Chrome浏览器中可通过滚动条正常显示所有列,但打印PDF时,超出页面的列被截断而非渲染到新页面。

附原始代码及打印截断效果截图:

原始HTML代码

<!DOCTYPE HTML>
<html>
<head>
<style>
@media print
{
  table { page-break-after:auto }
  tr    { page-break-inside:avoid; page-break-after:auto }
  td    { page-break-inside:avoid; page-break-after:auto }
  thead { display:table-header-group }
  tfoot { display:table-footer-group }
}
</style>
</head>
<body>
<table class="table">
  <thead style="color:#ceb03d">
    <tr>
      <th id="Column_Part1_1">Column_Part11</th>
      <th id="Column_Part1_2">Column_Part12</th>
      <th id="Column_Part1_3">Column_Part13</th>
      <th id="Column_Part1_4">Column_Part14</th>
      <th id="Column_Part1_5">Column_Part15</th>
      <th id="Column_Part1_6">Column_Part16</th>
      <th id="Column_Part1_7">Column_Part17</th>
      <th id="Column_Part1_8">Column_Part18</th>
      <th id="Column_Part1_9">Column_Part19</th>
      <th id="Column_Part1_10">Column_Part110</th>
      <th id="Column_Part1_11">Column_Part111</th>
      <th id="Column_Part1_12">Column_Part112</th>
      <th id="Column_Part1_13">Column_Part113</th>
      <th id="Column_Part1_14">Column_Part114</th>
      <th id="Column_Part1_15">Column_Part115</th>
      <th id="Column_Part1_15">Column_Part115</th>
      <th id="Column_Part2_1">Column_Part21</th>
      <th id="Column_Part2_2">Column_Part22</th>
      <th id="Column_Part2_3">Column_Part23</th>
      <th id="Column_Part2_4">Column_Part24</th>
      <th id="Column_Part2_5">Column_Part25</th>
      <th id="Column_Part2_6">Column_Part26</th>
      <th id="Column_Part2_7">Column_Part27</th>
      <th id="Column_Part2_8">Column_Part28</th>
      <th id="Column_Part2_9">Column_Part29</th>
      <th id="Column_Part2_10">Column_Part210</th>
      <th id="Column_Part2_11">Column_Part211</th>
      <th id="Column_Part2_12">Column_Part212</th>
      <th id="Column_Part2_13">Column_Part213</th>
      <th id="Column_Part2_14">Column_Part214</th>
      <th id="Column_Part2_15">Column_Part215</th>
      <th id="Column_Part2_15">Column_Part215</th>
    </tr>
  </thead>
  <tbody>
    <tr ng-repeat="item in model.items"> <!-- The table contains several Columns. -->
      <td>Value_Part_1</td>
      <td>Value_Part_12</td>
      <td>Value_Part_13</td>
      <td>Value_Part_14</td>
      <td>Value_Part_15</td>
      <td>Value_Part_16</td>
      <td>Value_Part_17</td>
      <td>Value_Part_18</td>
      <td>Value_Part_19</td>
      <td>Value_Part_110</td>
      <td>Value_Part_111</td>
      <td>Value_Part_112</td>
      <td>Value_Part_113</td>
      <td>Value_Part_114</td>
      <td>Value_Part_115</td>
      
      <td>Value_Part_21</td>
      <td>Value_Part_22</td>
      <td>Value_Part_23</td>
      <td>Value_Part_24</td>
      <td>Value_Part_25</td>
      <td>Value_Part_26</td>
      <td>Value_Part_27</td>
      <td>Value_Part_28</td>
      <td>Value_Part_29</td>
      <td>Value_Part_210</td>
      <td>Value_Part_211</td>
      <td>Value_Part_212</td>
      <td>Value_Part_213</td>
      <td>Value_Part_214</td>
      <td>Value_Part_215</td>
    </tr>
  </tbody>
</table>
</body>
</html>

打印截断效果

打印时列被截断的效果截图

解决方案

你当前的CSS仅处理了纵向分页(行的拆分),但未解决横向列超出页面的问题。要让超出的列自动转到下一页,需调整打印样式,允许内容横向溢出并生成新页面:

修改后的打印CSS

@media print {
  body {
    width: auto;
    overflow-x: visible;
  }
  table {
    width: auto;
    page-break-inside: avoid;
  }
  tr {
    page-break-inside: avoid;
  }
  thead {
    display: table-header-group; /* 确保表头在每一页都显示 */
  }
}

关键调整说明

  • 取消页面宽度限制:body { width: auto; overflow-x: visible; } 让页面不再强制内容适配单页宽度,超出部分自动生成新的打印页面
  • 表格自适应宽度:table { width: auto; } 避免表格被强制压缩,保留原始列宽
  • 保持行完整性:page-break-inside: avoid 确保整行不会被拆分成两页,提升可读性

额外建议

在浏览器打印设置中选择横向打印,可以在单页容纳更多列,进一步减少分页数量。


内容的提问来源于stack exchange,提问作者Helen Araya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:39:25