0

我正在尝试使用 iTextsharp 加载表单 PDF。当我尝试使用 Acrofield 为该 PDF 中的字段元素设置值时,我得到“无效的投射异常”。“将 IDictionary 对象类型转换为数组时出错”。

我们使用的是 itextSharp 5.* 版本

错误堆栈跟踪:

无法将“iTextSharp.text.pdf.PdfDictionary”类型的对象转换为“iTextSharp.text.pdf.PdfArray”类型。

   at iTextSharp.text.pdf.AcroFields.Fill()
   at iTextSharp.text.pdf.AcroFields..ctor(PdfReader reader, PdfWriter writer)
   at iTextSharp.text.pdf.PdfStamperImp.GetAcroFields()
   at iTextSharp.text.pdf.PdfStamper.get_AcroFields()
   at generate_PDF.WebForm1.generate_PDF() in c:\Users\Documents\Visual Studio 2013\Projects\generate_PDF\generate_PDF\PDF.aspx.cs:line 159
  at generate_PDF.WebForm1.BtnPrint_Click(Object sender, EventArgs e) in c:\Users\465816\Documents\Visual Studio 2013\Projects\generate_PDF\generate_PDF\PDF.aspx.cs:line 32
  at System.Web.UI.WebControls.Button.OnClick(EventArgs e)
  at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
  at System.   

请在下面的链接中找到表格。

https://drive.google.com/file/d/0B3W8aJry8ZMERnJubHpMdVk5SmM/view?usp=sharing

但相同的代码适用于其他 PDF 表单。请让我知道出现此错误的原因,这是因为 PDF 吗?或任何其他问题。

4

1 回答 1

1

该异常的原因是示例 PDF 中的 AcroForm PDF 表单描述无效。


在 PDF 的AcroForm交互式表单字典(对象 200)中,Fields键的值是字典对象(对象 201):

201 0 obj
<<
/T(ŸJ˜OPZ?h&7·Œ]VŸÄþ)
/Kids[ 190 0 R 191 0 R 192 0 R]
>>
endobj
200 0 obj
<<
/DR 194 0 R
/XFA[(uÕêÒãÊ\0224) 195 0 R(fÈáÕçÏ) 196 0 R(qÂâÃâÉ\0124) 197 0 R(aÆûÒýÍ\012") 198 0 R(uÈüÇïÅ\034=O) 199 0 R]
/Fields 201 0 R
/NeedAppearances true
>>
endobj 

但规范ISO 32000-1明确规定

Fields数组(必需)对文档根字段(在字段层次结构中没有祖先的那些)的引用数组。

(表 218 - 交互式表单字典中的条目)

所以这个值必须是一个数组。

请要求文件来源提供有效的 PDF。

于 2015-09-09T12:34:07.183 回答