jsPDF Acroforms не работает в приложении Angular - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть приложение Angular 7, и я хочу создать из него несколько PDF-файлов, используя jsPDF.Я могу создавать текстовые PDF-файлы без проблем, но когда я пытаюсь добавить поле Acroform, PDF-файл создается, но поля отсутствуют.Вот шаги по воспроизведению проблемы:

  1. Создание нового приложения Angular с помощью Angular-CLI:

    ng new jspdfTester

    cd jspdfTester

  2. Установить jspdf

    npm установить -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-файл, содержащий текст теста, но без текстового поля.

Есть идеи, как это исправить?

Редактировать: После тщательной отладки похоже, что метод Object.getOwnPropertyDescriptor из zone.js вызывается вместо метода браузера Object.getOwnPropertyDescriptor из браузера.,Видимо, они работают по-другому, и это ломает jsPDF.Все еще без разрешения, но я все ближе.

1 Ответ

0 голосов
/ 17 апреля 2019

Я выяснил, что zone.js переопределяет параметр Object.defineProperty и изменяет значение конфигурации некоторых свойств, которые jsPDF пытается установить при определении прототипов AcroFrom. Я не уверен, возможно ли обойти это без изменения одной из двух библиотек. Я предложил изменить jsPDF , поэтому, возможно, в следующем выпуске это исправят.

...