【问题标题】:page-break not working in html-pdf coverter in nodejs分页符在节点 js 中的 html-pdf 转换器中不起作用
【发布时间】:2020-07-16 00:46:04
【问题描述】:

我正在使用 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 时就不起作用了。

【问题讨论】:

  • 可以分享nodejs代码吗?
  • @Gagantous : 原始发帖人已经九个月没有在 Stackoverflow 登录了,所以很可能我们不会得到回复是否对他/她有帮助......跨度>
  • @Johannes,我和他有 smae 问题,技术上不一样,但相似。我找不到这个问题的任何答案。

标签: css node.js html-table page-break html-pdf


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我建议使用tr, td { page-break-inside: avoid; } 来防止行和单元格内的中断。

    【讨论】:

      【解决方案3】:

      我会推荐下面的 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-18
        • 2021-07-11
        • 2016-09-05
        • 2019-08-10
        • 1970-01-01
        • 2021-11-27
        • 2016-04-16
        相关资源
        最近更新 更多