继续获取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));
}
答案 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
例如,如果currentPageIndex
为3
且numberOfPages
为3
,则此表达式将计算为true
,允许块内的代码为执行。但是,numberOfPages
表示数组/集合的长度/计数。因此,3
长度的最后一个有效索引将是index 2
。
您必须将其更改为:
currentPageIndex < numberOfPages
...因为currentPageIndex
必须保持少于总页数。否则,它将超出范围。
我还建议学习如何调试,以便您可以单步执行代码或在抛出异常时检查值。