javascript - 使用jspdf将html转换为pdf时如何防止从中间剪切内容

标签 javascript html css jspdf

我正在创建一个报告查看器,它有一个导出报告的选项。该报告可以包含动态内容和具有动态行数的表格。

const doc = new jspdf.jsPDF("portrait", "px", [3508, 2480]);
document.querySelector('button').onclick = () => {
  doc.html(document.body, {
    x: 0,
    y: 0,
    margin: [700, 0, 700, 0],
    callback: () => {
       doc.save();
    },
  });
}
*{font-size: 100px}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
      <script
         src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"
         integrity="sha512-BNaRQnYJYiPSqHHDb58B0yaPfCu+Wgds8Gp/gU33kqBtgNS4tSPHuGibyoeqMV/TJlSKda6FXzoEyYGjTe+vXA=="
         crossorigin="anonymous"
         referrerpolicy="no-referrer"
      ></script>
<button>Export as pdf</button>
<table>
  <thead>
    <th>Heading 1</th>
    <th>Heading 2</th>
    <th>Heading 3</th>
    <th>Heading 4</th>
  </thead>
  <tbody>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
    <tr>
      <td>Data</td><td>Data</td><td>Data</td><td>Data</td>
    </tr>
  </tbody>
</table>

pdf 导出在代码段中不起作用,因此创建了一个 fiddle here .您会在 pdf 中观察到一些文本是从中间切掉的。我想阻止这种情况。如果内容变得大于 a4 大小,则内容应仅按整个元素拆分。

实际上,我在 React 中生成了一些复杂的报告。请提供一些通用解决方案。

最佳答案

根据 documentation ,您需要添加选项 autoPaging:'text'“尝试不跨分页符将文本切成两半。”

doc.html(document.body, {
  x: 0,
  y: 0,
  autoPaging: 'text',
  margin: [700, 0, 700, 0],
  callback: () => {
     doc.save();
  },
});

关于javascript - 使用jspdf将html转换为pdf时如何防止从中间剪切内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72425333/

相关文章:

php - file_put_contents 在服务器上不工作

html - 格式丰富的内容用什么标记语言?

html - div没有高度

html - 如何排除整个元素中要从 CSS 应用的一个 html View ?

html - WordPress - 需要 CSS 帮助将导航栏与 div 分开

javascript - Vue js - 找不到图像源时设置替代图像

javascript - uibModal 提供者未知 unitTest

javascript - 单击特定子元素时运行动画,但对所有其他子元素不执行任何操作

javascript - Backbone.js:同一类型的嵌套模型和集合

javascript - 向 Sammy 注册点击事件