Angular 9|8|7 Convert Tables into PDF File using jspdf-autotable Example

Angular tutorial to convert Tabular data into download document of PDF type.

We can convert dynamic data into a table using a jsPDF Autotable library which can be converted into a PDF file to download or open in a new browser tab.

In this article, we will learn How to install and use the jspdf-autotable in the Angular 8/9 project to create a PDF document of JSON object data in the form of a table.

The jspdf-autotable package use jsPDF library which is a very well known and popular library to create PDF files of HTML, Images and JSON data.

Sometimes a user may need to download the data presented on an application page to be downloaded in a PDF file so this plugin resolves those tasks very easily.

Let’s get started to implement the jspdf-autotable in our Angular application.

Version Check:
Angular CLI: 9.0.6
Node: 12.15.0

Create an Angular project

Using NG CLI create new Angular project by running the following command:

$ ng new jspdf-autotable-demo
? Would you like to add Angular routing? Yes
? Which stylesheet format would you like to use? SCSS

Move to project root:

$ cd jspdf-autotable-demo

Install Packages and Types

Run following NPM commands to install the jspdf and jspdf-autotable libraries

$ npm install jspdf jspdf-autotable faker --save

Now open the angular.json file at project root to update scripts property array with JS libraries:

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

Adding Table PDF downloader

Next, move to the component where we want to add this functionality. Here for the sake of simplicity, we are implementing in App component.

Open the app.component.ts file to make the following changes:

As we are using JS libraries, we don't need to import them in the App module. Just import them in the component as shown below:

import * as jsPDF from 'jspdf';
import 'jspdf-autotable';

Define head and table data definition:

  head = [['ID', 'Country', 'Rank', 'Capital']]

  data = [
    [1, 'Finland', 7.632, 'Helsinki'],
    [2, 'Norway', 7.594, 'Oslo'],
    [3, 'Denmark', 7.555, 'Copenhagen'],
    [4, 'Iceland', 7.495, 'Reykjavík'],
    [5, 'Switzerland', 7.487, 'Bern'],
    [9, 'Sweden', 7.314, 'Stockholm'],
    [73, 'Belarus', 5.483, 'Minsk'],
  ]

Add the createPDF method which will create a table them download it as a PDF document:

  createPdf() {
    var doc = new jsPDF();

    doc.setFontSize(18);
    doc.text('My PDF Table', 11, 8);
    doc.setFontSize(11);
    doc.setTextColor(100);


    (doc as any).autoTable({
      head: this.head,
      body: this.data,
      theme: 'plain',
      didDrawCell: data => {
        console.log(data.column.index)
      }
    })

    // Open PDF document in new tab
    doc.output('dataurlnewwindow')

    // Download PDF document  
    doc.save('table.pdf');
  }

The complete app.component.ts file will look this:

// app.component.ts
import { Component } from '@angular/core';

import * as jsPDF from 'jspdf';
import 'jspdf-autotable';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent {
  title = 'jspdf-autotable-demo';

  head = [['ID', 'Country', 'Rank', 'Capital']]

  data = [
    [1, 'Finland', 7.632, 'Helsinki'],
    [2, 'Norway', 7.594, 'Oslo'],
    [3, 'Denmark', 7.555, 'Copenhagen'],
    [4, 'Iceland', 7.495, 'Reykjavík'],
    [5, 'Switzerland', 7.487, 'Bern'],
    [9, 'Sweden', 7.314, 'Stockholm'],
    [73, 'Belarus', 5.483, 'Minsk'],
  ]

  createPdf() {
    var doc = new jsPDF();

    doc.setFontSize(18);
    doc.text('My PDF Table', 11, 8);
    doc.setFontSize(11);
    doc.setTextColor(100);


    (doc as any).autoTable({
      head: this.head,
      body: this.data,
      theme: 'plain',
      didDrawCell: data => {
        console.log(data.column.index)
      }
    })

    // Open PDF document in new tab
    doc.output('dataurlnewwindow')

    // Download PDF document  
    doc.save('table.pdf');
  }

}

In the App template just a button element to call the createPDF method:

<button (click)="createPdf()">Create PDF</button>

That's it now you can run the application by executing $ ng serve --open npm command.

Table Themes:

There are three themes available for the table to be added in theme property above: 'plain', 'grid' and 'plain'

You can check more demos and examples of the official sites and implement the same in Angular application.

 

 

 

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments