我得到以下异常:
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()之前初始化。
您正在使用的类是在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或自己修复该类,你就不会再遇到这个问题了。。。