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は明確に指定しています

フィールド配列(必須)ドキュメントのルート フィールド (フィールド階層に祖先がないフィールド) への参照の配列。

(表 218 – インタラクティブ フォーム ディクショナリのエントリ)

したがって、その値は配列でなければなりません。

ファイルのソースに有効な PDF を提供するよう依頼してください。

于 2015-09-09T12:34:07.183 に答える