iText PdfTextExtractor getTextFromPage exception“读取文件指针处的字符串时出错”

时间:2011-12-21 10:38:10

标签: java java-ee itext

我正在使用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的格式问题。

所以我的问题是,这个格式问题是什么,无论如何都要避免它?感谢。

2 个答案:

答案 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);
    }

用这个替换你的代码它会正常工作..