Java 在iText 7中,如果设置了错误的值并且CheckType从CHECK变为CROSS,为什么要选中复选框

Java 在iText 7中,如果设置了错误的值并且CheckType从CHECK变为CROSS,为什么要选中复选框,java,pdf,checkbox,itext,itext7,Java,Pdf,Checkbox,Itext,Itext7,我正在使用iText7 java库。这是我的gradle依赖项 compile group: 'com.itextpdf', name: 'kernel', version: '7.1.9' compile group: 'com.itextpdf', name: 'layout', version: '7.1.9' compile group: 'com.itextpdf', name: 'forms', version: '7.1.9' 我需要在现有的pdf模板中填写Acro表单。PDF表

我正在使用iText7 java库。这是我的gradle依赖项

compile group: 'com.itextpdf', name: 'kernel', version: '7.1.9'
compile group: 'com.itextpdf', name: 'layout', version: '7.1.9'
compile group: 'com.itextpdf', name: 'forms', version: '7.1.9'
我需要在现有的pdf模板中填写Acro表单。PDF表单有一个使用以下设置定义的复选框-

姓名=通信优先电子邮件

复选框样式=选中

出口值=是

如果我在acrobat reader中打开pdf并单击复选框,它会像预期的那样显示带有复选标记的checked

对于iText库,我的期望是,若我将复选框值设置为Yes(匹配复选框的导出值),那个么只应选中复选框。如果我设置了任何其他值,复选框应保持未选中状态

下面是我使用iText7库的java代码

PdfAcroForm pdfAcroForm = PdfAcroForm.getAcroForm(pdfDocument, true);
PdfFormField pdfFormField = pdfAcroForm.getField("COMM_PREF_EMAIL");
pdfFormField.setValue("B");
我正在将复选框值设置为“B”,这与导出值“是”不匹配,但仍在PDF中选中复选框,最糟糕的部分是复选框样式也更改为交叉。下面是运行此代码后复选框的外观

请注意,复选框样式始终更改为交叉,而与我设置的值无关

我做了一些调试,注意到当使用
getField
检索PdfFormField时,它有
chekType=0
,这是不正确的。它不是pdf中定义的内容。它应该是1,这是检查。现在,当我调用
pdfFormField.setValue(…)
时,它最终调用
regenefield()
,我猜这是chekType=3(交叉)的默认值,因为它的值无效

有人能帮助解决以下两个问题吗-

  • 如果设置的值与导出不匹配,为什么选中复选框 价值
  • 为什么设置值将复选框样式更改为交叉
  • 非常感谢您的任何建议

    于2020年6月10日更新
    复制问题的pdf文件链接

    ,因为itextSharp使用SetField()方法似乎会自动获得表单的空间

    PdfStamper pdfStamper = new PdfStamper(pdfReader_, fileStream);
    AcroFields pdfFormFields = pdfStamper.AcroFields;
    pdfFormFields.SetField(FIELD_NAME, "123",true);
    
    但在我的研究中,itext7中的小部件形状“dove,cross,start,etc…”似乎不是隐式的,只是它得到了值,让我们调用它们的状态(“Yes,Off”),所以只需将小部件设置为使用SetCheckType(NUMBER)键入,如中所述

    所以在你的代码中

                var field = form1.GetField(FIELD_NAME);
                if (field.GetType() == typeof(PdfButtonFormField)) {
                    field.SetCheckType(PdfFormField.TYPE_CHECK);//PdfFormField.TYPE_CIRCLE,PdfFormField.TYPE_CROSS,PdfFormField.TYPE_DIAMOND,PdfFormField.TYPE_SQUARE,PdfFormField.TYPE_STAR,etc
                    field.SetValue("Yes", true);
                }
    

    顺便说一句,如果我问得不好,请随意编辑这个问题,不要删除它。

    Hi,
    7.1.11
    已经发布了,请尝试使用最新版本,如果它不起作用,请提供您的PDF以便可以重现问题。我也使用iText
    7.1.11
    版本测试了这个问题,我也看到了同样的问题。最后我用pdf链接更新了问题。您可以使用此pdf复制问题。Checkex在标签为“Comm Preference”的pdf中位于页面末尾,还请注意,原始pdf大小为193KB,但由iText生成的填充pdf大小为152KB,小于原始大小。我在其他一些PDF文件中看到了更大的尺寸下降。你们知道尺码下降的原因吗?