Search code examples
angulartypescriptjspdfhtml-to-pdf

How do I convert with Angular: HTML into PDF


I'm using Angular and I wanna convert a table from html into pdf, this is my code in component.ts:

downloadPDF() {
    const doc = new jsPDF();
    const specialElememtHandlers = {
        '#editor'(element, renderer) {
            return true;
        }
    };

    doc.fromHTML(this.content.nativeElement.innerHTML, 15, 15, {
        width: 190,
        elementHandlers: specialElememtHandlers
    });
    doc.save('test.pdf');
}

and my html code is:

<button (click)="downloadPDF()">Save as PDF</button>

I actually can download a pdf, but it is completely white.


Solution

  • Firstly Install this package

    npm install jspdf

    And to install html2canvas package.

    npm install html2canvas

    Import it into our component using the import statement.

    import * as jspdf from 'jspdf';  
    import html2canvas from 'html2canvas'; 
    

    in your TS code:

    import { Component, OnInit, ElementRef ,ViewChild} from '@angular/core';  
    import * as jspdf from 'jspdf';  
    import html2canvas from 'html2canvas';  
    
    @Component({  
      selector: 'app-htmltopdf',  
      templateUrl: './htmltopdf.component.html',  
      styleUrls: ['./htmltopdf.component.css']  
    })  
    export class HtmltopdfComponent{  
      public captureScreen()  
      {  
        var data = document.getElementById('contentToConvert');  //Id of the table
        html2canvas(data).then(canvas => {  
          // Few necessary setting options  
          let imgWidth = 208;   
          let pageHeight = 295;    
          let imgHeight = canvas.height * imgWidth / canvas.width;  
          let heightLeft = imgHeight;  
    
          const contentDataURL = canvas.toDataURL('image/png')  
          let pdf = new jspdf('p', 'mm', 'a4'); // A4 size page of PDF  
          let position = 0;  
          pdf.addImage(contentDataURL, 'PNG', 0, position, imgWidth, imgHeight)  
          pdf.save('MYPdf.pdf'); // Generated PDF   
        });  
      }  
    }