2015-01-08 4 views
3

계속 가져 오는 중 IndexOutOfRangeException 처리되지 않은 예외입니다.iTextSharp IndexOutOfRange

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

이것은 콘솔 창과 관련이 있습니까? –

+0

먼저 'PdfTextExtractor.GetTextFromPage'의 API를 살펴보아야합니다. 그러나 인덱스 'currentPageIndex'를 0에서 시작하여'currentPageIndex GEEF

+0

@JohnSaunders 제 제목을 편집 해 주셔서 감사합니다. 감사합니다. 콘솔 창에서 텍스트를 표시 할 위치입니다. 솔직히 나는 그 오류를 지나칠 수 없으므로 콘솔에 PDF로 쓰는 것에 대해 이야기했다. –

답변

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; 
    } 
+0

예, SO에 대한 다른 규칙은 다음과 같아야합니다. * 항상 * 사용중인 도구의 버전 번호를 언급하십시오. 최신 버전이 아닌 경우 최신 버전을 사용해보십시오. 최신 버전에서 작동하지만 질문을 게시하지 마십시오 –

+0

@kuujinbo 대단히 고마워요. 문제가 해결되었습니다. 글쎄요, 이제 pdf를 표시 할 수 있습니다. 내 자신에게. 고마워. –

1

귀하의 문제는 내에있는 귀하의 for loop :

위의 코드에 문제가 몇 가지 있습니다
for (var currentPageIndex = 1; currentPageIndex <= numberOfPages; currentPageIndex++) 
{ 
    PdfTextExtractor.GetTextFromPage(reader, currentPageIndex); 
} 

:

문제 # 1

모르겠다는 0에서의 컬렉션 및 배열 이후 이 아닌 index 1에서 시작하는 이유은 index 0에서 시작합니다 ... 아마도 첫 번째 페이지를 건너 뛰려고합니다. index 1에서 시작하는 경우 두 번째 페이지에서 계산을 시작한다는 것을 이해하십시오. 이 ... 두 번째 문제에 저를 제공

문제 # 2

예를 들어
currentPageIndex <= numberOfPages 

, currentPageIndex3하고 numberOfPages3 경우,이 표현은 내 코드를 허용 true로 평가 것 실행하는 블록 그러나 numberOfPages은 배열/컬렉션의 길이/개수를 나타냅니다. 따라서 길이가 3 인 마지막 유효 색인은 index 2이됩니다.

당신은 그것으로 변경해야합니다

currentPageIndex < numberOfPages 

... currentPageIndex 이후로는 총 페이지 미만을 유지해야합니다. 그렇지 않으면 범위를 벗어납니다.

또한 디버깅 방법을 배우는 것이 좋습니다. 따라서 코드를 단계별로 실행하거나 예외가 발생하는 시점의 값을 확인할 수 있습니다.

+0

이제 NullReferenceException 예외가 발생합니다. 나는 이것이 더 좋든 나쁘 든 확실하지 않다. –

+0

@ T0rchic 그것은 우리에게 아무것도 알려주지 않는다. 로드중인 파일이 존재하지 않거나 잘못된 경로를 제공했을 수 있습니다. 디버거를 사용하여 코드를 단계별로 실행하십시오. 게다가, 그게 당신이 우리에게 보여주고있는 모든 코드인지 확실하지 않습니다. 왜냐하면'sb'는 아무 것도하지 않기 때문입니다. –

+0

나는 이것을하기 위해 사용한다, 내가 이것을 처음부터 통합하지 않은 이유를 모르겠다. sb.Append (PdfTextExtractor.GetTextFromPage (reader, currentPageIndex) –