使用反射填写PDF表单 - ItextSharp

本文关键字:表单 ItextSharp PDF 反射 | 更新日期: 2023-09-27 17:55:49

我正在尝试使用反射填写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.

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

使用反射填写PDF表单 - ItextSharp

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

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

您不需要获取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();
 }

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