#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)