2009-11-18 10 views
1

iText를 사용하여 PDF 문서를 읽습니다. ArrayIndexOutOfBoundsException이 발생합니다. 이상한 점은 특정 파일 및 해당 파일의 특정 위치에서만 발생한다는 것입니다. PDF가 해당 위치에서 인코딩되는 방식과 관련이 있다고는하지만 문제가 무엇인지 파악할 수는 없습니다.iText로 PDF 문서 읽기 때때로 작동하지 않습니다

나는이 질문을 Read pdf using iText에서 보았지만이 파일의 위치를 ​​변경하여 문제를 해결 한 것으로 보입니다. 일부 파일의 특정 위치에서 예외가 발생하면이 기능이 작동하지 않습니다. 따라서 파일 자체가 아니고 문제의 원인이되는 페이지가 예외입니다.

스택 추적은 "기본"java.lang.ArrayIndexOutOfBoundsException 스레드에서

예외입니다 : 잘못된 인덱스 : com.lowagie.text.pdf.CMapAwareDocumentFont.decodeSingleCID (알 수없는 소스) 에서 02 에서 com.lowagie.text.pdf.CMapAwareDocumentFont.decode (알 수없는 소스) (com.lowagie.text.pdf.parser.PdfContentStreamProcessor.decode) 알 수없는 소스) at com.lowagie.text.pdf.parser.PdfContentStreamProcessor $ ShowText.invoke (Unknown So (알 수없는 소스) com.lowagie.text.pdf.parser.PdfContentStreamProcessor.invokeOperator (알 수없는 소스) com.lowagie.text.pdf.parser.PdfContentStreamProcessor.processContent (알 수없는 소스) 에서 com.lowagie.text.pdf. com.pdfextractor.main.Extractor.main에서 parser.PdfTextExtractor.getTextFromPage (알 소스) (Extractor.java:61)

라인 (61)이 줄에 해당
함량 = extractor.getTextFromPage (페이지);
그래서 getTextFromPage() 메소드가 작동하지 않는다는 것이 확실합니다.

public static void main(String[] args) throws IOException{ 
    ArrayList<String> keywords = new ArrayList<String>(); 
     keywords.add("location"); 
     keywords.add("Mass Spectrometry"); 
     keywords.add("vacuole"); 
     keywords.add("cytosol"); 

    String directory = "C:/Ankur/Projects/PEB/Extractor/papers/"; 
    File directoryToRead = new File(directory); 
    String[] sa_filesToRead = directoryToRead.list(); 
    List<String> filesToRead = Arrays.asList(sa_filesToRead); 

    Iterator<String> fileItr = filesToRead.iterator(); 
    while(fileItr.hasNext()){   

     String nextFile = fileItr.next(); 

     PdfReader reader = new PdfReader(directory+nextFile); 
     int noPages = reader.getNumberOfPages(); 
     PdfTextExtractor extractor = new PdfTextExtractor(reader); 

    String content=""; 
    for(int page=1;page<=noPages;page++){ 
     int index = 1; 
     System.out.println(page); 
     content = extractor.getTextFromPage(page); 

     }  
    } 
    } 
+0

관련 항목 : http://stackoverflow.com/questions/1753752/arrayindexoutofboundsexception-not-being-caught-and-ignored –

답변

1

대부분의 자바 클래스/라이브러리 getTextFromPage(int) 같은 방법은 0에서 시작하는 색인 ​​기대 - getTextFromPage(0) 1 페이지에서 텍스트를 반환해야 함을 의미 getTextFromPage(1)

귀하에 대한 2 페이지의 텍스트를 반환해야합니다 루프는 ArrayIndexOutOfBoundsException이 1부터 시작하여 인덱싱됩니다.

iText의 getTextFromPage(int)이 거의 (거의) 표준 0이 아닌 1에서 시작되는 것이 확실합니까?

+2

페이지가 없습니다. 1에서 시작됩니다. 그리고 페이지 = 31이고 39 페이지가있을 때 오류가 발생하므로 정말 이상합니다. – Ankur

+0

그건 사실이야. 페이징은 0 대신 1에서 시작합니다. –

+0

왜이 대답을 수락 했습니까? – MrDrews

0

매우 활성화 된 IText 메일 링리스트에 게시 해 보았습니까?

+0

예 - 같은 질문이 3 번 게시되어 답변되지 않았습니다. – Ankur

0

비슷한 문제가 있으며 텍스트에 특수 문자가 포함되어있는 경우 항상 발생합니다. 인코딩을 해결하는 방법이 있는지 궁금합니다.

(업데이트 됨) 5.1.3의 com.itextpdf.itextpdf에서이 문제가 있었지만 5.3.4로 업데이트되었습니다. 이 문제는 수정되었습니다.