Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将SQL Server表行绑定到可编辑PDF表单C_C#_.net_Pdf_Itext - Fatal编程技术网

C# 将SQL Server表行绑定到可编辑PDF表单C

C# 将SQL Server表行绑定到可编辑PDF表单C,c#,.net,pdf,itext,C#,.net,Pdf,Itext,我有一个可编辑的pdf表格。我创建了一个与PDF中列相同的表。我的要求是将这些列dataSingle行绑定到现有PDF的文本框 在这里,通过我的一段代码,我可以获得PDF表单字段的id,并将这些字段与数据绑定 { MemoryStream ms = new MemoryStream(); PdfReader reader = new PdfReader(Request.MapPath("~/test.pdf")); PdfStamper formFiller = new PdfStamper(r

我有一个可编辑的pdf表格。我创建了一个与PDF中列相同的表。我的要求是将这些列dataSingle行绑定到现有PDF的文本框

在这里,通过我的一段代码,我可以获得PDF表单字段的id,并将这些字段与数据绑定

{
MemoryStream ms = new MemoryStream();
PdfReader reader = new PdfReader(Request.MapPath("~/test.pdf"));
PdfStamper formFiller = new PdfStamper(reader, ms);
AcroFields formFields = formFiller.AcroFields;

        ArrayList aa = new ArrayList();



        foreach (DictionaryEntry de in reader.AcroFields.Fields)
        {


            aa.Add(de.Key.ToString());

        }



        SqlCommand cmd = new SqlCommand("select Gname ,addr1 ,addr2,hno,gender ,postcode ,
        Fname,color,driving ,country ,city,height from example where Gname='pramod'", conn);
        DataSet ds = new DataSet();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(ds);
        conn.Open();
        int counter = 0;
        int colcount = ds.Tables[0].Columns.Count;
        if (!object.Equals(ds.Tables[0], null))
        {
            if (ds.Tables[0].Rows.Count > 0)
            {
                for (int j = 0; j < colcount; j++)
                {

                        foreach (var item in aa)
                        {
                            if (item.ToString() == ds.Tables[0].Columns[j].ToString())                                
                            {
                                formFields.SetField(item.ToString(), ds.Tables[0].Rows[0][j].ToString());
                                var it = item.ToString();
                                counter++;
                                if (counter > 0)
                                {
                                    aa.Remove(it);
                                    break;
                                }

                            }
                }
            }
        }

    formFiller.Close();
    reader.Close();


    Response.ContentType = "application/pdf";
    Response.WriteFile("Default4.aspx");
    Response.BinaryWrite(ms.ToArray());
但问题是,我随机获取这些ID,即pdf中的顺序不同。所以我不能继续使用基于索引的循环绑定,因为ID不是按顺序出现的。而且我也不知道哪个Id与哪个文本/复选框对应

对于下图中的ex,第一个AADHAR编号id来自pdf的第10页。而且,你可以看到一些不规则的名字,比如checkbox1,2,我无法确定它是哪个文本框id


永远不要依赖表单中字段的顺序。这是一种糟糕的做法,因为任何人都可以随时更改模板中字段的顺序,然后您将不得不更改代码,因为更改了顺序。这是在问问题

根据您编写的内容,您应该为PDF中的字段指定与数据库表中字段相同的名称,我假设您已经这样做了。如果名称相同,则可以执行以下操作:

ds.Tables[0].Rows[0][item.ToString()].ToString()
请注意,您的循环很笨拙。你在浪费CPU!你为什么不这样做呢:

if (ds.Tables[0].Rows.Count > 0)
{
    foreach (var item in aa)
    {
        var it = item.ToString();
        formFields.SetField(it, ds.Tables[0].Rows[0][it].ToString());
    }
}
免责声明:我不是C开发人员,我只是在谷歌上搜索,直到找到答案。我没有测试答案,但我希望你能理解

我很难阅读和理解你的代码,因为你把它弄得太复杂了。我想这就是为什么没有人回答你的问题。有一种说法,我建议你在将来这样做-


你还说你看到了一些不规则的名字,比如checkbox1,2,我不知道它是哪个文本框id。如果您不共享PDF,我们无法在这个问题上帮助您,但鉴于名称checkbox1,checkbox2,。。。我假设这些不是文本框,而是复选框。请不要混淆文本框可以有任何字符串值,复选框可以有两个可能值中的一个,其中一个是关闭的。

您不应该依赖表单中字段的顺序。这是一种糟糕的做法,因为任何人都可以随时更改模板中字段的顺序,然后您将不得不更改代码,因为更改了顺序。这是在问问题

根据您编写的内容,您应该为PDF中的字段指定与数据库表中字段相同的名称,我假设您已经这样做了。如果名称相同,则可以执行以下操作:

ds.Tables[0].Rows[0][item.ToString()].ToString()
请注意,您的循环很笨拙。你在浪费CPU!你为什么不这样做呢:

if (ds.Tables[0].Rows.Count > 0)
{
    foreach (var item in aa)
    {
        var it = item.ToString();
        formFields.SetField(it, ds.Tables[0].Rows[0][it].ToString());
    }
}
免责声明:我不是C开发人员,我只是在谷歌上搜索,直到找到答案。我没有测试答案,但我希望你能理解

我很难阅读和理解你的代码,因为你把它弄得太复杂了。我想这就是为什么没有人回答你的问题。有一种说法,我建议你在将来这样做-

你还说你看到了一些不规则的名字,比如checkbox1,2,我不知道它是哪个文本框id。如果您不共享PDF,我们无法在这个问题上帮助您,但鉴于名称checkbox1,checkbox2,。。。我假设这些不是文本框,而是复选框。请不要混淆文本框可以有任何字符串值,复选框可以有两个可能值中的一个,其中一个是关闭的