首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在iText 7中,为什么要选中复选框,如果设置了错误的值,并且CheckType从检查更改到交叉。

在iText 7中,为什么要选中复选框,如果设置了错误的值,并且CheckType从检查更改到交叉。
EN

Stack Overflow用户
提问于 2020-06-03 04:37:17
回答 1查看 1.5K关注 0票数 4

我使用的是iText 7 java库。这里是我的gradle依赖项。

代码语言:javascript
运行
复制
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表单有一个复选框定义了以下设置-

名称= COMM_PREF_EMAIL

复选框样式= Check

出口值= Yes

如果我在acrobat阅读器中打开pdf并单击复选框,它将显示选中的复选标记,如预期的那样。

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

下面是我使用iText 7库编写的java代码。

代码语言:javascript
运行
复制
PdfAcroForm pdfAcroForm = PdfAcroForm.getAcroForm(pdfDocument, true);
PdfFormField pdfFormField = pdfAcroForm.getField("COMM_PREF_EMAIL");
pdfFormField.setValue("B");

我将复选框值设置为"B“,这与导出值”是“不匹配,但在PDF中仍在选中复选框,最糟糕的部分是复选框样式也更改为交叉。下面是运行此代码后复选框的处理方式。

注意,复选框样式总是更改为交叉,而不管我设置了什么值。

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

有人能帮我解决以下两个问题吗?

  1. 如果设置的值与导出值不匹配,为什么要选中复选框?
  2. 为什么setValue将复选框样式更改为交叉

任何建议或建议都是非常感谢的。

在6/10/2020上的更新

链接pdf文件,以复制问题https://github.com/rakeshprajapati1982/itext-7-issue/blob/master/Checklist.pdf

EN

回答 1

Stack Overflow用户

发布于 2020-10-31 19:34:22

由于使用itextSharp方法的SetField()似乎自动获得窗体的分隔

代码语言:javascript
运行
复制
PdfStamper pdfStamper = new PdfStamper(pdfReader_, fileStream);
AcroFields pdfFormFields = pdfStamper.AcroFields;
pdfFormFields.SetField(FIELD_NAME, "123",true);

但是现在在itext7中,我的研究似乎并不隐含小部件形状"dove,交叉,start等.“,它只是得到了让我们调用它们的状态(”是的,关闭“)的值,所以只需设置小部件输入SetCheckType(数字),就像为什么iText在CheckType时输入十字符号中提到的那样

所以在你的代码里

代码语言:javascript
运行
复制
            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);
            }

顺便说一句,如果我用不好的方式回答这个问题,请随意编辑,不要删除它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62165305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档