Я использую 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, которая вызывает исключение.
Итак, мой вопрос: что это за проблема с форматом и нужно ли ее вообще избегать? Спасибо.