我将 PDFBox 从 1.8 更新到 2.0.2 后无法索引 pdf 文件

Can not index pdf file after i updated PDFBox from 1.8 to 2.0.2

我正在使用 PDFBox 和 tika 对 pdf 文件进行内容索引。 PDFFBox 1.8 一切正常,但是当将 PDFBox 更新为 2.0.2 时,出现以下错误:

(Thread-62 (HornetQ-client-global-threads-2071379348)) Exception while creating solr doucment for content::Failed to close temporary resources: org.apache.tika.exception.TikaException: Failed to close temporary resources
at org.apache.tika.io.TemporaryResources.dispose(TemporaryResources.java:152)
at org.apache.tika.parser.pdf.PDFParser.parse(PDFParser.java:149)
at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:242)
at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:242)
at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:120)

at org.hornetq.jms.client.JMSMessageListenerWrapper.onMessage(JMSMessageListenerWrapper.java:91)
at org.hornetq.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:983)
at org.hornetq.core.client.impl.ClientConsumerImpl.access0(ClientConsumerImpl.java:48)
at org.hornetq.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:1113)
at org.hornetq.utils.OrderedExecutorFactory$OrderedExecutor.run(OrderedExecutorFactory.java:100)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: Could not delete temporary file C:\Users\FILESE~1\AppData\Local\Temp\apache-tika-7918716906396425097.tmp
at org.apache.tika.io.TemporaryResources.close(TemporaryResources.java:70)
at org.apache.tika.io.TemporaryResources.close(TemporaryResources.java:121)
at org.apache.tika.io.TemporaryResources.dispose(TemporaryResources.java:150)
... 18 more

你能帮我解决这个问题吗?

我将 PDFBox 更新为 2.0.2 因为

我的 gradle 依赖项是:

compile "org.apache.poi:poi:3.8"
compile "org.apache.poi:poi-ooxml:3.8"
compile "org.apache.poi:poi-scratchpad:3.8"
compile "org.apache.pdfbox:pdfbox:2.0.2"

compile 'org.apache.tika:tika-parsers:1.5'
compile 'org.apache.tika:tika-core:1.5'

这里我使用的是tika 1.5,这个版本支持pdfbox 2.0.3。你可以看到 here

您使用 Tika 1.5 版并声明

Tika 1.5 supports pdfbox 2.0.3

考虑到 Tika 1.5 早在 PDFBox 版本 2.x 之前就已于 2014 年 2 月发布,而且 PDFBox 2.0.0 在多个方面与其早期版本 1.8.x 发布。

您指向 mvnrepository page for Apache Tika Parsers » 1.5 以支持您的主张。此页面显示:

但这意味着 Tika 1.5 依赖于 PDFBox 1.8.4,现在存在 PDFBox 版本 2.0.3。它不是意味着Tika 1.5 可以与PDFBox 2.0.3 一起正常运行。

查看 pom 文件您会看到:

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>1.8.4</version>
</dependency>

至此,Tika 1.5 与 PDFBox 1.8.4 一起开发和编译。如果 PDFBox 版本编号合理,您可以希望 Tika 1.5 能与任何 PDFBox 1 正常工作。8.x 从 x == 4 开始。

但 PDFBox 开发人员借此机会在其 2.0.0 版本中彻底改革了 PDFBox 架构。因此,很可能没有依赖于 1.x PDFBox 版本的程序可以在不进行更改的情况下与 PDFBox 2.x 一起运行。

根据 TIKA 问题 TIKA-1959,Tika 可以 运行 使用 PDFBox 2.0.1 自版本 1.13。


长话短说,因此,如果您想将 Tika 与 PDFBox 2 一起使用,您至少需要 1.13 版本。0.x.