pdfMake无法读取未定义的属性'_calcWidth'

时间:2018-09-06 20:03:18

标签: javascript angularjs pdf pdf-generation pdfmake

我正在尝试从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();
}

4 个答案:

答案 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'
                ]
            ]
        }
    }