2016-08-01 2 views
0

Я пытаюсь распечатать динамические данные в pdf-файл, используя jsPdf Auto-table. Когда я делаю это я получил какой-то ошибки какUncaught TypeError в jsPdf autotable

The headers should be an object or array, is: function (jspdf.plugin.autotable.js:10)

The data should be an object or array, is: function  (jspdf.plugin.autotable.js:10) 

TypeError: t.forEach is not a function  (angular.js:12314) 

Вот мой код,

  var getColumns = function() { 
 
       \t  return [ 
 
       \t   {title: "ID", dataKey: "id"}, 
 
       \t   {title: "Name", dataKey: "first_name"}, 
 
       \t   {title: "Email", dataKey: "email"}, 
 
       \t   {title: "City", dataKey: "city"}, 
 
       \t   {title: "Country", dataKey: "country"}, 
 
       \t   {title: "Expenses", dataKey: "expenses"} 
 
       \t  ]; 
 
       \t }; 
 
       \t function getData(mainSteps) { 
 
       \t  mainSteps = mainSteps || 4; 
 
       \t  //var sentence = faker.lorem.words(12); 
 
       \t  var data = []; 
 
       \t  for (var j = 1; j <= rowCount; j++) { 
 
       \t   data.push({ 
 
       \t    id: j, 
 
       \t    first_name: this.getSteps(), 
 
       \t    email: this.getSteps(), 
 
       \t    country: this.getSteps(), 
 
       \t    city: this.getSteps()(), 
 
       \t    expenses: this.getSteps() 
 
       \t   // text: shuffleSentence(sentence), 
 
       \t    //text2: shuffleSentence(sentence) 
 
       \t   }); 
 
       \t  } 
 
       \t  return data; 
 
       \t } 
 
       var pdfsize='a4'; 
 
       var doc = new jsPDF('p', 'pt',pdfsize); 
 
     
 
       doc.autoTable(getColumns, getData, { 
 
       \t theme: 'grid', // 'striped', 'grid' or 'plain' 
 
       \t headerStyles: { 
 
         fillColor: [12, 234, 227], 
 
         textColor: [12, 1, 1] 
 
        }, 
 
        // margin: { top: 50, left: 20, right: 20, bottom: 0 }, 
 
       \t styles: { 
 
       \t  overflow: 'linebreak', 
 
       \t  columnWidth: 88 
 
       \t  }, 
 
       \t  beforePageContent: function(data) { 
 
       \t  \t 
 
       \t   doc.text("Process Name :"+mainData.name+" || "+"Description :"+mainData.description, 40, 30); 
 
       \t   
 
       \t  }, 
 
       \t  //startY: doc.autoTableEndPosY() + 20, 
 
        columnStyles: { 
 
         0: {columnWidth: 200} 
 
        } 
 
        }); 
 
       //startY: doc.autoTableEndPosY() + 20 
 
        doc.save(mainData.name+".pdf"); 
 
      } 
 
     };
Примечание: Если ошибка в моем коде значит, я могу найти решение для этого, но он говорит, что ошибка находится в (jspdf.plugin.autotable.js: 10) и (angular.js: 12314), поэтому меня путают здесь. Может кто-то уточнить мне PLS.

ответ

2

Поскольку ошибки объясняют, что входными данными должны быть массивы или объекты. В вашем случае это просто означает вызов функций вместо того, чтобы отправлять их в autotable. Заменить этот

doc.autoTable(getColumns, getData, {...});

с

doc.autoTable(getColumns(), getData(), {...});

+1

Да, вы правы. Это была моя «неосторожная» ошибка :( –

+0

, привет, у меня есть небольшое сомнение. Я пытаюсь применить специальный столбец ширины. Поэтому я выполнил вашу инструкцию на вашем сайте github. Но после применения этого, похоже, я сделал Я работаю для меня. Можете ли вы мне помочь? Вот мой код -> {title: «Категория», dataKey: «cate», width: 20}, –

+0

или есть ли другой способ сделать это? –