C# 用iText7填充pdf检查字段

C# 用iText7填充pdf检查字段,c#,.net,pdf,itext,itext7,C#,.net,Pdf,Itext,Itext7,我正在用iText7检查我的PDF上的复选框。 但不是只检查一个字段,而是检查所有字段 我需要的是: 我得到的是: PDF编辑时: 我认为出口值与此有关。 但我不知道该怎么办 我的代码: private static void CreatePdf(字符串输出) { 使用var_pdfDoc=newpdfdocument(newpdfreader(“CheckTest.pdf”)、newpdfwriter(output)); var form=PdfAcroForm.GetAcroForm

我正在用iText7检查我的PDF上的复选框。 但不是只检查一个字段,而是检查所有字段

我需要的是:

我得到的是:

PDF编辑时:

我认为出口值与此有关。 但我不知道该怎么办

我的代码:

private static void CreatePdf(字符串输出)
{
使用var_pdfDoc=newpdfdocument(newpdfreader(“CheckTest.pdf”)、newpdfwriter(output));
var form=PdfAcroForm.GetAcroForm(_pdfDoc,true);
var check=form.GetField(“check”);
检查设定值(“01”);
}
PDF:

有人知道如何正确检查吗


谢谢

首先,PDF基本上使用PDF AcroForm复选框字段作为单选按钮,而不是使用真正的PDF AcroForm单选按钮字段

PDF规范没有明确规定PDF查看器在这种情况下应该做什么(毕竟这是误用),但有问题的PDF表单生成器的开发人员可能已经试验并确定,在使用最广泛的PDF查看器Adobe Acrobat Reader中,这种误用正是他们想要的

但是,由于这种用法超出了规范,其他处理此类PDF的PDF处理器可能会产生完全不同的结果,而不会出现任何错误


也就是说,有一种方法可以使用iText填写表单,并获得与Adobe Reader生成的结果类似的结果

目前的问题是,默认情况下,除了实际AcroForm单选按钮字段,所有表单字段类型的iText在设置字段值时都会以适合字段类型的方式生成新外观。文档中有三个同名的复选框字段对象。因此,它们被视为一个复选框,其中有三个小部件代表相同的值,因此在观察时会生成外观

但是您可以告诉iText不要生成新的外观,使用另一个
SetValue
重载接受一个额外的布尔值,只需替换

check.SetValue("01");

现在iText可以处理现有的外观,因此只有具有该
“01”
值外观的字段才会被选中


注意,只有在这种情况下才能防止iText生成外观。例如,对于文本字段,如果不更新外观,则即使内部字段值已更改,仍会继续显示具有以前字段内容的旧外观。

首先,PDF基本上使用PDF AcroForm复选框字段作为单选按钮,而不是使用真正的PDF AcroForm单选按钮字段

PDF规范没有明确规定PDF查看器在这种情况下应该做什么(毕竟这是误用),但有问题的PDF表单生成器的开发人员可能已经试验并确定,在使用最广泛的PDF查看器Adobe Acrobat Reader中,这种误用正是他们想要的

但是,由于这种用法超出了规范,其他处理此类PDF的PDF处理器可能会产生完全不同的结果,而不会出现任何错误


也就是说,有一种方法可以使用iText填写表单,并获得与Adobe Reader生成的结果类似的结果

目前的问题是,默认情况下,除了实际AcroForm单选按钮字段,所有表单字段类型的iText在设置字段值时都会以适合字段类型的方式生成新外观。文档中有三个同名的复选框字段对象。因此,它们被视为一个复选框,其中有三个小部件代表相同的值,因此在观察时会生成外观

但是您可以告诉iText不要生成新的外观,使用另一个
SetValue
重载接受一个额外的布尔值,只需替换

check.SetValue("01");

现在iText可以处理现有的外观,因此只有具有该
“01”
值外观的字段才会被选中


注意,只有在这种情况下才能防止iText生成外观。例如,对于文本字段,如果不更新外观,则即使内部字段值已更改,仍会继续显示具有以前字段内容的旧外观。

问题在于,生成该PDF的任何内容都会为所有复选框赋予相同的名称。就我所知,你对此无能为力,除非你能控制生成过程。这个PDF不是我生成的。如果没有办法,那么我将编辑de PDF并更改de字段名称。问题是每次客户端更改名称时,我都需要更改名称。实际上,PDF mis使用PDF AcroForm复选框作为单选按钮,而不是使用真正的PDF AcroForm单选按钮。PDF规范并没有明确规定PDF查看器在这种情况下应该做什么(毕竟这是误用),但讨论中的PDF表单生成器很可能已经试验并确定,在使用最广泛的PDF查看器Adobe Reader中,这种误用正是他们想要的。处理此类PDF文件的其他PDF处理器可能会产生完全不同的结果,而不会出现任何错误。您可以尝试使用
check.SetValue(“01”,false)
而不是
check.SetValue(“01”)
来为您的复选框生成新外观。这会告诉iText不要生成新外观。谢谢@mkl<代码>检查。设置值(“01”,假)有效!问题是,生成PDF的任何内容都会给所有复选框赋予相同的名称。就我所知,你对此无能为力,除非你能控制生成过程。这个PDF不是我生成的。如果没有办法,那么我将编辑de PDF并更改de字段名称。问题是每次客户端更改名称时,我都需要更改名称。实际上,PDF mis使用PDF AcroForm复选框作为单选按钮