首页 > 解决方案 > jsPDF Acroforms 在 Angular 应用程序中不起作用

问题描述

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

  1. 使用 Angular-CLI 创建一个新的 Angular 应用程序:

    ng new jspdfTester

    cd jspdfTester

  2. 安装jspdf

    npm install -s jspdf

  3. 在 app.component.ts 文件中添加 jspdf 代码

    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。仍然没有解决方案,但我越来越近了。

标签: angularjspdf

解决方案


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


推荐阅读