Java 在iText7中创建专用于数字输入的PdfTextFormField
我需要一个PdfTextFormField,它只能作为十进制货币值携带数字输入。其他字符必须被禁止。尽管我用C编写代码,但也可以用Java给出任何提示。是的,这是可能的。实际上,Adobe有一些函数可用于验证下面代码中的数字:Java 在iText7中创建专用于数字输入的PdfTextFormField,java,c#,itext7,Java,C#,Itext7,我需要一个PdfTextFormField,它只能作为十进制货币值携带数字输入。其他字符必须被禁止。尽管我用C编写代码,但也可以用Java给出任何提示。是的,这是可能的。实际上,Adobe有一些函数可用于验证下面代码中的数字: public void helloWorldForm() throws IOException { logger.info("create PDF on {}", DEST); final PdfWriter pdfWriter = new PdfWri
public void helloWorldForm() throws IOException {
logger.info("create PDF on {}", DEST);
final PdfWriter pdfWriter = new PdfWriter(DEST);
final PdfDocument pdfDocument = new PdfDocument(pdfWriter);
try (final Document document = new Document(pdfDocument)) {
document.add(new Paragraph("Number with 2 decimal places"));
PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDocument, true);
PdfTextFormField nameField = PdfTextFormField.createText(pdfDocument,
new Rectangle(99, 753, 425, 15), "value", "");
form.addField(nameField);
PdfAction validation = PdfAction.createJavaScript("AFNumber_Format(2,0,0,0,\"\", true);");
nameField.setAdditionalAction(PdfName.F, validation);
validation = PdfAction.createJavaScript("AFNumber_Keystroke(2,0,0,0,\"\", true);");
nameField.setAdditionalAction(PdfName.K, validation);
}
pdfDocument.close();
}
这将创建一个只接受数字的表单,您可以使用。小数点后的句号
PDF参考文件提到了以下字典键:
F-在格式化字段以显示其当前值之前要执行的JavaScript操作。此操作可以在格式化之前修改字段的值。
K-当用户在文本字段或组合框中键入键击或修改可滚动列表框中的选择时要执行的JavaScript操作。此操作可以检查击键的有效性,并拒绝或修改击键。
您可以在第119页找到关于这些函数的一些文档
这模仿了您可以在Adobe Acrobat PRO中设置的内容:
我已经在AdobeReader和FoxitReader中测试了这个方法。有些读者可能不支持它,在这种情况下,我建议您以类似的方式实现自己的Javascript验证pdf viewer在哪种情况下可以工作?首先是在Adobe reader中。但是如果可能的话,在其他读者中也可以。我这样问是因为安德烈的回答需要一个支持javascript和Adobe对象模型的查看器。大多数AdobeReader安装最能实现这一点,因为您可以在AdobeReader中停用javascript支持;不过,它通常是活动的,而大多数其他观众则不是。