我有一个可编辑的pdf表格。我创建了一个包含与PDF相同列的表。我的要求是将这些列数据(单行)绑定到现有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与哪个文本/复选框一起使用?
如下图所示,第一个 AADHAR NUMBER ID来自pdf的第10页。而且,你可以看到一些不规则的名称,如checkbox1,2,我无法弄清楚它是哪个文本框ID ..
答案 0 :(得分:1)
您永远不应该依赖表单中字段的顺序。这是不好的做法,因为任何人都可以随时更改模板中字段的顺序,然后由于此更改的顺序,您将不得不更改代码。那是在寻找问题。
您应该为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#开发人员,我只是用Google搜索,直到找到答案。我没有测试答案,但我希望你能得到这个想法。
我很难阅读和理解你的代码,因为你的代码太复杂了。我猜这就是为什么没有人回答你的问题。有一种说法"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."我建议你将来这样做; - )
你还说你看到一些不规则的名字,比如checkbox1,2,我无法弄清楚它是哪个文本框。如果你不知道我们无法帮你解决这个问题不要共享PDF,但是给出名称 checkbox1 , checkbox2 ,...我会假设那些不是文本框,但是它们是复选框。请不要将文本框(可以包含任何字符串值)与复选框混淆(可以有两个可能的值中的一个,其中一个是off
)。