我正在尝试从HTML表中生成pdf。该表有两列,标题是两个对象的名称。这些对象中的每一个都有一个列表,并且表的行对应于这些列表的值。我正在使用pdf make,下面是我的代码,当我在循环内执行this.rowContent.push("","");
时,出现以下错误Cannot read property '_calcWidth' of undefined
,但同一行this.rowContent.push("","")
在循环外有效。
this.makePDF = function(){
this.rowContent = [];
this.tableheaders = [];
this.tableContent = [];
for(var i = 0;i<this.values1.length;i++){
this.tableheaders[i] = {text: this.values[i].name, bold: true, alignment: 'center'}
}
this.tableContent.push(this.tableheaders);
for(var j = 0;j<this.length;j++){
this.rowContent.push("","");
}
this.tableContent.push(this.rowContent);
this.rowContent = [];
var docDefinition = {
header: 'simple text',
content: [
{
table: {
headerRows: 1,
widths: [ '*', '*' ],
body:this.tableContent
}
}
]
};
pdfMake.createPdf(docDefinition).open();
}
答案 0 :(得分:2)
我认为您忘记将-1放入
for(var j = 0;j<this.length - 1;j++)
for(var i = 0;i<this.values1.length -1;i++)
当你说
i < this.length
对于i = this.length,您尝试访问数组中不存在的元素。
A = ['I','M]
A.length = 2
A[0] = 'I
A[1]= 'M'
但是A [2]未定义,因为它在A中不存在
更多,我想您忘记了将变量放在要应用长度函数的位置,例如
for(var j = 0;j<this.length - 1;j++)
答案 1 :(得分:1)
也许问题是widths
数组包含太多元素。它应该始终包含与表body
中的数组一样多的元素。
操作方法:
content: [{
table: {
headerRows: 1,
widths: ['*', '*'],
body: [
['item1', 'item2'],
['item1', 'item2']
]
}
}]
如何不这样做:
content: [{
table: {
headerRows: 1,
widths: ['*', '*','*'],
body: [
['item1', 'item2'],
['item1', 'item2']
]
}
}]
答案 2 :(得分:0)
就我而言,导致此问题的原因是事实,
我从一个表中导出到pdf,其中headers()的数量和column()的数量不同。
修复它并确保表具有相同数量的标题和行列之后,问题就解决了。
答案 3 :(得分:0)
当我生成没有colSpan / rowSpan值的表时,我遇到了同样的问题。 这是一个如何从以下位置正确进行操作的示例:http://pdfmake.org/playground.html
{
style: 'tableExample',
table: {
body: [
[
{
colSpan: 3,
text: 'colSpan: 3\n\nborder:\n[false, false, false, false]',
fillColor: '#eeeeee',
border: [false, false, false, false]
},
'',
''
],
[
'border:\nundefined',
'border:\nundefined',
'border:\nundefined'
]
]
}
}