iTextSharp IndexOutOfRange

时间:2015-01-08 01:20:29

标签: c# .net itextsharp

继续获取IndexOutOfRangeException是未处理的异常。

var sb = new StringBuilder();
var bdn = String.Format("{0}\\bdn.pdf", Application.StartupPath);
var reader = new PdfReader("bdn.pdf");
var numberOfPages = reader.NumberOfPages;
for (var currentPageIndex = 1; currentPageIndex <= numberOfPages; currentPageIndex++)
{
        sb.Append(PdfTextExtractor.GetTextFromPage(reader, currentPageIndex));
}

2 个答案:

答案 0 :(得分:2)

确保您运行的是大于5.1的iTextSharp版本,其中有一个与您的问题完全匹配的错误:

刚刚使用此代码测试5.5.4.0(最新版本),该代码有效:

    StringBuilder sb = new StringBuilder();
// substitute 'pdfPath' with path to YOUR PDF
    PdfReader reader = new PdfReader(pdfPath);
    int pageNumber = 1;
    while (pageNumber <= reader.NumberOfPages) {
      sb.Append(PdfTextExtractor.GetTextFromPage(reader, pageNumber));
      ++pageNumber;
    }

答案 1 :(得分:1)

您的问题在于for loop

for (var currentPageIndex = 1; currentPageIndex <= numberOfPages; currentPageIndex++)
{
    PdfTextExtractor.GetTextFromPage(reader, currentPageIndex);
}

上述代码存在以下几个问题:

问题#1

我不知道从index 1开始的原因,而不是index 0,因为C#中的集合和数组始于index 0 ...你试图跳过第一页。如果您从index 1开始,请了解您在第二页上开始计算。这让我想到了第二个问题......

问题#2

currentPageIndex <= numberOfPages

例如,如果currentPageIndex3numberOfPages3,则此表达式将计算为true,允许块内的代码为执行。但是,numberOfPages表示数组/集合的长度/计数。因此,3长度的最后一个有效索引将是index 2

您必须将其更改为:

currentPageIndex < numberOfPages

...因为currentPageIndex必须保持少于总页数。否则,它将超出范围。

我还建议学习如何调试,以便您可以单步执行代码或在抛出异常时检查值。