Почему PdfName.V проверяет предыдущее значение?

Я работал с iText 7 для создания PDF-файлов, и он работает очень хорошо, но я столкнулся с проблемой проверки формы. Следующий код создает файл PDF с простым полем ввода текста:

import java.io.FileNotFoundException;

import com.itextpdf.forms.PdfAcroForm;
import com.itextpdf.forms.fields.PdfFormField;
import com.itextpdf.kernel.color.DeviceGray;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfName;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.action.PdfAction;
import com.itextpdf.layout.Document;

public final class PdfValidationTest {

    /**
     * @param args
     * @throws FileNotFoundException 
     */
    public static void main(String[] args) throws FileNotFoundException {
        PdfDocument pdfDoc = new PdfDocument(new PdfWriter("ValidationTest.pdf"));
        Document doc = new Document(pdfDoc, PageSize.A4);

        PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDoc, true);
        PdfFormField name = PdfFormField.createText(pdfDoc, new Rectangle(130, 780, 126, 26)).
                    setFieldName("name").
                    setBorderColor(new DeviceGray(0.2f)).
                    setAdditionalAction(PdfName.V, PdfAction.createJavaScript("app.alert(getField('name').value);"));
        form.addField(name);
        // close the document
        doc.close();// TODO Auto-generated method stub

    }

}

Теперь, когда я открываю сгенерированный PDF-файл, ввожу значение в текстовое поле и нажимаю Enter, открывается пустое окно сообщения. Если я закрою его, а затем введу другое значение в текстовое поле, откроется окно сообщения со значением, которое я сначала ввел в поле. Вместо этого я ожидал бы, что значение, введенное в текстовое поле, будет значением, отображаемым во всплывающем окне сообщения. Я что-то упускаю?


person lucasvw    schedule 30.09.2016    source источник


Ответы (1)


Я понял ответ! Поскольку это событие проверки, текущее значение должно быть получено с помощью event.value, а не значения поля.

Итак, обновленная строка кода из вопроса:

setAdditionalAction(PdfName.V, PdfAction.createJavaScript("app.alert(event.value);"));
person lucasvw    schedule 30.09.2016