ItextSharp-使用C#自动填充pdf表单-复选框问题

ItextSharp-使用C#自动填充pdf表单-复选框问题,c#,pdf,itextsharp,C#,Pdf,Itextsharp,我正在填写使用Acrobat pro和iTextSharp&C#创建的pdf表单,在尝试勾选复选框字段时发现自己被卡住了 我有它的单选按钮和文本框工作,但似乎无法让复选框的工作。 我还确认了本例中的复选框名称“Q7b”在acrobat文档中是正确的,并且可以使用以下代码在表单中找到它 private string getfieldnames(AcroFields fields) { StringBuilder sb = new StringBuilder(); foreach

我正在填写使用Acrobat pro和iTextSharp&C#创建的pdf表单,在尝试勾选复选框字段时发现自己被卡住了

我有它的单选按钮和文本框工作,但似乎无法让复选框的工作。 我还确认了本例中的复选框名称“Q7b”在acrobat文档中是正确的,并且可以使用以下代码在表单中找到它

private string getfieldnames(AcroFields fields)
{
    StringBuilder sb = new StringBuilder();

    foreach (string key in fields.Fields.Keys)
    {

        sb.Append(key + Environment.NewLine);
    }
    return sb.ToString();

}
下面是我用来更新复选框的代码

using (MemoryStream pdfFlat = new MemoryStream())
{

    PdfReader pdfReader = new PdfReader(strPath);
    PdfStamper pdfStamp = new PdfStamper(pdfReader, pdfFlat);
    AcroFields fields = pdfStamp.AcroFields;

    //textfields
    fields.SetField("Initiating_Doctor", "Doctor A");
    fields.SetField("Speciality", "Surgeon");

    //Radiobuttons
    fields.SetField("PRELIM_Q1", "Yes");
    fields.SetField("PRELIM_Q2", "No");
    fields.SetField("PRELIM_Q3", "No");
    fields.SetField("PRELIM_Q4", "No");

    //checkbox - Set the checkbox to checked but this does not work.
    fields.SetField("Q7b", "Yes");

    pdfReader.Close();
    pdfStamp.FormFlattening = true;
    pdfStamp.FreeTextFlattening = true;
    pdfStamp.Writer.CloseStream = false;
    pdfStamp.Close();
}
任何帮助都将不胜感激


Brad

复选框值通常为“开”和“关”。广播组可以使用他们希望使用的任何值(加上“关闭”)。

我也尝试了打开和关闭复选框,但它不起作用。然后我在AdobeLiveCycle设计器中打开。在复选框中,值属性的值上的绑定属性已更改。将它们设置为是和否。现在它对我有效。

对于复选框,您需要将“1”作为值传递

试着跟随

fields.SetField("PRELIM_Q1", "1");

将字段值设置为复选框的导出值将导致选中该复选框。因此,如果导出值为“是”,则将字段值设置为“是”将勾选复选框。如果导出值是其他值(例如“开”),则需要将字段值设置为该值,以便勾选该框。

fields.SetField(“您的_字段”,“开”);
默认情况下,On对我有效。

不确定是库还是PDF模板是如何创建的,但我尝试了yes/no、On/off、true/false。。。这些选项都不起作用。不过,使用“1”和“0”还是有效的


我建议您尝试这4个选项,直到找到适合您的值。

谢谢您的帮助。在休息一下并仔细查看pdf文档后,我发现复选框的导出值属性有一个奇怪的值。将此设置为On并将代码更改为匹配已解决问题字段。设置字段(“Q7b”、“On”);仔细的在通常提交表单的地方,这种“奇怪的值”可能是必要的。如果你只在内部使用它,没问题。但是,如果您试图返回原始提交目标,则需要再次将该字段值转换回原始提交目标。更容易还原它并在代码中使用奇怪的值。谢谢您的警告。这是一个内在的东西,所以改变这个值不会产生影响。看起来aaron已经提供了一个更准确的答案。