如何使用 jspdf-autotable 打印两个不同的表
How to print two Different Tables using jspdf-autotable
我想使用 jspdf autotable 插件将这两个 table 打印为 pdf。但是我写的脚本只打印了第二个table。我认为问题在于编写脚本。有人会指导我如何使用 jspdf-autotable.
打印这两个 tables
<button onclick="generate()">Print</button>
<table id="tbl1" border="2">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Address</th>
<th>Marks</th>
</tr>
</thead>
<tbody>
<tr>
<td>01</td>
<td>Johnson</td>
<td>UK</td>
<td>112</td>
</tr>
<tr>
<td>02</td>
<td>Jim</td>
<td>US</td>
<td>142</td>
</tr>
<tr>
<td>03</td>
<td>Johnson</td>
<td>UK</td>
<td>112</td>
</tr>
<tr>
<td>04</td>
<td>Jim</td>
<td>US</td>
<td>142</td>
</tr>
</tbody>
</table>
<table id="tbl2" border="2">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Phone</th>
<th>Remarks</th>
</tr>
</thead>
<tbody>
<tr>
<td>Julia</td>
<td>Anderson</td>
<td>2312144</td>
<td>Good</td>
</tr>
<tr>
<td>Emma</td>
<td>Watson</td>
<td>24564456</td>
<td>Excellent</td>
</tr>
<tr>
<td>Jim</td>
<td>Carry</td>
<td>5645648</td>
<td>Seperb</td>
</tr>
<tr>
<td>Harry</td>
<td>Potter</td>
<td>544562310</td>
<td>Ridiculous</td>
</tr>
</tbody>
</table>
这是脚本:
<script>
function generate() {
var doc = new jsPDF('p', 'pt', 'A4');
var res = doc.autoTableHtmlToJson(document.getElementById("tbl1"), true);
doc.autoTable(res.columns, res.data, {margin: {top: 80}});
var res2 = doc.autoTableHtmlToJson(document.getElementById("tbl2"), true);
doc.autoTable(res2.columns, res2.data, {margin: {top: 80}});
doc.save("test.pdf");
}
</script>
第二个 table 很可能印在第一个之上。您必须像这样指定第二个 table 的开始位置:
var res = doc.autoTableHtmlToJson(document.getElementById('tbl1'));
doc.autoTable(res.columns, res.data);
var res2 = doc.autoTableHtmlToJson(document.getElementById('tbl2'));
doc.autoTable(res2.columns, res2.data, {
startY: doc.lastAutoTable.finalY + 50
});
如果使用doc.autoTableHtmlToJson不考虑一个头和重复一行。
这对我有用:
generate(){
const doc = new jsPDF()
doc.autoTable({
theme: 'plain',
headStyles: { fontSize: 10 },
bodyStyles: { fontSize: 8, fontStyle: 'italic' },
head: [['ID', 'Name', 'Country']],
body: [['1', 'Simon', 'Sweden'], ['2', 'Karl', 'Norway']],
});
doc.autoTable({
theme: 'plain',
headStyles: { fontSize: 10 },
bodyStyles: { fontSize: 8, fontStyle: 'italic' },
head: [['ID', 'Name', 'Country']],
body: [['1', 'Simon', 'Swedenddd'], ['2', 'Karl', 'Norway']],
});
// doc.save('table.pdf');
doc.output('dataurlnewwindow'); //to check pdf generate
}
最新jspdf版本的例子
var doc = new jsPDF("landscape");
var header = function () {
doc.setFontSize(14);
doc.setTextColor(40);
doc.setFontStyle('bold');
doc.text("Article", 15, 10);
};
doc.autoTable({html:"#table1", didDrawPage: header});
doc.autoTable({html:"#table2", didDrawPage: header});
doc.autoTable({html:"#table3", didDrawPage: header});
doc.autoTable({html:"#table4", didDrawPage: header});
doc.autoTable({html:"#table5", didDrawPage: header});
doc.save('myPDF.pdf')
仅将 startY 添加到第二个 table
<script>
function generate() {
var doc = new jsPDF('p', 'pt', 'A4');
var res = doc.autoTableHtmlToJson(document.getElementById("tbl1"), true);
doc.autoTable(res.columns, res.data, {margin: {top: 80}});
var res2 = doc.autoTableHtmlToJson(document.getElementById("tbl2"), true);
doc.autoTable(res2.columns, res2.data, startY: doc.lastAutoTable.finalY + 20, {margin: {top: 80}});
doc.save("test.pdf");
}
</script>
我想使用 jspdf autotable 插件将这两个 table 打印为 pdf。但是我写的脚本只打印了第二个table。我认为问题在于编写脚本。有人会指导我如何使用 jspdf-autotable.
打印这两个 tables <button onclick="generate()">Print</button>
<table id="tbl1" border="2">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Address</th>
<th>Marks</th>
</tr>
</thead>
<tbody>
<tr>
<td>01</td>
<td>Johnson</td>
<td>UK</td>
<td>112</td>
</tr>
<tr>
<td>02</td>
<td>Jim</td>
<td>US</td>
<td>142</td>
</tr>
<tr>
<td>03</td>
<td>Johnson</td>
<td>UK</td>
<td>112</td>
</tr>
<tr>
<td>04</td>
<td>Jim</td>
<td>US</td>
<td>142</td>
</tr>
</tbody>
</table>
<table id="tbl2" border="2">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Phone</th>
<th>Remarks</th>
</tr>
</thead>
<tbody>
<tr>
<td>Julia</td>
<td>Anderson</td>
<td>2312144</td>
<td>Good</td>
</tr>
<tr>
<td>Emma</td>
<td>Watson</td>
<td>24564456</td>
<td>Excellent</td>
</tr>
<tr>
<td>Jim</td>
<td>Carry</td>
<td>5645648</td>
<td>Seperb</td>
</tr>
<tr>
<td>Harry</td>
<td>Potter</td>
<td>544562310</td>
<td>Ridiculous</td>
</tr>
</tbody>
</table>
这是脚本:
<script>
function generate() {
var doc = new jsPDF('p', 'pt', 'A4');
var res = doc.autoTableHtmlToJson(document.getElementById("tbl1"), true);
doc.autoTable(res.columns, res.data, {margin: {top: 80}});
var res2 = doc.autoTableHtmlToJson(document.getElementById("tbl2"), true);
doc.autoTable(res2.columns, res2.data, {margin: {top: 80}});
doc.save("test.pdf");
}
</script>
第二个 table 很可能印在第一个之上。您必须像这样指定第二个 table 的开始位置:
var res = doc.autoTableHtmlToJson(document.getElementById('tbl1'));
doc.autoTable(res.columns, res.data);
var res2 = doc.autoTableHtmlToJson(document.getElementById('tbl2'));
doc.autoTable(res2.columns, res2.data, {
startY: doc.lastAutoTable.finalY + 50
});
如果使用doc.autoTableHtmlToJson不考虑一个头和重复一行。 这对我有用:
generate(){
const doc = new jsPDF()
doc.autoTable({
theme: 'plain',
headStyles: { fontSize: 10 },
bodyStyles: { fontSize: 8, fontStyle: 'italic' },
head: [['ID', 'Name', 'Country']],
body: [['1', 'Simon', 'Sweden'], ['2', 'Karl', 'Norway']],
});
doc.autoTable({
theme: 'plain',
headStyles: { fontSize: 10 },
bodyStyles: { fontSize: 8, fontStyle: 'italic' },
head: [['ID', 'Name', 'Country']],
body: [['1', 'Simon', 'Swedenddd'], ['2', 'Karl', 'Norway']],
});
// doc.save('table.pdf');
doc.output('dataurlnewwindow'); //to check pdf generate
}
最新jspdf版本的例子
var doc = new jsPDF("landscape");
var header = function () {
doc.setFontSize(14);
doc.setTextColor(40);
doc.setFontStyle('bold');
doc.text("Article", 15, 10);
};
doc.autoTable({html:"#table1", didDrawPage: header});
doc.autoTable({html:"#table2", didDrawPage: header});
doc.autoTable({html:"#table3", didDrawPage: header});
doc.autoTable({html:"#table4", didDrawPage: header});
doc.autoTable({html:"#table5", didDrawPage: header});
doc.save('myPDF.pdf')
仅将 startY 添加到第二个 table
<script>
function generate() {
var doc = new jsPDF('p', 'pt', 'A4');
var res = doc.autoTableHtmlToJson(document.getElementById("tbl1"), true);
doc.autoTable(res.columns, res.data, {margin: {top: 80}});
var res2 = doc.autoTableHtmlToJson(document.getElementById("tbl2"), true);
doc.autoTable(res2.columns, res2.data, startY: doc.lastAutoTable.finalY + 20, {margin: {top: 80}});
doc.save("test.pdf");
}
</script>