angular - jsPDF Acroforms 在 Angular 应用程序中不起作用
问题描述
我有一个 Angular 7 应用程序,我想从中使用 jsPDF 生成一些 PDF。我可以毫无问题地生成基于文本的 PDF,但是当我尝试添加 Acroform 字段时,会生成 PDF,但缺少这些字段。以下是重现问题的步骤:
使用 Angular-CLI 创建一个新的 Angular 应用程序:
ng new jspdfTester
cd jspdfTester
安装jspdf
npm install -s jspdf
在 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'); } }
运行应用程序,将下载包含测试文本但没有文本字段的 PDF。
有想法该怎么解决这个吗?
编辑: 经过仔细调试后,似乎调用了 zone.js 中的 Object.getOwnPropertyDescriptor 方法,而不是浏览器的 Object.getOwnPropertyDescriptor 方法。显然它们的工作方式不同,它破坏了 jsPDF。仍然没有解决方案,但我越来越近了。
解决方案
我发现 zone.js 覆盖了 Object.defineProperty 设置并更改了 jsPDF 在定义 AcroFrom 原型时尝试设置的一些属性的配置值。我不确定是否可以在不更改两个库之一的情况下解决此问题。我已经提议对 jsPDF 进行更改,所以也许在下一个版本中他们会修复它。
推荐阅读
- node.js - 移除的中间件仍在使用
- oop - 现代 Fortran getter/setter
- nhibernate - 如何在 NHibernate 5 中捕获查询执行?
- teradata - 在运行时在 mload 中动态传递输入文件
- c - 比较c linux fgets中的2个文件
- ios - 仅从第二次开始获取用户位置
- android - AsyncTask 导致重载问题(双项、错误数据等),但在 UI 上运行太慢
- excel - 如何使用 GetPivotdata 从由 Olap Cube 构建的数据透视表中提取数据?
- javascript - 如何在我的 Webpack 项目中使用 Polyglot.js?
- bash - 如何制作具有不同选择的菜单?