分页符在nodejs中的html-pdf转换程序中不起作用

问题描述 投票:0回答:5

enter image description here我正在使用 html-pdf 2.2.0 模块将我的 html 转换为 pdf。我使用的是多行表格,所以我想使用分页符,这样单行就不会分成两页,但在将其转换为 pdf 时不起作用。

下面是代码示例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<style>
table tbody tr {
    height: 120px;
    border:5px solid red;
}
</style>
<body>
        <table border="1" style="page-break-after: always;">
        <thead>
            <tr>
                <td>AA</td>
                <td>BB</td>
                <td>CC</td>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>


        </tbody>
    </table>
</body>

</html>

当使用简单的 HTML 打印代码(CTRL + P)时,它看起来不错,但当将其转换为 pdf 时,它不起作用。

css node.js html-table page-break html-pdf
5个回答
0
投票

很难找到可以在保留所有布局的同时将内容转换为 PDF 的好包或 API。我花了很多时间调查并尝试了很多不同的解决方案(直接将 HTML 转换为 PDF,转换为 DOCX,然后从 DOCX 转换为 PDF...)。我建议你检查在线转换工具(大多数都是免费的,你可以很快地使用它们,你只需要上传文件,他们会给你一个 PDF 文件供你下载)。如果您只需要转换这个 html 文件,那么这是最好的方法(因为其中一种工具可能会以正确的方式转换它)。如果您需要它作为一项功能,那么您可以向为您工作的转换器提供商请求 API 访问。

通常,当您将 PDF 转换为 HTML 时,它工作正常,但是当您尝试将其转换回来(即使是相同的 HTML)时,它看起来将与原始版本不同。根据我的经验,最好的映射是在 PDF 和 DOCX 文件之间。因此,也许您可以考虑先将 HTML 转换为 DOCX,然后再将 DOCX 转换为 PDF。有一些 npm 包可以同时执行这两种操作,因此您可以检查它们(或考虑再次检查在线转换工具)。


0
投票

我建议使用

tr, td { page-break-inside: avoid; }
来防止行和单元格内部中断。


0
投票

这就是我想出来的

<style>
@media print {
    .page-break {
        page-break-before: always;
    }
}
</style>
<table>
  <thead>
    <tr>
        <th>Index</th>
    </tr>
</thead>
<tbody>
    <% data.forEach((itm, index) => { %>
          <tr>
               <td><%= index + 1 %></td>
          </tr>
          <% if ((index + 1) % 5 === 0) { %> <!-- This will apply page break after every 5 entry on a page -->
              </table>
                   <div class="page-break"></div>
              <table>
            <% } %>
    <% }) %>
</tbody>

-1
投票

我建议使用下面的CSS来解决这个问题

<style type="text/css">
    table { page-break-inside:auto }
    tr    { page-break-inside:avoid; page-break-after:auto }
    thead { display:table-header-group }
    tfoot { display:tenter code hereable-footer-group }
</style>

-1
投票

不幸的是,这种情况是在 Node 中使用一些库将 html 转换为 pdf 时发生的,它甚至被视为报告的错误,到目前为止似乎还没有解决方案,但是,有一种方法可以解决这个问题。

如果不是创建多个列和行,而是将它们全部创建为表格并将其应用到 CSS:

table, tr, td { page-break-inside: avoid; }

就能解决问题。

如何创建表格来解决 HTML 中的问题的示例:

<table>
    <tr>
        <th>AA</th>
        <th>BB</th>
        <th>CC</th>
    </tr>
</table>
<table>
    <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
    </tr>
</table>
<table>
    <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
    </tr>
</table>
<table>
    <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
    </tr>
</table>
...

这是我能够解决 pdf 库节点中问题的唯一方法

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.