how to use jsPDF and jspdf-autotable in angular 5

后端 未结 10 977
北海茫月
北海茫月 2021-01-06 01:46

I am trying to use jsPDF and jspdf-autotable in my Angular 5.2.0 project. My package.json is below (related parts):

\"dependencies\": {
    ...
    \"jspdf\"         


        
10条回答
  •  长情又很酷
    2021-01-06 02:25

    Angular 8 +

    This is how i did in Angular 8 please check below example which generate fake user using faker service, you can change it with your API response.

    Install packages via npm

    npm i jspdf jspdf-autotable faker --save
    

    Install types

    npm install @types/jspdf  @types/faker --save-dev
    

    add below entries into angular.json

    "scripts": [
                  "node_modules/jspdf/dist/jspdf.min.js",
                  "node_modules/jspdf-autotable/dist/jspdf.plugin.autotable.js"
                ]
    

    component.ts

    
    import * as faker from 'faker'; // Not really require by jspdf or jsPDF-AutoTable 
    declare var jsPDF: any;
    
    
    @Component({
      selector: 'faker',
      templateUrl: './faker.component.html',
    })
    
    
    export class FakerPDFGeneratorComponent {
    
    
    
     headRows() {
        return [{id: 'ID', name: 'Name', email: 'Email', city: 'City', expenses: 'Sum'}];
      }
    
        footRows() {
        return [{id: 'ID', name: 'Name', email: 'Email', city: 'City', expenses: 'Sum'}];
      }
    
       bodyRows(rowCount) {
        rowCount = rowCount || 10;
        let body = [];
        for (var j = 1; j <= rowCount; j++) {
          body.push({
            id: j,
            name: faker.name.findName(),
            email: faker.internet.email(),
            city: faker.address.city(),
            expenses: faker.finance.amount(),
          });
        }
        return body;
      }
    
    createPdf() {
        var doc = new jsPDF();
    
        doc.setFontSize(18);
        doc.text('With content', 14, 22);
        doc.setFontSize(11);
        doc.setTextColor(100);
    
        // jsPDF 1.4+ uses getWidth, <1.4 uses .width
        var pageSize = doc.internal.pageSize;
        var pageWidth = pageSize.width ? pageSize.width : pageSize.getWidth();
        var text = doc.splitTextToSize(faker.lorem.sentence(45), pageWidth - 35, {});
        doc.text(text, 14, 30);
    
        doc.autoTable({
          head: this.headRows(),
          body: this.bodyRows(40),
          startY: 50,
          showHead: 'firstPage'
        });
    
        doc.text(text, 14, doc.autoTable.previous.finalY + 10);
    
        doc.save('table.pdf');
      }
    
    }
    
    

    Go ahead and play around with code and demo

提交回复
热议问题