Событие iText onchange не срабатывает

Я использую OpenPDF (на основе iText) для создания простой формы PDF с двумя входами, и я пытаюсь автоматически скопировать значение первого поля во второе поле после заполнения первого поля. На самом деле мне нужно поле, которое автоматически добавит все остальные поля и отобразит сумму, но для начала я хотел попробовать на простом примере.

Я прикрепил действие onchange к полю, которое, насколько я понимаю, должно срабатывать при изменении любого поля:

TextField name1 = new TextField(writer, new Rectangle(100, 800, 200, 830), "idInput1");
PdfFormField field1 = name1.getTextField();
field1.put(PdfName.CO, new PdfNumber(1));
writer.addAnnotation(field1);

TextField name2 = new TextField(writer, new Rectangle(100, 700, 200, 730), "idInput2");
PdfFormField field2 = name2.getTextField();
field2.setAdditionalActions(PdfName.C, PdfAction.javaScript("event.change = 123;", writer));
field2.put(PdfName.CO, new PdfNumber(2));
writer.addAnnotation(field2);

но это событие onchange никогда не запускается. Если я изменю это событие на PdfName.K, которое предназначено для нажатия клавиши, оно сработает.

Любые идеи о том, что я делаю неправильно?


person Stefan Kostic    schedule 16.07.2018    source источник
comment
Пожалуйста, поделитесь образцом PDF, чтобы воспроизвести проблему.   -  person mkl    schedule 16.07.2018


Ответы (1)


Хорошо, мне наконец удалось найти, что было не так, поэтому я опубликую это на случай, если кому-то это понадобится, поскольку я не смог найти аналогичный пример в Интернете.

У меня было две ошибки:

1) в JSfunction вместо "event.change=123" должно стоять "event.value = 123"

2) Каждое поле должно быть добавлено в порядок расчета писателя, недостаточно указать только номер порядка расчета для каждого поля:

writer.addCalculationOrder(field1);
writer.addCalculationOrder(field2);
person Stefan Kostic    schedule 16.07.2018