如何在使用PDFBOX生成的PDF中按Enter键时调用JavaScript函数?
我想在使用PDFBOX库版本1.8.10生成的PDF文本框中按Enter键执行一些操作 我尝试了下面的代码,但当字段从文本框中失去焦点时,它就工作了。 若我在文本框中输入一些值,然后按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;
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键时调用的。