2016-08-01 20 views
0

Ich versuche, die dynamischen Daten in PDF-Datei mit jsPdf Auto-Tabelle zu drucken. Wenn dies tut ich erhielt eine Art von Fehler ist wieUncaught TypeError in 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) 

Hier ist mein Code,

  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"); 
 
      } 
 
     };
Hinweis: Wenn der Fehler in meinem Code ist bedeuten kann i finde die lösung dafür, aber es heißt fehler ist in (jspdf.plugin.autotable.js: 10) und (angular.js: 12314) also bin ich hier verwirrt. Kann mir jemand erklären, bitte.

Antwort

2

Wie die Fehler erklären, müssen die Eingabedaten Arrays oder Objekte sein. In Ihrem Fall bedeutet das einfach, die Funktionen aufzurufen, anstatt sie an Autotable zu senden. Ersetzen Sie diese

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

mit

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

+1

Ja, Sie richtig sind. Das war mein "unvorsichtiger" Fehler :( –

+0

, Hey hi .. Ich habe einen kleinen Zweifel. Ich versuche, benutzerdefinierte Breite Spalte anwenden. Also ich folgte Ihrer Anweisung in Ihrer Github-Website. Aber nach dem Anwenden scheint es wie ich didn Kannst du mir bitte helfen? Hier ist mein Code -> {title: "Category", dataKey: "cate", width: 20}, –

+0

oder gibt es einen anderen Weg? –