如何使用 jsPDF Autotable 插件设置最后一行的样式?
How can I style last row using jsPDF Autotable plugin?
我使用 jsPDF
和 AutoTable
创建了一个基于 table 的 PDF 文档:
var doc = new jsPDF('p', 'pt');
//columns and rows are arrays created from the table content
doc.autoTable(columns, rows, {
drawRow: function (row) {
if (row.index == rows.length - 1) {
console.log('last row');
//TODO
}
},
pageBreak: 'avoid',
headerStyles: {
fillColor: [239, 154, 154],
textColor: [0, 0, 0],
halign: 'center'
},
bodyStyles: {
halign: 'center'
},
margin: {top: 60},
theme: 'striped'
});
doc.save('table.pdf');
我想做的是为最后 table 行设置不同的背景颜色。如上面的代码所示,我可以检测到最后一行何时被绘制,但是我无法修改它。我尝试使用 RGB 值设置 row.fillColor
,但似乎没有效果。
我也查看了 examples,但找不到任何可以帮助我解决该问题的内容。有什么想法吗?
要动态更改样式,您有两种选择。第一种是使用didParseCell
改变autoTable样式:
doc.autoTable({
html: '#table',
didParseCell: function (data) {
var rows = data.table.body;
if (data.row.index === rows.length - 1) {
data.cell.styles.fillColor = [239, 154, 154];
}
}
});
如果您更愿意使用 jspdf 样式函数,第二种是使用 willDrawCell
:
doc.autoTable({
html: '#table',
willDrawCell: function (data) {
var rows = data.table.body;
if (data.row.index === rows.length - 1) {
doc.setFillColor(239, 154, 154);
}
},
});
查看更多高级示例here。
距离上次回答这个问题已经快三年了。
我正在努力使用 drawCell 函数来实现这种效果。
在 jspdf-autotable": "^3.0.10"
中,您应该使用以下三个回调之一来实现您想要的:
// Use to change the content of the cell before width calculations etc are performed
didParseCell: function (data) {
},
willDrawCell: function (data) {
},
// Use to draw additional content such as images in table cells
didDrawCell: function (data) {
},
在您的情况下,willDrawCell
是您要使用的那个。
所以代码将是这样的:
doc.autoTable({
columns,
body,
headStyles: {
fillColor: "#0d47a1"
},
willDrawCell: drawCell
});
let drawCell = function(data) {
var doc = data.doc;
var rows = data.table.body;
if (rows.length === 1) {
} else if (data.row.index === rows.length - 1) {
doc.setFontStyle("bold");
doc.setFontSize("10");
doc.setFillColor(255, 255, 255);
}
};
我使用 jsPDF
和 AutoTable
创建了一个基于 table 的 PDF 文档:
var doc = new jsPDF('p', 'pt');
//columns and rows are arrays created from the table content
doc.autoTable(columns, rows, {
drawRow: function (row) {
if (row.index == rows.length - 1) {
console.log('last row');
//TODO
}
},
pageBreak: 'avoid',
headerStyles: {
fillColor: [239, 154, 154],
textColor: [0, 0, 0],
halign: 'center'
},
bodyStyles: {
halign: 'center'
},
margin: {top: 60},
theme: 'striped'
});
doc.save('table.pdf');
我想做的是为最后 table 行设置不同的背景颜色。如上面的代码所示,我可以检测到最后一行何时被绘制,但是我无法修改它。我尝试使用 RGB 值设置 row.fillColor
,但似乎没有效果。
我也查看了 examples,但找不到任何可以帮助我解决该问题的内容。有什么想法吗?
要动态更改样式,您有两种选择。第一种是使用didParseCell
改变autoTable样式:
doc.autoTable({
html: '#table',
didParseCell: function (data) {
var rows = data.table.body;
if (data.row.index === rows.length - 1) {
data.cell.styles.fillColor = [239, 154, 154];
}
}
});
如果您更愿意使用 jspdf 样式函数,第二种是使用 willDrawCell
:
doc.autoTable({
html: '#table',
willDrawCell: function (data) {
var rows = data.table.body;
if (data.row.index === rows.length - 1) {
doc.setFillColor(239, 154, 154);
}
},
});
查看更多高级示例here。
距离上次回答这个问题已经快三年了。
我正在努力使用 drawCell 函数来实现这种效果。
在 jspdf-autotable": "^3.0.10"
中,您应该使用以下三个回调之一来实现您想要的:
// Use to change the content of the cell before width calculations etc are performed
didParseCell: function (data) {
},
willDrawCell: function (data) {
},
// Use to draw additional content such as images in table cells
didDrawCell: function (data) {
},
在您的情况下,willDrawCell
是您要使用的那个。
所以代码将是这样的:
doc.autoTable({
columns,
body,
headStyles: {
fillColor: "#0d47a1"
},
willDrawCell: drawCell
});
let drawCell = function(data) {
var doc = data.doc;
var rows = data.table.body;
if (rows.length === 1) {
} else if (data.row.index === rows.length - 1) {
doc.setFontStyle("bold");
doc.setFontSize("10");
doc.setFillColor(255, 255, 255);
}
};