iText PdfTextExtractor getTextFromPage исключение «Ошибка чтения строки в указателе файла» - PullRequest
1 голос
/ 21 декабря 2011

Я использую 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 - Строковая строка = extractor.getTextFromPage (i);

Но при втором тесте в http://www.irs.gov/pub/irs-pdf/fw4.pdf, я могу получить текстовый контент без исключения. Поэтому я думаю, что это проблема формата первого pdf, которая вызывает исключение.

Итак, мой вопрос: что это за проблема с форматом и нужно ли ее вообще избегать? Спасибо.

Ответы [ 2 ]

1 голос
/ 17 октября 2012
    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);
    }

замените ваш код этим, он будет работать нормально ..

1 голос
/ 20 февраля 2012

Я получаю ту же ошибку, и после некоторого расследования кажется, что проблема с моими документами в формате pdf заключается в том, что они содержат заголовок или нижний колонтитул, а не документ irs, который вы связали.Я проиндексировал документ PDF на 900 страниц, и около 70 страниц не удалось извлечь.Видимо, все эти страницы имеют информацию об авторских правах в нижнем колонтитуле.Любые идеи, как решить эту проблему?

------ РЕДАКТИРОВАТЬ ---------- Я применил следующий метод, чтобы получить текст из вышеупомянутого PDF.Надеюсь, что это работает и для вас.


PdfReader pdfReader = new PdfReader(file);
PdfReaderContentParser parser = new PdfReaderContentParser(pdfReader);

strategy = parser.processContent(currentPage, new SimpleTextExtractionStrategy());              
content = strategy.getResultantText();
...