如何在角度5中使用jsPDF和jspdf-autotable

RID*_*NIK 5 jspdf jspdf-autotable angular

我想在我的Angular 5.2.0项目中使用jsPDF和jspdf-autotable.我的package.json在下面(相关部分):

"dependencies": {
    ...
    "jspdf": "^1.3.5",
    "jspdf-autotable": "^2.3.2"
    ...
}
Run Code Online (Sandbox Code Playgroud)

我的angular-cli.json在下面(相关部分):

"scripts": [
    ...
    "../node_modules/jspdf/dist/jspdf.min.js",
    "../node_modules/jspdf-autotable/dist/jspdf.plugin.autotable.js"
    ...
  ]
Run Code Online (Sandbox Code Playgroud)

我的组件(相关部分):

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

@Component({
    selector: "energy-login",
    templateUrl: "./login.component.html",
    styleUrls: ["./login.component.scss"]
})
export class MyComponent implements OnInit {

    constructor() {}

    ngOnInit() {}

    downloadPDF() {

        let columns = ["ID", "Name", "Country"];
        let rows = [
            [1, "Shaw", "Tanzania"],
            [2, "Nelson", "Kazakhstan"],
            [3, "Garcia", "Madagascar"],
        ];

        let doc = new jsPDF('l', 'pt');
        doc.autoTable(columns, rows); // typescript compile time error
        doc.save('table.pdf');
    }
}
Run Code Online (Sandbox Code Playgroud)

它说:

[ts] Property 'autoTable' does not exist on type 'jsPDF'.
Run Code Online (Sandbox Code Playgroud)

我试图用我的组件替换导入

// import * as jsPDF from 'jspdf';
// import 'jspdf-autotable';
declare var jsPDF: any;
Run Code Online (Sandbox Code Playgroud)

然后没有编译时错误,但在运行downloadPDF()函数时它说:

ERROR ReferenceError: jsPDF is not defined
Run Code Online (Sandbox Code Playgroud)

小智 8

为我工作Angular 5.

要在角度5中使用jspdf-autotable ,必须通过npm安装jspdf和jspdf-autotable

npm install jspdf --save
npm install @types/jspdf --save-dev
npm install jspdf-autotable --save
Run Code Online (Sandbox Code Playgroud)

还将jspdf和jspdf-autotable文件添加到angular-cli.json中的scripts数组中

"scripts": [
"../node_modules/jspdf/dist/jspdf.min.js",
"../node_modules/jspdf-autotable/dist/jspdf.plugin.autotable.js"
],
Run Code Online (Sandbox Code Playgroud)

并且在组件中永远不会导入jspdf或jspdf-autotable.

忘记以下导入.



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


只需使用Before @Component:

declare var jsPDF: any;
Run Code Online (Sandbox Code Playgroud)

您的组件(相关部分):

declare var jsPDF: any;

@Component({
    selector: "energy-login",
    templateUrl: "./login.component.html",
    styleUrls: ["./login.component.scss"]
})

export class MyComponent implements OnInit {

    constructor() {}

    ngOnInit() {}

    downloadPDF() {

        let columns = ["ID", "Name", "Country"];
        let rows = [
            [1, "Shaw", "Tanzania"],
            [2, "Nelson", "Kazakhstan"],
            [3, "Garcia", "Madagascar"],
        ];

        let doc = new jsPDF('l', 'pt');
        doc.autoTable(columns, rows); // typescript compile time error
        doc.save('table.pdf');
        }
    }
Run Code Online (Sandbox Code Playgroud)


小智 6

我能够像这样取悦 TypeScript:

import * as jsPDF from 'jspdf';
import 'jspdf-autotable';
import { UserOptions } from 'jspdf-autotable';

interface jsPDFWithPlugin extends jsPDF {
  autoTable: (options: UserOptions) => jsPDF;
}
...
const doc = new jsPDF('portrait', 'px', 'a4') as jsPDFWithPlugin;
doc.autoTable({
  head: [['Name', 'Email', 'Country']],
  body: [
    ['David', 'david@example.com', 'Sweden'],
    ['Castille', 'castille@example.com', 'Norway']
  ]
});
Run Code Online (Sandbox Code Playgroud)

适用于 Angular 7。


And*_*eco 5

我正在使用 angular 7,declare var jsPDF: any;但对我不起作用。经过一番谷歌搜索,解决方案是:

declare const require: any;
const jsPDF = require('jspdf');
require('jspdf-autotable');
Run Code Online (Sandbox Code Playgroud)

当然,我从 npm 安装了模块并将它们包含到 angular.json 中的脚本数组中。它对我来说很好用。


RID*_*NIK 1

要在 Angular 5 中使用 jspdf-autotable,必须通过 npm 安装 jspdf 和 jspdf-autotable

npm install jspdf-autotable --save
Run Code Online (Sandbox Code Playgroud)

还将 jspdf 和 jspdf-autotable 文件添加到 angular-cli.json 中的脚本数组中

"scripts": [
    "../node_modules/jspdf/dist/jspdf.min.js",
    "../node_modules/jspdf-autotable/dist/jspdf.plugin.autotable.js"
],
Run Code Online (Sandbox Code Playgroud)

并且在组件中永远不要导入 jspdf 或 jspdf-autotable

declare var jsPDF: any;
Run Code Online (Sandbox Code Playgroud)

当然,在使用 jspdf-autotable 之前,应该安装 jspdf 并通过 npm 进行开发 @types/jspdf

npm install jspdf --save
npm install @types/jspdf --save-dev
Run Code Online (Sandbox Code Playgroud)