从Angular 6中的HTML导出Pdf

时间:2018-11-20 08:16:24

标签: angular typescript angular6 jspdf

我想以角度6从html导出pdf。因此,我正在使用jspdf库。但是我不能给出颜色和背景色之类的样式。我该如何实现? (如果jspdf中还有其他免费库,我可以使用它)您可以从下面的链接中查看演示。

DEMO

.ts文件

export class AppComponent  {
  @ViewChild('reportContent') reportContent: ElementRef;

    downloadPdf() {
    const doc = new jsPDF();
    const specialElementHandlers = {
      '#editor': function (element, renderer) {
        return true;
      }
    };

    const content = this.reportContent.nativeElement;

    doc.fromHTML(content.innerHTML, 15, 15, {
      'width': 190,
      'elementHandlers': specialElementHandlers
    });

    doc.save('asdfghj' + '.pdf');
  }
}

.html文件

<div #reportContent class="p-col-8 p-offset-2">
  <table>
    <tr>
      <td style="color: red;background-color: blue;border:solid;">1111
      </td>
      <td style="border:solid;">2222
      </td>
    </tr>
  </table>
</div>

<button pButton type="button" label="Pdf" (click)="downloadPdf()">Export Pdf</button>

5 个答案:

答案 0 :(得分:1)

captureScreen() {
    const pdf = new jsPDF('p', 'mm');
    const promises = $('.pdf-intro').map(function(index, element) {
      return new Promise(function(resolve, reject) {
        html2canvas(element, {allowTaint: true, logging: true}).then(function(canvas) {
          resolve(canvas.toDataURL( 'image/jpeg', 1.0 ));
        }).catch(function(error) {
          reject('error in PDF page: ' + index);
        });
      });
    });

    Promise.all(promises).then(function(dataURLS) {
      console.log(dataURLS);
      for ( const ind in dataURLS) {
        if (dataURLS.hasOwnProperty(ind)) {
          console.log(ind);
          pdf.addImage(dataURLS[ind], 'JPEG', 0, 0, pdf.internal.pageSize.getWidth(), pdf.internal.pageSize.getHeight());
            pdf.addPage();

        }
      }
      pdf.save('HTML-Document.pdf');
    });
  }

captureScreen() { const pdf = new jsPDF('p', 'mm'); const promises = $('.pdf-intro').map(function(index, element) { return new Promise(function(resolve, reject) { html2canvas(element, {allowTaint: true, logging: true}).then(function(canvas) { resolve(canvas.toDataURL( 'image/jpeg', 1.0 )); }).catch(function(error) { reject('error in PDF page: ' + index); }); }); }); Promise.all(promises).then(function(dataURLS) { console.log(dataURLS); for ( const ind in dataURLS) { if (dataURLS.hasOwnProperty(ind)) { console.log(ind); pdf.addImage(dataURLS[ind], 'JPEG', 0, 0, pdf.internal.pageSize.getWidth(), pdf.internal.pageSize.getHeight()); pdf.addPage(); } } pdf.save('HTML-Document.pdf'); }); }

有了这个,我们必须将jsPDF和html2Canvas导入代码

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

为此,您必须执行npm安装以下内容 import * as jsPDF from 'jspdf'; import * as html2canvas from 'html2canvas';

通过此操作,在scripts标记内的angular.json文件中添加以下内容

npm install jspdf --save
npm install --save @types/jspdf
npm install html2canvas --save
npm install --save @types/html2canvas

npm install jspdf --save npm install --save @types/jspdf npm install html2canvas --save npm install --save @types/html2canvas

在component.html内添加如下代码:

使用此代码添加css,就像通常添加component.css一样,它将被呈现。

希望,这可以解决您的问题。

答案 1 :(得分:1)

您可以使用jsPDFdom to image包来导出带有id='dashboard'的HTML div。

安装软件包

import * as domtoimage from 'dom-to-image';
import * as FileSaver from 'file-saver';
import * as jsPDF from 'jspdf';

TS文件

