当前位置: 代码网 > it编程>编程语言>Java > 使用Java提取PDF中的文字的三种常见方法

使用Java提取PDF中的文字的三种常见方法

2025年06月30日 Java 我要评论
使用 java 提取 pdf 中的文字在日常开发中,我们经常需要从 pdf 文件中提取文本,比如用于文档分析、搜索功能、数据挖掘等。本篇文章将介绍三种常见的方法:apache pdfbox(适用于大部

使用 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:使用 pdfboxitext
  • 复杂格式 pdf:推荐 itext
  • 扫描版 pdf:使用 tesseract ocr 进行识别。

到此这篇关于使用java提取pdf中的文字的三种常见方法的文章就介绍到这了,更多相关java提取pdf文字内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com