HTML 到 PDF:元素重叠固定页脚

HTML to PDF: Elements overlapping fixed footer

我想将 HTML 呈现为 PDF。为了让它工作,我使用了 Browsershot,它使用无头 Chrome 来渲染 HTML 和 CSS.

这是我为适应 A4 格式而添加的样式:

<head>
    <meta charset="utf-8">
    <meta content="IE=edge" http-equiv="X-UA-Compatible">
    <meta content="width=device-width,initial-scale=1.0" name="viewport">
    <!-- Styles -->
    <link href="{{ asset(('/css/app.css')) }}" rel="stylesheet">

    <link rel="preconnect" href="https://fonts.gstatic.com">
    <link
        href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap"
        rel="stylesheet">

    <style>
        @page {
            size: A4;
            margin: 11mm 17mm 6mm 17mm;
        }

        @media print {
            #footer {
                position: fixed;
                bottom: 0;
            }

            .unbreak-element {
                page-break-inside: avoid;
                page-break-after: avoid;
            }

           /* html, body {
                 height: 297mm;
            }*/
        }

    </style>
</head>

这是我的页脚,其中包括:

<div class="grid grid-cols-3" id="footer">
    <address class="text-muted not-italic text-xs text-gray-900 font-extralight">
        Text <br/>
        Text <br/>
        Text <br/>
        Text <br/>
     </address>
    <div class="text-muted not-italic text-xs text-gray-900 font-extralight">
        Text <br/>
        Text <br/>
        Text <br/>
        Text <br/>
    </div>
    <div class="text-muted not-italic text-xs text-gray-900 font-extralight">
        Text <br/>
        Text <br/>
        Text <br/>
        Text <br/>
    </div>
</div>

我的问题是:非常大的元素现在像这样重叠在页脚部分:

我的问题:如何避免重叠并将 table 打断到下一页?

an answer that answers a similar question that references an article 可能会对您有所帮助。

要点是您需要表格以在底部为固定页脚保留 space:

.main-footer .inner {
  bottom: 0;
  position: fixed;
}
<table>
  <tbody>
    <tr>
      <td>
        <header>
          <h1>Page Title</h1>
        </header>
        
        <p>Lorem ipsum...</p>
      </td>
    </tr>
  </tbody>
  
  <tfoot>
    <tr>
      <td>
        <footer class="main-footer">
          <div class="inner">
            <small>© YEAR AUTHOR</small>
          </div>
        </footer>
      </td>
    </tr>
  </tfoot>
</table>

这并不理想,因为这些不是语义表。我设法让 CSS 个表在 firefox 中工作,就像这样:

body {
  display: table;
}

.main-header,
.main-body {
  display: table-row-group;
}

.main-footer {
  display: table-footer-group;
}
<header class="main-header">
  <h1>Page Title</h1>
</header>

<div class="main-body">
  <p>Lorem ipsum...</p>
</div>

<footer class="main-footer">
  <small>© YEAR AUTHOR</small>
</footer>

但是,一旦我尝试使用

将页脚固定到底部位置
<footer class="main-footer">
  <div class="inner">
    <!-- footer content -->
  </div>
</div>
.main-footer {
  display: table-footer-group;
}

.main-footer::after {
  content: "";
  display: block;
  height: 2em;
}

.main-footer .inner {
  bottom: 0;
  display: block;
  position: fixed;
}

...firefox 页脚被绘制了两次(有轻微偏移)。我相信这是一个浏览器错误。

一直以来 CSS 表在 chrome 中根本不起作用(我也认为这是一个错误)。