Моя программа должна прочитать первые страницы PDF-файла и для этого использует PDFBox 2.0.15.Это часто работает, но для некоторых документов (отсканированных PDF-файлов со сканера / принтера, которые не могут быть общими) я получаю вышеупомянутое исключение, хотя индексный цикл не превышает PdPageTree getCount()
:
PDPageTree allPages = pdf.getPages();
int pageLimit = allPages.getCount();
System.err.println("Page Tree has " + pageLimit + " pages"); // 1 page reported
for (int i = 0; i < pageLimit; i++) {
System.err.println("i = " + i); // prints 0
PDPage page = allPages.get(i); // => java.lang.IllegalStateException: Index not found: 1 (1-based page numbering as written in the javadoc but get() is 0-based)
…
}
И трассировка стека:
java.lang.IllegalStateException: Index not found: 1
at org.apache.pdfbox.pdmodel.PDPageTree.get(PDPageTree.java:298)
at org.apache.pdfbox.pdmodel.PDPageTree.get(PDPageTree.java:227)
at myProject.tools.analyzePDF(Tools.java:1159)
at java.base/java.util.stream.MatchOps$1MatchSink.accept(MatchOps.java:90)
at java.base/java.util.HashMap$KeySpliterator.tryAdvance(HashMap.java:1624)
at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:127)
at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:502)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.MatchOps$MatchTask.doLeaf(MatchOps.java:306)
at java.base/java.util.stream.MatchOps$MatchTask.doLeaf(MatchOps.java:277)
at java.base/java.util.stream.AbstractShortCircuitTask.compute(AbstractShortCircuitTask.java:115)
at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:746)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at java.base/java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:408)
at java.base/java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:736)
at java.base/java.util.stream.MatchOps$MatchOp.evaluateParallel(MatchOps.java:242)
at java.base/java.util.stream.MatchOps$MatchOp.evaluateParallel(MatchOps.java:196)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233)
at java.base/java.util.stream.ReferencePipeline.anyMatch(ReferencePipeline.java:528)
at myProject.State.StartState$1.run(StartState.java:135)
at java.base/java.util.TimerThread.mainLoop(Timer.java:556)
at java.base/java.util.TimerThread.run(Timer.java:506)
Почему я получаю это исключение, хотя pageCount () верна?
У задействованных файлов PDF есть следующие общие метаданные:
- Производитель:Eastman Kodak Company
- Создатель: Smart Touch 1.3
- Формат: PDF 1.4
- Оптимизирован: Нет
- Защищен: Нет
- Формат бумаги: А4 портрет