如何在使用PDFBOX生成的PDF中按Enter键时调用JavaScript函数?

如何在使用PDFBOX生成的PDF中按Enter键时调用JavaScript函数?,java,pdf-generation,pdfbox,Java,Pdf Generation,Pdfbox,我想在使用PDFBOX库版本1.8.10生成的PDF文本框中按Enter键执行一些操作 我尝试了下面的代码,但当字段从文本框中失去焦点时,它就工作了。 若我在文本框中输入一些值,然后按enter键,那个么javascript操作将不会被调用 请提供如何实现这一目标的反馈 import java.io.IOException; import javax.swing.text.BadLocationException; import org.apache.pdfbox.cos.COSArray;

我想在使用PDFBOX库版本1.8.10生成的PDF文本框中按Enter键执行一些操作

我尝试了下面的代码,但当字段从文本框中失去焦点时,它就工作了。 若我在文本框中输入一些值,然后按enter键,那个么javascript操作将不会被调用

请提供如何实现这一目标的反馈

import java.io.IOException;

import javax.swing.text.BadLocationException;

import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSFloat;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSString;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.interactive.action.PDAnnotationAdditionalActions;
import org.apache.pdfbox.pdmodel.interactive.action.type.PDActionJavaScript;
import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
import org.apache.pdfbox.pdmodel.interactive.form.PDTextbox;
import org.junit.Test;

public class TestPdfbox {
    @Test
    public void Sample1 () throws IOException, COSVisitorException, BadLocationException {


        PDDocument doc = new PDDocument();
        PDPage page = new PDPage();
        doc.addPage(page);   

        COSDictionary acroFormDict = new COSDictionary(); 
        acroFormDict.setBoolean(COSName.getPDFName("NeedAppearances"), true);
        acroFormDict.setItem(COSName.getPDFName("Fields"), new COSArray());

        PDAcroForm acroForm = new PDAcroForm(doc, acroFormDict);
        doc.getDocumentCatalog().setAcroForm(acroForm);

        PDActionJavaScript javascript = new PDActionJavaScript("function validate(index){ app.alert(index); }");
        doc.getDocumentCatalog().setOpenAction( javascript );

        COSDictionary cosDict1 = new COSDictionary();
        COSArray rect1 = new COSArray();
        rect1.add(new COSFloat(100));
        rect1.add(new COSFloat(700));
        rect1.add(new COSFloat(200));
        rect1.add(new COSFloat(750));

        cosDict1.setItem(COSName.RECT, rect1);
        cosDict1.setItem(COSName.FT, COSName.getPDFName("Tx")); // Field Type
        cosDict1.setItem(COSName.TYPE, COSName.ANNOT);
        cosDict1.setItem(COSName.SUBTYPE, COSName.getPDFName("Widget"));
        cosDict1.setItem(COSName.T, new COSString("tx1"));
        cosDict1.setItem(COSName.DA, new COSString("/Helv 7 Tf 0 g"));
        cosDict1.setItem(COSName.V, new COSString("Test Value"));

        PDTextbox textbox = new PDTextbox(doc.getDocumentCatalog().getAcroForm(), cosDict1);
//      textbox.setFieldFlags(flag);

        PDActionJavaScript textBoxJs = new PDActionJavaScript("validate("+1+");");
        PDAnnotationAdditionalActions action = new PDAnnotationAdditionalActions();
        action.setBl(textBoxJs);
        textbox.getWidget().setActions(action);

        page.getAnnotations().add(textbox.getWidget());
        acroForm.getFields().add(textbox);

         doc.save("\\path");
         doc.close();
    }
}
请尝试textbox.getWidget().setAction(textBoxJs);注意,它是不带“s”的setAction.textbox.getWidget().setAction(textBoxJs);它不起作用。在这里,javascript操作是在鼠标单击事件中调用的,而不是在按Enter键时调用的。