Добавить поле подписи в pdf в javascript

#javascript #node.js #pdf #pdfjs #acrofields

#javascript #node.js #PDF #pdf.js #acrofields

Вопрос:

после нескольких часов поиска решения я решил задать свой первый вопрос о stackoverflow.

Наше приложение использует pdf-lib (https://www.npmjs.com/package/pdf-lib ) для изменения существующих PDF-файлов, например, добавления изображений. Сейчас мы ищем способ добавить поля формы подписи также в PDF. С помощью pdf-lib можно добавить множество полей формы, за исключением полей подписи. Их можно получить (https://pdf-lib.js.org/docs/api/classes/pdfform#getsignature ), но в отличие от других полей, здесь нет метода создания (например, https://pdf-lib.js.org/docs/api/classes/pdfform#createtextfield ).

Я углубился в код и нашел доступ к PDFForms AcroForm (https://pdf-lib.js.org/docs/api/classes/pdfform#acroform ). С его помощью можно добавлять поля, но я не смог заранее создать правильное поле (на мой взгляд, это должно быть PDFSignature или PDFAcroSignature).

Я обнаружил, что другие поля, такие как PDFAcroText, имеют методы создания

   class PDFAcroText extends PDFAcroTerminal {
  static fromDict = (dict: PDFDict, ref: PDFRef) => new PDFAcroText(dict, ref);

  static create = (context: PDFContext) => {
    const dict = context.obj({
      FT: 'Tx',
      Kids: [],
    });
    const ref = context.register(dict);
    return new PDFAcroText(dict, ref);
  };
 

Они вызываются функциями-оболочками (например, createTextfield, как упоминалось):

 createTextField(name: string): PDFTextField {
    assertIs(name, 'name', ['string']);
    const nameParts = splitFieldName(name);

    const parent = this.findOrCreateNonTerminals(nameParts.nonTerminal);

    const text = PDFAcroText.create(this.doc.context);
    text.setPartialName(nameParts.terminal);

    addFieldToParent(parent, [text, text.ref], nameParts.terminal);

    return PDFTextField.of(text, text.ref, this.doc);
  }
 

Я искал другие библиотеки js, которые предоставляют возможность добавлять поля формы подписи, но я не смог найти ответ на этот вопрос — за исключением платы за использование библиотек, таких как pdfjs.express.

Предполагая, что они способны добавлять такие поля, должен быть способ сделать это!

Пожалуйста, дайте мне знать, если кто-нибудь из вас понял, как это сделать, или если есть другое решение для этого.

Заранее спасибо!

Приветствую, Алекс

Ответ №1:

В самом Acrobat PRO нет возможности поместить прямое поле «Подпись». Вы можете «запросить» подпись, но только с помощью сервисов Adobe, и для этого требуется электронное письмо.

Если вы планируете добавить подпись с помощью кода, взгляните на их пример «Заполнить форму». Они помещают изображение поверх поля кнопки, но поле изображения также работает.

   const signatureImageField2 = form.getButton('button-signature-field')
  signatureImageField2.setImage(signatureImage)

  const factionImageField = form.getField('image-signature-field_af_image')
  factionImageField.setImage(signatureImage)