iTextSharp IndexOutOfRange

本文关键字:IndexOutOfRange iTextSharp | 更新日期: 2023-09-27 18:36:44

Keep get IndexOutOfRangeException is unhandle exception.

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));
}

iTextSharp IndexOutOfRange

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

  • iTextSharp v5 GetTextFromPage() 抛出 IndexOutOfRangeException
  • 索引在读取 .使用 iTextSharp 的 PDF

刚刚用 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;
    }

你的问题出在你的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

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

您必须将其更改为:

currentPageIndex < numberOfPages

。因为currentPageIndex必须保持小于总页数。 否则,它将超出界限。

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