gpt4 book ai didi

java - Tika 1.14 : getting java. PDFTextStripper 的 lang.NullPointerException

转载 作者:太空宇宙 更新时间:2023-11-04 11:54:50 25 4
gpt4 key购买 nike

使用 Apache Tika 的 PDFParser 解析 PDF 文件时收到以下错误消息

    Exception in thread "main" java.lang.ExceptionInInitializerError
at org.apache.tika.parser.pdf.PDFParser.parse(PDFParser.java:150)
at tikapdf.TikaPdfParser.main(TikaPdfParser.java:29)
Caused by: java.lang.NullPointerException
at org.apache.pdfbox.text.PDFTextStripper.<clinit>(PDFTextStripper.java:1852)
... 2 more

我在添加 PDFBox jar之前之后收到错误消息。 Tika 1.14 应该已经与 PDFBox 捆绑在一起。 Eclipse IDE 屏幕下方显示所有信息和 Java 代码。

package tikapdf;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.pdf.PDFParser;
import org.apache.tika.sax.*;
import org.xml.sax.SAXException;

public class TikaPdfParser {

public static void main(final String[] args) throws IOException, SAXException, TikaException {
try {
InputStream input = new FileInputStream(new File("D:\\Users\\bguarism\\workspace\\NLP\\invoice89526610.pdf"));

BodyContentHandler textHandler = new BodyContentHandler(-1); //-1 to allow parsing for unlimited character
Metadata metadata = new Metadata();
ParseContext context = new ParseContext();

//parsing the document using PDF parser
PDFParser parser = new PDFParser();
parser.parse(input, textHandler, metadata, context);

System.out.println("Title: "+ metadata.get(Metadata.TITLE));
//System.out.println("Body: "+ textHandler.toString());

input.close();

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

Eclipse IDE view of code, libraries, and console

最佳答案

我知道这个问题比较老,但今天我在使用 Eclipse Neon 时遇到了同样的问题。

这里是对您的问题的可能解释。

  • PDFbox 有一些类初始值设定项,它们使用逻辑“ .class.getClassLoader()”来获取与该类关联的类加载器的实例。我希望用作您所使用版本源的 PDFTextStripper.java 文件的第 1852 行将包含对此调用的引用。
  • 如果您决定将 Eclipse 库标记为“系统库”,那么 getClassLoader 将在它们被挂载到引导加载程序时返回“null”,因此您将收到 NullPointerException。随后的 getResourceAsStream 调用正在针对 null 值进行尝试,因此显然会失败。
  • 这也适用于 Apache XML-Beans 2.6 或 Apache POI 和其他实现。

可能的简单解决方案:从 Eclipse 库定义中删除“系统库”标志,并且 getClassLoader 将向类加载器返回一个实例。这样你就不会再遇到异常了。

更难的解决方案:修补 PDFBox 的代码库并检查空值。如果适用,请使用 ClassLoader.getSystemClassLoader() 代替。使用 Maven 重新编译。

关于java - Tika 1.14 : getting java. PDFTextStripper 的 lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41464611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com