java - PDF-Checkbox - 在没有 JavaScript 的情况下选中一个并取消选中另一个

标签 java pdf itext itext7

在我的项目中,我需要 3 个复选框,它们应该像单选按钮一样工作。但是单选按钮在 Adob​​e Reader 中出现时有一些缺点。出于这个原因,我必须使用复选框。有一个非常有趣的答案,但我不明白如何使用 iText 完成此操作:

Java iText and custom Radiobutton behaviour

在这种情况下,任何人——尤其是这篇文章的作者 Lonzak——都可以帮助我吗?谢谢和亲切的问候,德克

最佳答案

我认为解决方案是修复您当前的代码。以下示例创建了 3 个单选按钮,并且都包含一个叉号。它基于 itext 5,您可能需要针对 itext 7 对其进行一些调整。

Document document = new Document(PageSize.A4, 50, 50, 50, 50);
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("output.pdf"));
        document.open();

        RadioCheckField bt = new RadioCheckField(writer, new Rectangle(261, 576, 279, 594), "radio", "value1");
        bt.setCheckType(RadioCheckField.TYPE_CROSS);
        bt.setBackgroundColor(BaseColor.WHITE);
        //bt.setBorderStyle(PdfBorderDictionary.STYLE_SOLID);
        bt.setBorderColor(BaseColor.BLACK);
        bt.setTextColor(BaseColor.BLACK);
        bt.setBorderWidth(BaseField.BORDER_WIDTH_THIN);
        bt.setChecked(false);
        PdfFormField f1 = bt.getRadioField();
        bt.setOnValue("value2");
        bt.setChecked(true);
        bt.setBox(new Rectangle(287, 577, 305, 595));
        PdfFormField f2 = bt.getRadioField();
        bt.setChecked(false);
        PdfFormField top = bt.getRadioGroup(true, false);
        bt.setOnValue("value3");
        bt.setBox(new Rectangle(314, 578, 332, 596));
        PdfFormField f3 = bt.getRadioField();
        top.addKid(f1);
        top.addKid(f2);
        top.addKid(f3);
        writer.addAnnotation(top);
        document.close();

更新:这是您使用 iText7 的代码,但似乎存在一个错误,因此单选按钮的检查样式不会更改。也许 itext 的人可以说更多...

PdfDocument pdfDoc = new PdfDocument(new PdfWriter("output7.pdf"));
Document doc = new Document(pdfDoc);

PdfButtonFormField radioGroup = PdfFormField.createRadioGroup(pdfDoc, "ExampleGroup", "");
radioGroup.setPage(1);

pdfDoc.addNewPage();

PdfFormField field1 = PdfFormField.createRadioButton(pdfDoc, new Rectangle(261, 576, 18, 18), radioGroup, "value1");
field1.setCheckType(PdfFormField.TYPE_CROSS);
field1.setValue("value1");
field1.regenerateField();

PdfFormField field2 = PdfFormField.createRadioButton(pdfDoc, new Rectangle(287, 577, 18, 18), radioGroup, "value2");
field2.setCheckType(PdfFormField.TYPE_CROSS);
field2.regenerateField();

PdfFormField field3 = PdfFormField.createRadioButton(pdfDoc, new Rectangle(314, 578, 18, 18), radioGroup, "value3");
field3.setCheckType(PdfFormField.TYPE_CROSS);
field3.regenerateField();

PdfAcroForm.getAcroForm(pdfDoc, true).addField(radioGroup);
doc.close();

关于java - PDF-Checkbox - 在没有 JavaScript 的情况下选中一个并取消选中另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49931569/

相关文章:

java - 重构代码查找二叉树是否是 BST

java - 避免隐式急切加载集合 stub ?

java - 如何避免 Buffer Reader 中的 NullPointErexception?

java - 在 Java WebBrowser 控件中显示 PDF 时如何隐藏 Adob​​e Reader 工具栏?

java - 破解编码面试,第 6 版 - Q : 2. 2

c# - ASP.NET MVC - 在新选项卡上有条件地打开 PDF/图像

php - 在 Iframe 中提交 pdf 文档

java - Itext 签名空签名字段

java - 如何使用 iText 在 jFreeChart 中写入西里尔字符

C# - 每页上的 itextSharp 小计