domtoimage.toPng(document.getElementById('dashboard'))
    .then(function (blob) {
        var pdf = new jsPDF('l', 'pt', [$('gridster').width(), $('gridster').height()]);
        pdf.addImage(blob, 'PNG', 0, 0, $('gridster').width(), $('gridster').height());
        pdf.save(`${that.dashboardName}.pdf`);
    });

HTML

<gridster id='dashboard'></gridster>

答案 2 :(得分:0)

  

[https://www.c-sharpcorner.com/article/convert-html-to-pdf-using-angular-6/][1                   npm安装jspdf
                  要安装html2canvas软件包,请使用给定的npm命令。                   npm安装html2canvas
                  当我们完成了安装部分后,就该使用import语句将其导入到我们的组件中了。

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

                <div id="content" #content>  
            <mat-card>  
                <div class="alert alert-info">  
                    <strong>Html To PDF Conversion - Angular 6</strong>  
                </div>  
                <div>  
                <input type="button" value="CPTURE" (click)="captureScreen()"/>  
                </div>  
            </mat-card>  
            </div>  
            <div >  
            <mat-card>  
                <table id="contentToConvert">  
                    <tr>  
                    <th>Column1</th>  
                    <th>Column2</th>  
                    <th>Column3</th>  
                    </tr>  
                    <tr>  
                    <td>Row 1</td>  
                    <td>Row 1</td>  
                    <td>Row 1</td>  
                    </tr>  
                    <tr>  
                    <td>Row 2</td>  
                    <td>Row 2</td>  
                    <td>Row 2</td>  
                    </tr>  
                    <tr>  
                    <td>Row 3</td>  
                    <td>Row 3</td>  
                    <td>Row 3</td>  
                    </tr>  
                    <tr>  
                    <td>Row 4</td>  
                    <td>Row 4</td>  
                    <td>Row 4</td>  
                    </tr>  
                    <tr>  
                    <td>Row 5</td>  
                    <td>Row 5</td>  
                    <td>Row 5</td>  
                    </tr>  
                    <tr>  
                    <td>Row 6</td>  
                    <td>Row 6</td>  
                    <td>Row 6</td>  
                    </tr>  
                </table>  

            </mat-card>  
            </div>  

                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');  
                html2canvas(data).then(canvas => {  
                // Few necessary setting options  
                var imgWidth = 208;   
                var pageHeight = 295;    
                var imgHeight = canvas.height * imgWidth / canvas.width;  
                var heightLeft = imgHeight;  

                const contentDataURL = canvas.toDataURL('image/png')  
                let pdf = new jspdf('p', 'mm', 'a4'); // A4 size page of PDF  
                var position = 0;  
                pdf.addImage(contentDataURL, 'PNG', 0, position, imgWidth, imgHeight)  
                pdf.save('MYPdf.pdf'); // Generated PDF   
                });  
            }  
            } 

                new JsPDF(  
                Orientation, // Landscape or Portrait  

                unit, // mm, cm, in  

                format // A2, A4 etc  
            );  

答案 3 :(得分:0)

使用这种方式stackblitz example 在您的演示中以这种方式使用

$(function() { 
    $(document).on("click", function() {
        $(".popup-box:visible").fadeOut(150);
    });
});

答案 4 :(得分:-1)

html2canvas将解决您的问题。如下更新代码。

downloadPdf() {
const doc = new jsPDF();
const content = this.reportContent.nativeElement;
html2canvas(content).then(canvas => {
        const imgData = canvas.toDataURL('image/png');
        // Few necessary setting options
        const imgWidth = 208;
        const pageHeight = 295;
        const imgHeight = canvas.height * imgWidth / canvas.width;
        const doc = new jspdf('p', 'mm');
        let heightLeft = imgHeight;
        let position = 0;

        doc.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
        heightLeft -= pageHeight;
        while (heightLeft >= 0) {
            position = heightLeft - imgHeight;
            doc.addPage();
            doc.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
            heightLeft -= pageHeight;
        }
        // Generated PDF
        doc.save('asdfghj' + '.pdf');
    });

}