使用 java 提取 pdf 中的文字
在日常开发中,我们经常需要从 pdf 文件中提取文本,比如用于文档分析、搜索功能、数据挖掘等。本篇文章将介绍三种常见的方法:
- apache pdfbox(适用于大部分 pdf)
- itext(支持复杂格式 pdf)
- tesseract ocr(适用于扫描版 pdf)
1. 使用 apache pdfbox 提取 pdf 文本
1.1 添加 maven 依赖
<dependency>
<groupid>org.apache.pdfbox</groupid>
<artifactid>pdfbox</artifactid>
<version>2.0.27</version>
</dependency>
1.2 代码示例
import org.apache.pdfbox.pdmodel.pddocument;
import org.apache.pdfbox.text.pdftextstripper;
import java.io.file;
import java.io.ioexception;
public class pdftextextractor {
public static void main(string[] args) {
string pdfpath = "sample.pdf"; // 替换为你的 pdf 文件路径
try (pddocument document = pddocument.load(new file(pdfpath))) {
pdftextstripper pdfstripper = new pdftextstripper();
string text = pdfstripper.gettext(document);
system.out.println("提取的文本内容:\n" + text);
} catch (ioexception e) {
e.printstacktrace();
}
}
}
1.3 说明
pddocument.load(file):加载 pdf 文件。pdftextstripper.gettext(document):提取文本。- 适用于大部分 pdf,但如果 pdf 采用了图片格式(扫描版),无法提取。
2. 使用 itext 提取 pdf 文本
2.1 添加 maven 依赖
<dependency>
<groupid>com.itextpdf</groupid>
<artifactid>itext7-core</artifactid>
<version>7.1.17</version>
</dependency>
2.2 代码示例
import com.itextpdf.kernel.pdf.*;
import com.itextpdf.kernel.pdf.canvas.parser.pdftextextractor;
import java.io.file;
import java.io.ioexception;
public class itextpdftextextractor {
public static void main(string[] args) {
string pdfpath = "sample.pdf"; // 替换为你的 pdf 文件路径
try (pdfdocument pdfdoc = new pdfdocument(new pdfreader(pdfpath))) {
stringbuilder extractedtext = new stringbuilder();
for (int i = 1; i <= pdfdoc.getnumberofpages(); i++) {
extractedtext.append(pdftextextractor.gettextfrompage(pdfdoc.getpage(i))).append("\n");
}
system.out.println("提取的文本内容:\n" + extractedtext);
} catch (ioexception e) {
e.printstacktrace();
}
}
}
2.3 说明
pdfreader(pdfpath):加载 pdf 文件。pdftextextractor.gettextfrompage(pdfdoc.getpage(i)):逐页提取文本。- 适用于大部分 pdf,支持更复杂的文本解析。
3. 使用 tesseract ocr 处理扫描版 pdf
如果 pdf 是扫描版(仅包含图片),需要 ocr 识别文本。
3.1 添加 maven 依赖
<dependency>
<groupid>net.sourceforge.tess4j</groupid>
<artifactid>tess4j</artifactid>
<version>4.5.5</version>
</dependency>
3.2 代码示例
import net.sourceforge.tess4j.tesseract;
import net.sourceforge.tess4j.tesseractexception;
import org.apache.pdfbox.pdmodel.pddocument;
import org.apache.pdfbox.rendering.pdfrenderer;
import java.awt.image.bufferedimage;
import java.io.file;
import java.io.ioexception;
public class ocrpdfextractor {
public static void main(string[] args) throws ioexception, tesseractexception {
string pdfpath = "scanned.pdf"; // 替换为你的 pdf 文件路径
pddocument document = pddocument.load(new file(pdfpath));
pdfrenderer pdfrenderer = new pdfrenderer(document);
tesseract tesseract = new tesseract();
tesseract.setdatapath("tessdata"); // 设置 tesseract 训练数据路径
tesseract.setlanguage("eng"); // 设置语言
stringbuilder extractedtext = new stringbuilder();
for (int i = 0; i < document.getnumberofpages(); i++) {
bufferedimage image = pdfrenderer.renderimage(i);
extractedtext.append(tesseract.doocr(image)).append("\n");
}
document.close();
system.out.println("ocr 提取的文本内容:\n" + extractedtext);
}
}
3.3 说明
pdfrenderer.renderimage(i):将 pdf 页转换为图片。tesseract.doocr(image):执行 ocr 识别文本。- 适用于无可选文本的扫描版 pdf。
4. 总结
| 方法 | 适用场景 | 主要特点 |
|---|---|---|
| apache pdfbox | 普通 pdf | 轻量、易用,适用于大部分 pdf |
| itext | 复杂格式 pdf | 功能强大,适合更复杂的文本解析 |
| tesseract ocr | 扫描版 pdf | 需要 ocr 识别,适用于无文本层的 pdf |
推荐选择:
- 普通文本 pdf:使用 pdfbox 或 itext。
- 复杂格式 pdf:推荐 itext。
- 扫描版 pdf:使用 tesseract ocr 进行识别。
到此这篇关于使用java提取pdf中的文字的三种常见方法的文章就介绍到这了,更多相关java提取pdf文字内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论