因此,我最近刚刚根据客户的要求在我的 pdf 创建中添加了对行跨度的支持。但它没有按预期工作。
按照示例中的代码,我添加了行跨度,它可以正常工作......在最后一列。与前几款相比没有那么多。
正如你在这个小提琴上看到的那样。
关于它如何工作的一点解释......或者我打算让它工作。
创建表的 json 时,我将单元格生成的行数存储在值中,用 * 分隔数量和值
var val = cell
? cell.hasChildNodes() && cell.childNodes[0].tagName !== undefined
? cell.childNodes[0].textContent + (cell.getAttribute("rowSpan") ? "*" + cell.getAttribute("rowSpan") : '')
: cell.textContent.trim()
: '';
在渲染 pdf 时drawCell
,我会检查该值是否包含 *,所以我知道它是一个生成行的单元格,所以我split
对值执行 a 并获取它跨越的行数和应该出现的值,创建具有正确大小和位置的表格单元格
drawCell:
function (cell, data) {
if (cell.raw === undefined)
return false;
if(cell.raw.indexOf("*") > -1) {
var text = cell.raw.split("*")[0];
var times = parseInt(cell.raw.split("*")[1]);
doc.rect(cell.x, cell.y, cell.width, cell.height * times, 'DF');
doc.autoTableText(text, cell.x + cell.width / 2, cell.y + cell.height * times / 2, {
halign: 'center',
valign: 'middle'
});
return false;
}
}
有任何想法吗???
编辑
我只是稍微调整了一下小提琴,我得到了一个可观的结果
以前,我在单元格生成行的行尾丢失了单元格
因此,我没有忽略由于行生成而隐藏的那些单元格,而是将它们的raw
值设置为空字符串
if (cell.raw === undefined)
cell.raw = '';
现在,我得到了完整的网格
但是,又一次,pdf 在我生成的单元格中间呈现行线。看起来更好,但仍然不是预期的结果。这是更新的小提琴,也针对黑白着色进行了调整,并使用了最新版本的 jspdf-AutoTable
我已经将单元格边框宽度设置为 0,但由于某种原因,调整后的宽度是行尾的单元格
if (cell.raw === undefined) {
cell.raw = '';
cell.styles.lineWidth = 0;
}