我正在使用iText PdfTextExtractor从PdfReader中提取文本,其中PdfReader是从字节数组创建的,
byte[] pdfbytes = outputStream.toByteArray();
PdfReader reader = new PdfReader(pdfbytes);
int pagenumber = reader.getNumberOfPages();
PdfTextExtractor extractor = new PdfTextExtractor(reader);
for(int i = 1; i<= pagenumber; i++) {
System.out.println("============PAGE NUMBER " + i + "=============" );
String line = extractor.getTextFromPage(i);
System.out.println(line);
}
第一个测试pdf来自:http://www.gnostice.com/downloads/Gnostice_PathQuest.pdf 我可以打印出第一页,但在第二页获得以下例外
例外:
Exception in thread "main" ExceptionConverter: java.io.IOException: Error reading string at file pointer 238291
at com.lowagie.text.pdf.PRTokeniser.throwError(Unknown Source)
at com.lowagie.text.pdf.PRTokeniser.nextToken(Unknown Source)
at com.lowagie.text.pdf.PdfContentParser.nextValidToken(Unknown Source)
at com.lowagie.text.pdf.PdfContentParser.readPRObject(Unknown Source)
at com.lowagie.text.pdf.PdfContentParser.parse(Unknown Source)
at com.lowagie.text.pdf.parser.PdfContentStreamProcessor.processContent(Unknown Source)
at com.lowagie.text.pdf.parser.PdfTextExtractor.getTextFromPage(Unknown Source)
at org.xxx.services.pdfparser.xxxExtensionPdfParser.main(xxxExtensionPdfParser.java:114)
其中xxxExtensionPdfParser.java:114是String line = extractor.getTextFromPage(i);
但是在http://www.irs.gov/pub/irs-pdf/fw4.pdf的第二次测试中,我可以毫无例外地获得文本内容。所以我认为必须是导致异常的第一个pdf的格式问题。
所以我的问题是,这个格式问题是什么,无论如何都要避免它?感谢。
答案 0 :(得分:1)
我收到同样的错误,经过一些调查,我的pdf文档的问题似乎是它们包含'header'或'footer'而不是你链接的irs文档。我索引了900页的pdf文档,大约70页无法提取。显然,所有这些页面都有页脚版权信息。有任何想法如何解决这个问题?
------编辑---------- 我应用以下方法从上述pdf中获取文本。希望这也适合你。
PdfReader pdfReader = new PdfReader(file);
PdfReaderContentParser parser = new PdfReaderContentParser(pdfReader);
strategy = parser.processContent(currentPage, new SimpleTextExtractionStrategy());
content = strategy.getResultantText();
答案 1 :(得分:1)
byte[] pdfbytes = outputStream.toByteArray();
PdfReader reader = new PdfReader(pdfbytes);
int pagenumber = reader.getNumberOfPages();
PdfTextExtractor extractor = new PdfTextExtractor(reader);
for(int i = 1; i<= pagenumber; i++) {
System.out.println("============PAGE NUMBER " + i + "=============" );
String line = PdfTextExtractor.getTextFromPage(reader,i);
System.out.println(line);
}
用这个替换你的代码它会正常工作..