PDF阅读错误

时间:2013-07-29 12:53:20

标签: java itext

我得到以下异常:

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上使用iText-2.1.5.jar和JDK7u25。我想附加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;
}

注意:方法中未声明的所有变量都被声明为在调用read()之前初始化的实例字段。

1 个答案:

答案 0 :(得分:0)

您使用的类是在iText版本2.1.4中引入的,并且在iText版本2.1.5中添加了出现问题的方法(computeAverageWidth())。问题是在该版本中还引入了一个错误 - 该方法的最后一行是:

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

2.1.6之后的一个版本使用以下代码修复了错误:

private int computeAverageWidth(){
 ...
 return count != 0 ? total/count : 0;
}

因此,如果您升级到2.1.6 / 2.1.7或自己修复该课程,您将不会再遇到这个问题......