首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带jsPDF模块的Angular 9:类型'typeof jsPDF‘没有构造签名

带jsPDF模块的Angular 9:类型'typeof jsPDF‘没有构造签名
EN

Stack Overflow用户
提问于 2020-06-27 19:28:13
回答 4查看 11.9K关注 0票数 4

Angular 9模块存在jsPDF问题(已安装的类型+软件包本身)

当执行ng serve时,它在执行ng build时工作--prod,它有错误

代码语言:javascript
复制
ERROR in src/app/xxx/xxxx.componentomponent.ts:52:27 - error TS2351: This expression is not constructable.
  Type 'typeof jsPDF' has no construct signatures.

52       let pdf = new jsPDF('p', 'mm', 'a4');
                             ~~~~~

  src/app/xxx/xxxx.component.ts:7:1
    7 import * as jsPDF from 'jspdf';
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Type originates at this import. A namespace-style import cannot be called or constructed, and will cause a failure at runtime. Consider using a default import or import require here instead.

tsconfig文件有"esModuleInterop":true,

代码语言:javascript
复制
{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "downlevelIteration": true,
    "experimentalDecorators": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "esModuleInterop": true,
    "importHelpers": true,
    "target": "es2015",
    "allowSyntheticDefaultImports":true,
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  },
  "angularCompilerOptions": {
    "fullTemplateTypeCheck": true,
    "strictInjectionParameters": true
  }
}

我像这样导入模块:

代码语言:javascript
复制
**import * as jsPDF from 'jspdf';**

在我的类中这样使用它:

代码语言:javascript
复制
 generatePDF() {
    var data = document.getElementById('contentToConvert');
    html2canvas(data).then(canvas => {
      var imgWidth = 208;
      var imgHeight = canvas.height * imgWidth / canvas.width;
      const contentDataURL = canvas.toDataURL('image/png')
      let pdf = **new jsPDF**('p', 'mm', 'a4');
      var position = 0;
      pdf.addImage(contentDataURL, 'PNG', 0, position, imgWidth, imgHeight)
      pdf.save('skill-set.pdf');
    });
  }

我还尝试在angular.json的脚本部分添加模块js文件

代码语言:javascript
复制
  "scripts": [
              "node_modules/jquery/dist/jquery.min.js",
              "node_modules/bootstrap/dist/js/bootstrap.min.js",
              **"node_modules/jspdf/dist/jspdf.min.js"**
            ]
EN

回答 4

Stack Overflow用户

发布于 2020-08-29 21:51:55

(在angular 10中测试过,所以我猜这个修复是针对更新的angular版本的)

而不是这样:

代码语言:javascript
复制
import * as jsPDF from 'jspdf';

写下这个:

代码语言:javascript
复制
import jspdf from 'jspdf';

当心!第二行中的两个 jspdf 都是小写字母

然后你的

代码语言:javascript
复制
let pdf = new jsPDF('p', 'mm', 'a4'); 

也可以,只需将全部更改为小写字母(在执行此之前,您必须像我的第二个导入行那样以小写字母导入)

代码语言:javascript
复制
let pdf = new jspdf('p', 'mm', 'a4');
票数 16
EN

Stack Overflow用户

发布于 2020-06-28 06:44:24

我设置了一个全新的angular 10项目,并且能够使用jspdf

  1. 创建新的Angular应用程序

代码语言:javascript
复制
> npx @angular/cli new pdf-viewer --strict --defaults true

  1. 从npm注册表

安装jspdf

代码语言:javascript
复制
> cd pdf-viewer
> npm install jspdf --save
> npm install @types/jspdf --save-dev

  1. 更新tsconfig.base.json。在compilerOptions

中添加allowSyntheticDefaultImports

代码语言:javascript
复制
"allowSyntheticDefaultImports": true

src/app/app.component.ts中添加一些要测试的

  1. 代码

代码语言:javascript
复制
import { Component, ChangeDetectionStrategy } from '@angular/core';
import jsPDF from 'jspdf';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AppComponent {
  title = 'pdf-viewer';

  constructor() {
    this.generatePDF();
  }

  private generatePDF(): void {
    const doc = new jsPDF();

    doc.text('Hello world!', 10, 10);
    doc.save('a4.pdf');
  }
}

  1. 启动angular应用程序并导航到http://localhost:4200。你会注意到,只要我们打开网页,a4.pdf就会被下载。打开PDF文件以验证文件的完整性。

代码语言:javascript
复制
> npm start
票数 8
EN

Stack Overflow用户

发布于 2020-11-06 21:53:29

而不是这样:

代码语言:javascript
复制
import * as jsPDF from 'jspdf';

写下这个:

代码语言:javascript
复制
import JSPDF from 'jspdf';

然后你的

代码语言:javascript
复制
let pdf = new JSPDF.jsPDF(); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62609378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档