为什么PdfName.V验证以前的值?

时间:2016-09-30 02:15:19

标签: javascript pdf-generation itext7

我一直在使用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键时,会弹出一个空白消息框。如果我关闭它,然后在文本框中输入一个不同的值,弹出一个消息框,其中包含我第一次输入到框中的值。我希望相反,输入文本框的值将是弹出消息框中显示的值。我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

我想出了答案!由于这是验证事件,因此必须使用event.value检索当前值,而不是字段值。

所以来自问题的更新代码行:

setAdditionalAction(PdfName.V, PdfAction.createJavaScript("app.alert(event.value);"));