Asp.net core iText 7-调用Pdformfield.SetValue或PdforForm.FlattFields时出现范围外异常

Asp.net core iText 7-调用Pdformfield.SetValue或PdforForm.FlattFields时出现范围外异常,asp.net-core,itext7,Asp.net Core,Itext7,我的雇主目前正在使用经典的ASP和FDF从数据库加载PDF,填充它们,并将它们提供给浏览器。他们希望创建一个更现代的实现来匹配他们新的ASP.NET核心范例,因此我的注意力被吸引到了iText 7上,据我所知,iText 7至少在实验上支持核心,目前已有几个版本。我尝试填写的PDF示例是 以下是我目前的尝试。“doc”是一个对象,包含作为字节数组(doc.Document)的PDF,以及要填充的字段的名称(doc.DocumentFields.DocFieldName)和要填充这些字段的文本(d

我的雇主目前正在使用经典的ASP和FDF从数据库加载PDF,填充它们,并将它们提供给浏览器。他们希望创建一个更现代的实现来匹配他们新的ASP.NET核心范例,因此我的注意力被吸引到了iText 7上,据我所知,iText 7至少在实验上支持核心,目前已有几个版本。我尝试填写的PDF示例是

以下是我目前的尝试。“doc”是一个对象,包含作为字节数组(doc.Document)的PDF,以及要填充的字段的名称(doc.DocumentFields.DocFieldName)和要填充这些字段的文本(doc.DocumentFields.ReplacementText)

注意到这源于绘制字段的外观,我将“false”传递到SetValue的可选GenerateAppearance参数中,此后错误消失了。然而,同样的错误出现在form.flattFields()上。因此,我发现可以使用PdfAcroForm.SetGenerateAppearance(false)禁用在FlattFields()中生成外观,我试过了。这完全消除了错误,但是生成的PDF只包含空白字段,减去设置了默认值的两个字段

在最后一个场景中,我能够在调用SetValue()之后设置断点并在varField.GetValue()上添加一个监视,并看到该值表面上设置为我要查找的文本。因此,我假设,如果我能够让我正在使用的方法以它们想要的方式生成外观,我可能会看到我的值

我已经搜索了堆积如山的堆积如山的堆积如山的堆积如山的堆积如山的堆积如山的堆积如山的堆积如山的堆积如山的堆积如山的堆积如山的堆积如山。我所能找到的唯一一个似乎与我在谷歌上看到的问题完全相符的问题被删除了

这是一个源于软件对.Net标准/核心支持的“实验性”性质的问题吗?还是我真的在做傻事?谢谢你抽出时间

编辑:我还应该提到,我尝试了教程中提到的默认模式,得到了相同的结果。我的意思是:

fields.TryGetValue(field, out toSet);
toSet.SetValue("0");
Exception has occurred: CLR/System.ArgumentOutOfRangeException
An exception of type 'System.ArgumentOutOfRangeException' occurred in System.Private.CoreLib.dll but was not handled in user code: 'Index was out of range. Must be non-negative and less than the size of the collection.'
   at System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
   at System.Collections.Generic.List`1.get_Item(Int32 index)
   at iText.Kernel.Pdf.PdfArray.Get(Int32 index, Boolean asDirect)
   at iText.Kernel.Pdf.PdfArray.GetAsNumber(Int32 index)
   at iText.Forms.Fields.PdfFormField.DrawBorder(PdfCanvas canvas, PdfFormXObject xObject, Single width, Single height)
   at iText.Forms.Fields.PdfFormField.DrawTextAppearance(Rectangle rect, PdfFont font, Single fontSize, String value, PdfFormXObject appearance)
   at iText.Forms.Fields.PdfFormField.RegenerateField()
   at iText.Forms.Fields.PdfFormField.SetValue(String value, Boolean generateAppearance)
fields.TryGetValue(field, out toSet);
toSet.SetValue("0");