使用反射填写PDF表格 - ItextSharp

时间:2013-01-25 09:59:29

标签: c# pdf reflection itextsharp

我正在尝试使用如下反射填写pdf表单:

// Get the form fields for this PDF and fill them in!
 var formFieldMap = GetFormFieldNames(pdfTemplate);

     foreach (var fields in formFieldMap)
       {
         var fieldName = UppercaseFirst(fields.Key.Replace("pdf_", ""));

         var proPertyValue = fosques.GetType().GetProperty(fieldName).GetValue(ques, null);

          formFieldMap[fields.Key] = proPertyValue.ToString();

         }

这适用于第一个属性,但在第二次迭代时它会显示Collection was modified; enumeration operation may not execute.

我应该创建另一个字段集合,还是可以避免这种情况?

2 个答案:

答案 0 :(得分:1)

您正在修改formFieldMap循环内的foreach,它是迭代的基础。这就是它第二次停止迭代的原因。因此,您必须维护一个单独的变量以在循环内收集这些值,并在完成循环后将其附加到formFieldMap

答案 1 :(得分:0)

您正在引用您在枚举中枚举的列表。

您无需获取formFieldMapy[fields.Key]因为您已有权访问它,所以您可以这样做:

foreach (var fields in formFieldMap)
{
  var fieldName = UppercaseFirst(fields.Key.Replace("pdf_", ""));

  var proPertyValue = fosques.GetType().GetProperty(fieldName).GetValue(ques, null);
  fields.Value = proPertyValue.ToString();
  //formFieldMap[fields.Key] = proPertyValue.ToString();
 }

上面做了同样的事情,它只是不直接修改你要枚举的内容。