2013-07-29 3 views
1

나는 예외 아래에 무엇입니까 :PDF 읽기 오류

java.lang.ArithmeticException:/by zero 
    at com.lowagie.text.pdf.CMapAwareDocumentFont.computeAverageWidth(Unknown Source) 
    at com.lowagie.text.pdf.CMapAwareDocumentFont.<init>(Unknown Source) 
    at com.lowagie.text.pdf.parser.PdfContentStreamProcessor$SetTextFont.invoke(Unknown Source) 
    at com.lowagie.text.pdf.parser.PdfContentStreamProcessor.invokeOperator(Unknown Source) 
    at com.lowagie.text.pdf.parser.PdfContentStreamProcessor.processContent(Unknown Source) 
    at com.lowagie.text.pdf.parser.PdfTextExtractor.getTextFromPage(Unknown Source) 
    at com.mycompany.reader.PDFReader.read(PDFReader.java:258) 
    at com.mycompany.reader.AbstractReader.run(AbstractReader.java:205) 
    at java.lang.Thread.run(Unknown Source) 

누군가가 나이에 도움을 주시겠습니까? Windows7에서 JDK7u25와 iText-2.1.5.jar를 사용하고 있습니다. PDF를 첨부하고 싶었지만 파일을 첨부하는 방법을 모르겠습니다. 그것보다 클라이언트 측 PDF이기 때문에 여기에서 공유 할 수 없습니다.

public StringBuffer read() throws Exception { 
    StringBuffer result = new StringBuffer(); 
    PdfTextExtractor parser = new PdfTextExtractor(pdfReader); 

    int pageNumber = 0; 
    for(;index<totalPages;index++) { 
     try { 
      pageNumber = Integer.parseInt((String)pageNumberList.get(index)); 
      result.append(parser.getTextFromPage(pageNumber)); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      error("read", "Problem reading page number: " + pageNumber + " Reason: " + e.getMessage()); 
     } 
    } 

    return result; 
} 

참고 :

아래는 내 독서 코드 방법에 선언되지 않은 모든 변수가 이전에()를 호출 읽을 초기화 인스턴스 필드로 선언된다.

+1

파일을 읽을 때 사용할 Java 코드를 게시 할 수 있습니까? – Loki

+2

이것은 오래 전에 수정 된 알려진 버그입니다. 2009 년 3 월 iText 2.1.5 날짜; 오늘은 2013 년 7 월입니다. 업그레이드와 문제는 사라질 것입니다. http://lowagie.com/itext2 –

+0

빠른 응답을 보내 주셔서 감사합니다. 위의 질문을 읽기 코드를 게시하여 업데이트했습니다. 현재 사용중인 iText 버전으로이 문제를 해결할 수 있습니까? – ParagJ

답변

0

사용중인 클래스가 iText 버전 2.1.4에 도입되었으며 문제가 발생한 메소드 (computeAverageWidth())가 iText 버전 2.1.5에 추가되었습니다.

private int computeAverageWidth(){ 
... 
return total/count; 
} 

한 버전 이후 2.1.6에 버그가 다음 코드로 고정이 :

private int computeAverageWidth(){ 
... 
return count != 0 ? total/count : 0; 
} 
방법의 마지막 줄이 - 문제는 버그가 도입되었다 또한 버전이다

따라서 2.1.6/2.1.7로 업그레이드하거나 해당 클래스를 직접 수정하면이 문제가 더 이상 발생하지 않습니다 ...

+0

특정 버전을 알려 주셔서 감사합니다. :) – ParagJ