В компании, в которой я работаю, есть PDFTron WebViewer SDK , который позволяет читать все поля формы, читать / редактировать значения, всю клиентскую часть в браузере, а также разрешать пользователю просматривать весь PDF и вручную заполните любые поля.
Образец: https://www.pdftron.com/webviewer/demo/pdf-forms
Мне нужно проанализировать файл PDF с большим количеством полей Acroform и извлечь имя поля (/ T в разметке PDF) и значение (/ V в разметке PDF) для каждого поля.
Вы можете увидеть живой код в примере pdf-форм, сшитом выше, но этот код ниже будет перебирать все поля и выводить значение, если оно есть, на консоль.
viewerElement.addEventListener('ready', function() {
var viewerInstance = viewer.getInstance();
const docViewer = viewerInstance.docViewer;
const annotManager = docViewer.getAnnotationManager();
const fieldManager = annotManager.getFieldManager();
const checkField = (field) => {
// Do something with data
const { name, value } = field;
console.log(name + ' ' + value);
// Check children fields
field.children.forEach(checkField);
}
docViewer.on('annotationsLoaded', function() {
fieldManager.forEachField(checkField);
});
});
Я возьму значения полей из PDF и сохраню их в
базы данных.
Если вы просто хотите получить значения полей, вы можете легко получить это из WebViewer в формате PDF ISO XFDF XML, который вы можете отправить на свой сервер и объединить с PDF, используя любой PDF SDK, который поддерживает XFDF. Таким образом, вы можете избежать передачи всего PDF туда-сюда и просто отправить гораздо меньшие значения полей формы в виде XML.
var xmlXfdfFieldData = annotManager.exportAnnotations({fields:true, widgets:false, links:false});
для некоторых полей мне нужно будет запросить дополнительный ввод
до сохранения.
Интерфейс WebViewer UI / UX полностью настраиваемый, поэтому вы можете взаимодействовать / запрашивать у пользователя, какие поля обновлять.
В этом примере ниже показано, как изменить цвет и непрозрачность полей формы, что может послужить отправной точкой для применения вашей собственной бизнес-логики.
https://www.pdftron.com/documentation/web/guides/form-samples#customizing-form-fields