gpt4 book ai didi

java - 获取 java.lang.NoClassDefFoundError : org/pdfbox/pdfparser/

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:02 24 4
gpt4 key购买 nike

下面是我正在使用的代码,我提供了一个 pdf 文件和一个文本文件作为命令行的输入。

import org.pdfbox.cos.COSDocument;
import org.pdfbox.pdfparser.PDFParser;
import org.pdfbox.pdmodel.PDDocument;
import org.pdfbox.pdmodel.PDDocumentInformation;
import org.pdfbox.util.PDFTextStripper;

import java.io.File;
import java.io.FileInputStream;
import java.io.PrintWriter;

public class PDFTextParser {

PDFParser parser;
String parsedText;
PDFTextStripper pdfStripper;
PDDocument pdDoc;
COSDocument cosDoc;
PDDocumentInformation pdDocInfo;

// PDFTextParser Constructor
public PDFTextParser() {
}

// Extract text from PDF Document
String pdftoText(String fileName) {

System.out.println("Parsing text from PDF file " + fileName + "....");
File f = new File(fileName);

if (!f.isFile()) {
System.out.println("File " + fileName + " does not exist.");
return null;
}

try {
parser = new PDFParser(new FileInputStream(f));
} catch (Exception e) {
System.out.println("Unable to open PDF Parser.");
return null;
}

try {
parser.parse();
cosDoc = parser.getDocument();
pdfStripper = new PDFTextStripper();
pdDoc = new PDDocument(cosDoc);
parsedText = pdfStripper.getText(pdDoc);
} catch (Exception e) {
System.out.println("An exception occured in parsing the PDF Document.");
e.printStackTrace();
try {
if (cosDoc != null) cosDoc.close();
if (pdDoc != null) pdDoc.close();
} catch (Exception e1) {
e.printStackTrace();
}
return null;
}
System.out.println("Done.");
return parsedText;
}

// Write the parsed text from PDF to a file
void writeTexttoFile(String pdfText, String fileName) {

System.out.println("\nWriting PDF text to output text file " + fileName + "....");
try {
PrintWriter pw = new PrintWriter(fileName);
pw.print(pdfText);
pw.close();
} catch (Exception e) {
System.out.println("An exception occured in writing the pdf text to file.");
e.printStackTrace();
}
System.out.println("Done.");
}

//Extracts text from a PDF Document and writes it to a text file
public static void main(String args[]) {

if (args.length != 2) {
System.out.println("Usage: java PDFTextParser ");
System.exit(1);
}

PDFTextParser pdfTextParserObj = new PDFTextParser();
String pdfToText = pdfTextParserObj.pdftoText(args[0]);

if (pdfToText == null) {
System.out.println("PDF to Text Conversion failed.");
}
else {
System.out.println("\nThe text parsed from the PDF Document....\n" + pdfToText);
pdfTextParserObj.writeTexttoFile(pdfToText, args[1]);
}
}
}

通过命令行运行此代码并输入 2 个 pdf 文件名和另一个文本文件名后,我收到 noClassDefFound 异常。下面是堆栈跟踪。

Exception in thread "main" java.lang.NoClassDefFoundError: org/pdfbox/pdfparser/
PDFParser
at PDFTextParser.pdftoText(PDFTextParser.java:42)
at PDFTextParser.main(PDFTextParser.java:93)
Caused by: java.lang.ClassNotFoundException: org.pdfbox.pdfparser.PDFParser
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 2 more

添加类路径后,我遇到异常

Exception in thread "main" java.lang.NoClassDefFoundError: org/fontbox/afm/AFMParser
at org.pdfbox.pdmodel.font.PDFont.getAFM(PDFont.java:350)
at org.pdfbox.pdmodel.font.PDFont.getAverageFontWidthFromAFMFile(PDFont.java:313)
at org.pdfbox.pdmodel.font.PDSimpleFont.getAverageFontWidth(PDSimpleFont.java:231)
at org.pdfbox.util.PDFStreamEngine.showString(PDFStreamEngine.java:276)
at org.pdfbox.util.operator.ShowTextGlyph.process(ShowTextGlyph.java:80)
at org.pdfbox.util.PDFStreamEngine.processOperator(PDFStreamEngine.java:452)
at org.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:215)
at org.pdfbox.util.PDFStreamEngine.processStream(PDFStreamEngine.java:174)
at org.pdfbox.util.PDFTextStripper.processPage(PDFTextStripper.java:336)
at org.pdfbox.util.PDFTextStripper.processPages(PDFTextStripper.java:259)
at org.pdfbox.util.PDFTextStripper.writeText(PDFTextStripper.java:216)
at org.pdfbox.util.PDFTextStripper.getText(PDFTextStripper.java:149)
at PDFTextParser.pdftoText(PDFTextParser.java:53)
at PDFTextParser.main(PDFTextParser.java:93)
Caused by: java.lang.ClassNotFoundException: org.fontbox.afm.AFMParser
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 14 more

最佳答案

在 Java 中运行具有外部依赖项(在您的情况下为 PDF 解析器)的程序时,您必须将适当的 JAR 文件包含到您的 CLASSPATH 中。

参见 this other thread on Stack Overflowthe documentation at Oracle .

我搜索了在 jarfinder.com 上找不到的类,结果发现您需要(至少)包含两个不同的 JAR 文件 - font boxpdf box JAR。

关于java - 获取 java.lang.NoClassDefFoundError : org/pdfbox/pdfparser/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18503159/

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