pdfMake Невозможно прочитать свойство '_calcWidth' из неопределенного - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь создать PDF-файл из таблицы HTML. Таблица имеет два столбца, заголовки - это имена двух объектов. Каждый из этих объектов имеет список, и строки таблицы соответствуют значениям этих списков. Я использую 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();
}

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Возможно, проблема в том, что массив widths содержит слишком много элементов. Он всегда должен содержать столько элементов, сколько массивов в таблице body.

Как это сделать:

content: [{
  table: {
    headerRows: 1,
    widths: ['*', '*'],
    body: [
      ['item1', 'item2'],
      ['item1', 'item2']
    ]
  }
}]

Как не сделать это:

content: [{
  table: {
    headerRows: 1,
    widths: ['*', '*','*'],
    body: [
      ['item1', 'item2'],
      ['item1', 'item2']
    ]
  }
}]
0 голосов
/ 07 сентября 2018

Я думаю, что вы забыли поставить -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++)
...