使用itextsharp使用C#以PDF格式编写数据时遇到的挑战

使用itextsharp使用C#以PDF格式编写数据时遇到的挑战,c#,itextsharp,C#,Itextsharp,我的要求是在客户提供的PDF文件中写入数据。 此PDF几乎没有文本框、单选按钮和复选框 我能够使用C#使用itextsharp(5.5.5.0)在给定的PDF文件中写入数据,但这里有三个挑战 单选按钮-我可以选择一个单选按钮,但不知何故它选择为“X”,我如何修复它 在我以PDF格式写入数据后,PDF变成只读,我无法更改数据。通过C#在PDF中填充数据后,如何将PDF的状态保持为可写状态 根据单选按钮的选择,PDF应该显示不同的文本框,我的意思是,如果我选择单选按钮1到C,PDF应该显示文本框1,

我的要求是在客户提供的PDF文件中写入数据。 此PDF几乎没有文本框、单选按钮和复选框

我能够使用C#使用itextsharp(5.5.5.0)在给定的PDF文件中写入数据,但这里有三个挑战

  • 单选按钮-我可以选择一个单选按钮,但不知何故它选择为“X”,我如何修复它

  • 在我以PDF格式写入数据后,PDF变成只读,我无法更改数据。通过C#在PDF中填充数据后,如何将PDF的状态保持为可写状态

  • 根据单选按钮的选择,PDF应该显示不同的文本框,我的意思是,如果我选择单选按钮1到C,PDF应该显示文本框1,如果我选择单选按钮2到C,PDF应该显示文本框2,我如何实现这一点

  • 我正在使用此代码以PDF格式编写并选择RadioButton

    string pdfTemplate = @"C:\Users\Desktop\vstryout\Form_SH-7 - Copy.pdf";
                string newFile = @"C:\Users\Desktop\vstryout\Form_SH-7 - Copy-1.pdf";
                PdfReader pdfReader = new PdfReader(pdfTemplate);
                PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(newFile, FileMode.Create, FileAccess.ReadWrite), '\0', false);
                AcroFields formFields = pdfStamper.AcroFields;
    
                foreach (var de in formFields.Fields)
                {
                    if (de.Key == "Form5_Dtls[0].Page1[0].Heading[0].CompName_C[0]")
                    {
                        formFields.SetField("Form5_Dtls[0].Page1[0].Heading[0].CompName_C[0]", "Company Name");
                    }
    
                    if (de.Key.ToString() == "Form5_Dtls[0].Page1[0].Heading[0].CompanyAdd_C[0]")
                    {
                        formFields.SetField("Form5_Dtls[0].Page1[0].Heading[0].CompanyAdd_C[0]", "Company Address");
                    }
    
                    if (de.Key.ToString() == "Form5_Dtls[0].Page1[0].SRN[0].SRN_C[0]")
                    {
                        formFields.SetField("Form5_Dtls[0].Page1[0].SRN[0].SRN_C[0]", "SRN");
                    }
    
                    if (de.Key.ToString() == "Form5_Dtls[0].Page1[0].Resolution[0].DateOfMeeting_D[0]")
                    {
                        formFields.SetField("Form5_Dtls[0].Page1[0].Resolution[0].DateOfMeeting_D[0]", "16/12/2010");
                    }
    
                    if (de.Key.ToString() == "Form5_Dtls[0].Page1[0].Resolution[0].OrdinarySpecial_R[0]")
                    {
                        formFields.SetField("Form5_Dtls[0].Page1[0].Resolution[0].OrdinarySpecial_R[0]", "Yes");
                    }
    
    
                    if (de.Key.ToString() == "Form5_Dtls[0].Page1[0].Heading[0].PurposeofForm[0]")
                    {
                        if (formFields.GetFieldType("Form5_Dtls[0].Page1[0].Heading[0].PurposeofForm[0]").ToString() == "3")
                        {
                            string[] str = formFields.GetAppearanceStates("Form5_Dtls[0].Page1[0].Heading[0].PurposeofForm[0]");
                            formFields.SetField("Form5_Dtls[0].Page1[0].Heading[0].PurposeofForm[0]", str[2]);
                        }
                    }
                }
                pdfStamper.FormFlattening = true;
                pdfStamper.Close();
                pdfReader.Close();
    
    仅供参考…我不必在PDF中创建任何字段,字段已经存在于PDF文件中,我只需要将数据放入这些字段中


    关于

    您的代码的一些示例会很好。删除
    pdfStamper.formflatting=true,这将防止文档表单成为只读。我已删除pdfStamper.FormFlatting=true;但现在它没有填充字段中的任何数据,并且仍然不可编辑