iTextSharp 索引超出范围
iTextSharp IndexOutOfRange
不断收到 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));
}
你的问题出在你的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
表示array/collection的length/count。因此,3
长度的最后一个有效索引将是 index 2
。
您必须将其更改为:
currentPageIndex < numberOfPages
... 因为 currentPageIndex
必须保持少于总页数。否则就是越界
我还建议您学习如何调试,以便您可以单步执行代码或在抛出异常时检查值。
确保您 运行 的 iTextSharp 版本大于 5.1,它有一个与您的问题完全匹配的错误:
- iTextSharp v5 GetTextFromPage() throws IndexOutOfRangeException
- Index was outside the bounds of the array while reading a .Pdf using 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;
}
不断收到 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));
}
你的问题出在你的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
表示array/collection的length/count。因此,3
长度的最后一个有效索引将是 index 2
。
您必须将其更改为:
currentPageIndex < numberOfPages
... 因为 currentPageIndex
必须保持少于总页数。否则就是越界
我还建议您学习如何调试,以便您可以单步执行代码或在抛出异常时检查值。
确保您 运行 的 iTextSharp 版本大于 5.1,它有一个与您的问题完全匹配的错误:
- iTextSharp v5 GetTextFromPage() throws IndexOutOfRangeException
- Index was outside the bounds of the array while reading a .Pdf using 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;
}