Я использую iText для чтения из PDF-документа. Я получаю ArrayIndexOutOfBoundsException. Странно то, что это происходит только для определенных файлов и в определенных местах в этих файлах. Я подозреваю, что это как-то связано с тем, как PDF кодируется в этих местах, но не могу понять, в чем проблема.
Я посмотрел на этот вопрос Прочитайте PDF, используя iText , но он, похоже, решил свою проблему, изменив местоположение этого файла. Это не сработает для меня, так как я получаю исключение в определенных местах в некоторых файлах, поэтому исключение вызывает не сам файл, а рассматриваемая страница.
Трассировка стека
Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: Неверный индекс: 02
на com.lowagie.text.pdf.CMapAwareDocumentFont.decodeSingleCID (неизвестный источник)
на com.lowagie.text.pdf.CMapAwareDocumentFont.decode (неизвестный источник)
на com.lowagie.text.pdf.parser.PdfContentStreamProcessor.decode (неизвестный источник)
at com.lowagie.text.pdf.parser.PdfContentStreamProcessor.displayPdfString (неизвестный источник)
в com.lowagie.text.pdf.parser.PdfContentStreamProcessor $ ShowText.invoke (Неизвестный источник)
на com.lowagie.text.pdf.parser.PdfContentStreamProcessor.invokeOperator (неизвестный источник)
в com.lowagie.text.pdf.parser.PdfContentStreamProcessor.processContent (Неизвестный источник)
в com.lowagie.text.pdf.parser.PdfTextExtractor.getTextFromPage (Неизвестный источник)
at com.pdfextractor.main.Extractor.main (Extractor.java:61)
И строка 61 соответствует этой строке:
content = extractor.getTextFromPage (page);
Поэтому вполне очевидно, что метод getTextFromPage () не работает.
public static void main(String[] args) throws IOException{
ArrayList<String> keywords = new ArrayList<String>();
keywords.add("location");
keywords.add("Mass Spectrometry");
keywords.add("vacuole");
keywords.add("cytosol");
String directory = "C:/Ankur/Projects/PEB/Extractor/papers/";
File directoryToRead = new File(directory);
String[] sa_filesToRead = directoryToRead.list();
List<String> filesToRead = Arrays.asList(sa_filesToRead);
Iterator<String> fileItr = filesToRead.iterator();
while(fileItr.hasNext()){
String nextFile = fileItr.next();
PdfReader reader = new PdfReader(directory+nextFile);
int noPages = reader.getNumberOfPages();
PdfTextExtractor extractor = new PdfTextExtractor(reader);
String content="";
for(int page=1;page<=noPages;page++){
int index = 1;
System.out.println(page);
content = extractor.getTextFromPage(page);
}
}
}