我将 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.
我正在使用 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.