jsPDF Acroforms在Angular应用中不起作用

时间:2019-04-17 14:56:43

标签: angular jspdf

我有一个Angular 7应用程序,我想从其中使用jsPDF生成一些PDF。我可以毫无问题地生成基于文本的PDF,但是当我尝试添加Acroform字段时,会生成PDF,但是缺少这些字段。重现此问题的步骤如下:

  1. 使用Angular-CLI创建新的Angular应用:

      

    ng新的jspdfTester

         

    cd jspdfTester

  2. 安装jspdf

      

    npm install -s jspdf

  3. 将jspdf代码添加到app.component.ts文件

    import { Component } from '@angular/core';
    import * as jsPDF from 'jspdf';
    
    declare global {
      const TextField: any;
    }
    
    @Component({
      selector: 'app-root',
      templateUrl: './app.component.html',
      styleUrls: ['./app.component.scss']
    })
    export class AppComponent {
      title = 'jspdfTester';
    
      constructor() {
        const doc = new jsPDF();
        const textField = new TextField();
        textField.Rect = [50, 50, 30, 10];
        doc.addField(textField);
        doc.text('test', 50, 40);
        doc.save('sample.pdf');
      }
    }
    
  4. 运行该应用程序,将下载一个包含测试文本但没有文本字段的PDF。

关于如何解决此问题的任何想法?

编辑: 经过仔细调试后,似乎正在调用zone.js中的Object.getOwnPropertyDescriptor方法,而不是浏览器的Object.getOwnPropertyDescriptor方法。显然,它们的工作方式不同,这打破了jsPDF。仍然没有解决办法,但我越来越近了。

1 个答案:

答案 0 :(得分:0)

我发现zone.js覆盖了Object.defineProperty设置,并更改了jsPDF在定义AcroFrom原型时尝试设置的某些属性的配置值。我不确定在不更改两个库之一的情况下是否可以解决此问题。我有proposed a change to jsPDF,所以也许他们会在下一个版本中对其进行修复。