我正在尝试使用 html2pdf 将 HTML 页面下载为 PDF,但是如果表格的内容太长,它往往会在中途破坏 TR。
这个问题有什么解决办法吗?
pagebreak: { avoid: ['tr', 'td'] }
var opt = {
margin: 0.5,
filename: dashboard_name + '_' + client_name + '.pdf',
pagebreak: { avoid: ['tr', 'td'] },
image: { type: 'jpeg', quality: 1 },
html2canvas: { dpi: 192, width: $(window).width()},
jsPDF: {
orientation: pageOrient,
unit: 'cm',
format: 'a2',
compress: true
}
};
@media print {
table, div {
break-inside: avoid;
}
}
thead { display: table-header-group; }
tfoot { display: table-row-group;}
tr {
page-break-after: always!important;
page-break-before: always!important;
page-break-inside: auto!important;
}
mode: ['avoid-all', 'css', 'legacy']
},`
我们将以下版本视为当前版本:
html2pdf.js
:0.10.1
。默认分页模式:
['css', 'legacy']
。
添加
avoid-all
分页模式解决了问题:
const opt = {
<…>,
pagebreak: {
mode: ['avoid-all', 'css', 'legacy']
},
<…>
};
请参阅文档部分:html2pdf.js |使用纯 JS 进行客户端 HTML 到 PDF 渲染。 |选项|分页符。
index.html
)请适当地记下并解决 TODO 注释。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>HTML table</title>
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js"
integrity="sha512-GsLlZN/3F2ErC5ifS5QtgpiJtWd43JWSuIgh7mbzZ8zBps+dvLusV+eNQATqgA/HdeKFVgA5v3S/cIrLF7QnIg=="
crossorigin="anonymous"
referrerpolicy="no-referrer">
</script>
</head>
<body>
<h1>HTML table</h1>
<button onclick="printTable()">
Print to PDF
</button>
<table id="long-table">
<tr>
<th>Company</th>
<th>Contact</th>
<th>Country</th>
</tr>
<!-- TODO: Duplicate the below row many times. -->
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
</table>
<script defer>
function printTable() {
const element = document.getElementById('long-table');
var opt = {
pagebreak: {
mode: ['avoid-all', 'css', 'legacy']
}
};
html2pdf(element, opt);
}
</script>
</body>
</html>
另一个例子: