我正在使用 iText 从 PDF 文档中读取。我收到一个 ArrayIndexOutOfBoundsException。奇怪的是它只发生在某些文件和这些文件中的某些位置。我怀疑这与 PDF 在这些位置的编码方式有关,但无法弄清楚问题所在。
我看过这个问题Read pdf using iText但他似乎通过更改此文件的位置解决了他的问题。这对我不起作用,因为我在某些文件中的某些位置遇到异常 - 所以不是文件本身,而是有问题的页面导致异常。
堆栈跟踪是
线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:索引无效:com.lowagie.text.pdf.CMapAwareDocumentFont.decodeSingleCID(Unknown Source) at com.lowagie.text.pdf.CMapAwareDocumentFont.decode(Unknown Source) at com 的 02 .lowagie.text.pdf.parser.PdfContentStreamProcessor.decode(Unknown Source) at com.lowagie.text.pdf.parser.PdfContentStreamProcessor.displayPdfString(Unknown Source) at 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(未知来源)在 com.pdfextractor.main.Extractor。主要(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);
}
}
}