我正在尝试使用apache PDFBox(1.8.9)从Java中获取PDF文件中的一些数据。我在buildpath和classpath中添加了jar(在Eclipse-Mars中)
我在创建PDFTextStripper
对象时遇到空指针异常。
import java.io.File;
import org.apache.pdfbox.util.PDFTextStripper;
import org.apache.pdfbox.pdmodel.PDDocument;
public class MainClass {
public static void main(String[] args) {
PDDocument pd ;
try{
StringBuilder sb = new StringBuilder();
File input = new File("C:\\Result.pdf");
pd = PDDocument.load(input);
PDFTextStripper s = new PDFTextStripper();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
我得到的错误是:
java.lang.NullPointerException
at org.apache.pdfbox.util.TextNormalize.findICU4J(TextNormalize.java:54)
at org.apache.pdfbox.util.TextNormalize.<init>(TextNormalize.java:45)
at org.apache.pdfbox.util.PDFTextStripper.<init>(PDFTextStripper.java:229)
at MainClass.main(MainClass.java:17)
(第17行是我尝试创建PDFTextStripper对象的地方)
答案 0 :(得分:0)
您缺少某些依赖关系,请确保您的类路径中存在以下三个jar: -
我用上述三个罐子执行了你问题中提到的代码,没有收到任何NPE。
另外请检查您的pdfbox-1.8.9.jar,确保其未损坏。
TextStripper类存在于pdfbox-1.8.9.jar中,因此我认为这个jar已损坏。
再次下载jar并尝试。
答案 1 :(得分:0)
检查TextStripper类的来源,看起来未找到类的异常返回为null。
您需要ICU4J jar作为您的依赖项。这些类在运行时加载。
来自TextStripper
// see if we can load the icu4j classes from the classpath
try
{
this.getClass().getClassLoader().loadClass("com.ibm.icu.text.Bidi");
this.getClass().getClassLoader().loadClass("com.ibm.icu.text.Normalizer");
icu4j = new ICU4JImpl();
}
catch (ClassNotFoundException e)
{
icu4j = null;
}