1

タイプ'iTextSharp.text.pdf.PdfLiteral'のオブジェクトをタイプ'iTextSharp.text.pdf.PdfNumber'にキャストできません。

コード:

StringBuilder text = new StringBuilder();

SimpleTextExtractionStrategy strategy = new SimpleTextExtractionStrategy();

for (int p = 1; p <= reader.NumberOfPages; p++)
{

    text.AppendLine(PdfTextExtractor.GetTextFromPage(reader, p, strategy));
}
reader.Close();
return text.ToString();

非常に少数のPDFでのみこのエラーが発生します。何か案は?

スタックトレース:

   at iTextSharp.text.pdf.parser.PdfContentStreamProcessor.ShowTextArray.Invoke(PdfContentStreamProcessor processor, PdfLiteral oper, List`1 operands)
   at iTextSharp.text.pdf.parser.PdfContentStreamProcessor.InvokeOperator(PdfLiteral oper, List`1 operands)
   at iTextSharp.text.pdf.parser.PdfContentStreamProcessor.ProcessContent(Byte[] contentBytes, PdfDictionary resources)
   at iTextSharp.text.pdf.parser.PdfReaderContentParser.ProcessContent[E](Int32 pageNumber, E renderListener)
   at iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(PdfReader reader, Int32 pageNumber, ITextExtractionStrategy strategy)
   at DCS.Common.PDF.Functions.GetTextPdf(PdfReader reader) in C:\Users\rmaldonado\Documents\Visual Studio 2008\Projects\DCS\Contract\Common\PDF\Functions.cs:line 35
   at DCS.Common.PDF.Functions.ParsePDF(Byte[] bytes) in C:\Users\rmaldonado\Documents\Visual Studio 2008\Projects\DCS\Contract\Common\PDF\Functions.cs:line 23
   at DCS.CAPPS.BLL.Common.Attachment.ReParseText() in C:\Users\rmaldonado\Documents\Visual Studio 2008\Projects\DCS\Contract\ContractBLL\Common\Common.cs:line 1120
4

3 に答える 3

1

PDFからテキストを抽出するには、以下のコードを使用してみてください

PdfTextExtractor.GetTextFromPage(reader, p, new LocationTextExtractionStrategy())
于 2013-03-21T05:01:06.567 に答える
1

@mklが言ったように、PDfにもエラーがあるかもしれません。テキストの内容をPDfからメモ帳にコピーして貼り付けてみてください。空白になりますか。内容が画像形式か他の形式かを確認するだけです。そして、可能であれば完全なコードを提供します。

于 2013-03-22T03:57:26.330 に答える
1

ドキュメントMod2.pdfのページコンテンツが完全に壊れています。実際には、iTextが分析しようとしたときにエラーが発生したように、Adobe Preflight(Acrobat 9.5.4から)がひどく壊れています。

手動検査は、最も明白なエラーがTJ操作のオペランドの配列に注入された操作に関連していることを示しています。

[(OMB) 0.0 Tc -278.0 (Approval) 0.0 Tc -278.0 (2700-0042) ] TJ

[(AMENDMENT) 0.0 Tc -278.0 (OF) 0.0 Tc -278.0 (SOLICITATION/MODIFICATION)
 0.0 Tc -278.0 (OF) 0.0 Tc -278.0 (CONTRACT) ] TJ

このパターンは継続します。つまり、重要な[...]TJ操作にはすべて注入された0.0Tc操作が含まれます。

これは間違っています。PDF仕様ISO32000-1:2008のセクション7.8.2 :

PDFでは、演算子に必要なすべてのオペランドは、その演算子の直前になければなりません。演算子は結果を返しません。また、演算子が実行を終了したときにオペランドが残されてはなりません。

これにより、 ( TJPdfContentStreamProcessor.ShowTextArray.Invoke操作の処理を担当する)エラーが発生します。TJのオペランド配列には文字列と数値のみが含まれる可能性があるため、a以外のすべてがキャストされますが、Tc演算子は次のインスタンスです。PdfString,PdfNumberPdfLiteral.

于 2013-03-22T14:13:45.557 に答える