2016-07-25 13 views
0

Ich versuche, die dynamischen Daten in die PDF-Datei mit jsPdf AutoTable zu drucken. Aber das konnte ich nicht tun. Ich habe in vielen Seiten gesucht, aber niemand hat über dynamische Daten in die Zeile gesagt. Also hier meine Frage ist, gibt es eine Möglichkeit, die Dynamic-Daten in die Tabellenzeile zu bekommen, wenn es so jemand klären kann pls. Hinweis: [Hier verwende ich nicht HTML, um die Daten im Pdf zu speichern, ich habe die Daten direkt von der js].Probleme beim Versuch, dynamische Daten in jsPdf AutoTable

this.print=function(){ 
 
     \t { 
 
     \t \t 
 
     \t \t var mainData =this.printData(); // Here am getting Full Json data Here 
 
     \t \t var steps = mainData.steps; // From that data am Separating what i need 
 
     \t \t var criticality = mainData.criticality; 
 
     \t \t var categories = mainData.categories; 
 
     \t \t var checkup = mainData.checkup; 
 
     \t \t 
 
      // This is For to Take the Steps Data alone 
 
       $scope.getSteps = function(steps) { 
 
        var data = []; 
 
        for (var i = steps.length; i-- > 0;) { 
 
        data.push(steps[i].name+"\n"+"\n"); 
 
        } 
 
        return data; 
 
       } 
 
       
 
        // Like wise am getting every single object data's 
 
        $scope.getNumbersOfSubSteps = function(steps) { 
 
        var data = 0; 
 
        for (var i = 0 ; i < steps.length; i++) { 
 
        for (var j = 0; j<steps[i].steps.length; j++) { 
 
         } 
 
        data = j ; 
 
        } 
 
        return data; 
 
       } 
 

 
       // this is for Sub Proceeses 
 
       $scope.getSubProcesses = function(steps) { 
 
        var data = []; 
 
        for (var i = 0 ; i < steps.length; i++) { 
 
         for (var j = 0; j<steps[i].steps.length; j++) { 
 
          data.push(steps[i].steps[j].name+"\n");     
 
        } 
 
        } 
 
        return data; 
 
       } 
 
        
 
        $scope.getCategories = function(categories) { 
 
        var data = []; 
 
        for (var i = categories.length; i-- > 0;) { 
 
        data.push(categories[i].name+"\n"); 
 
        } 
 
        return data; 
 
       } 
 
        
 
        $scope.getCriticality = function(criticality) { 
 
        var data = []; 
 
        for (var i = criticality.length; i-- > 0;) { 
 
        data.push(criticality[i].name+"\n"); 
 
        } 
 
        return data; 
 
       } 
 
      
 
       // Pdf Print Function Begins 
 
        
 
       var columns = ["ProcessDescription", "Steps", "#ofSubProcesses", "SubSteps","Category","Criticality","CheckUp"]; 
 
       var processDescription =mainData.description; 
 
       var processes= $scope.getSteps(steps); 
 
       var NoOfSubProcess = $scope.getNumbersOfSubSteps(steps); 
 
       var subProcesses = $scope.getSubProcesses(steps); 
 
       console.log('Subprocsses length',subProcesses); 
 
       var categories = $scope.getCategories(categories); 
 
       var criticality = $scope.getCriticality(criticality); 
 
       
 
       // The Problem Begins here , Am struggling to Get the Separate data's here ! 
 
       var rows = [ 
 
            [processDescription,processes,NoOfSubProcess,subProcesses,categories,criticality] 
 
          
 
          ]; 
 
       
 
       var pdfsize='a1'; 
 
       var doc = new jsPDF('p', 'pt',pdfsize); 
 
     
 
       doc.autoTable(columns, rows, { 
 
       \t theme: 'striped', // 'striped', 'grid' or 'plain' 
 
       \t styles: { 
 
       \t  overflow: 'linebreak', 
 
       \t  columnWidth: 'wrap' 
 
       \t  }, 
 
       \t  beforePageContent: function(data) { 
 
       \t   doc.text("Process Name :"+mainData.name, 40, 30); 
 
       \t  }, 
 
        columnStyles: { 
 
         1: {columnWidth: 'auto'} 
 
        } 
 
        }); 
 

 
        doc.save(mainData.name+ pdfsize +".pdf"); 
 
      } 
 
      \t 
 
     \t 
 
      
 
     };

+0

Was meinen Sie mit dynamischen Daten? Sie können die Zeilenobjekte mit einer Schleife erstellen, bevor Sie beispielsweise Autotable aufrufen? –

+0

Dynamische Datenwerte, var processes = $ scope.getSteps (Schritte); -> Dieser Prozess hat drei Prozesse hinein. Wenn ich Process in diese Zeile verwende, druckt er drei Daten in derselben Zelle, –

+0

Sie müssten Prozesse in ein Format umwandeln, das dem von Autotable verwendeten entspricht. Wenn Sie in der Repo Es gibt eine examples/examples.js-Datei im Repo, die dynamische Daten verwendet, wenn Sie Zeiger wollen. –

Antwort

1

Sie diese ersetzen müssen:

var rows = [ 
    [processDescription,processes,NoOfSubProcess,subProcesses,categories,criticality] 
]; 

mit etwas wie folgt aus:

var rows = []; 
for (var k = 0 ; k < processes.length; k++) { 
    rows.push([ 
     processDescription, 
     processes[k], 
     NoOfSubProcess, 
     subProcesses[k], 
     categories[k], 
     criticality[k] 
    ]); 
}; 

Die Zeilen Parameter ein Array von Arrays sein sollte. Was du da reingibst, ist im Grunde eine Anordnung von Arrays, wenn ich es richtig verstanden habe.

+0

Ich habe ein neues seltsames Problem !!! Wenn möglich, können Sie mein Problem lösen http://stackoverflow.com/questions/38647201/cannot-find-name-jspdf-in-typescript –