首页 > 原创文章 > 技术应用 > 查看文章

在Java中使用PDFBox来提取PDF中的文本

所属分类:技术应用 来源: 丁老师原创 更新时间:2025-10-08 09:04 浏览: 1450 IP属地: 深圳

有一个需求,需要提取PDF中表格的文本,项目是java环境,这个问题归属于"Java提取PDF文本"这一类。Java提取pdf文本的方法有很多,也有很多第三方库。丁老师使用的是Apache PDFBox,是Apache的第三方库,开源免费,功能强大,支持对PDF的创建、修改、加密、内容提取、图片解析等功能。

使用PDFBox提取PDF的方式如下:

一、添加Maven依赖

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.29</version>
</dependency>

二、实现代码

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import java.io.File;
import java.io.IOException;

public class PDFTextExtractor {

    /**
     * 提取整个PDF文件的文本内容
     * @param pdfFilePath PDF文件路径
     * @return 提取到的文本内容
     * @throws IOException 处理文件时可能出现的异常
     */
    public static String extractAllText(String pdfFilePath) throws IOException {
        //加载PDF文档
        try (PDDocument document = PDDocument.load(new File(pdfFilePath))) {
            //检查文档是否被加密
            if (document.isEncrypted()) {
                throw new IOException("PDF文档已加密,无法提取文本");
            }
            
            //创建PDFTextStripper实例
            PDFTextStripper stripper = new PDFTextStripper();
            
            //提取所有文本
            return stripper.getText(document);
        }
    }

    /**
     * 提取PDF中指定页码范围的文本
     * @param pdfFilePath PDF文件路径
     * @param startPage 起始页码(从1开始)
     * @param endPage 结束页码
     * @return 提取到的文本内容
     * @throws IOException 处理文件时可能出现的异常
     */
    public static String extractTextByPageRange(String pdfFilePath, int startPage, int endPage) throws IOException {
        try (PDDocument document = PDDocument.load(new File(pdfFilePath))) {
            if (document.isEncrypted()) {
                throw new IOException("PDF文档已加密,无法提取文本");
            }
            
            //验证页码范围
            int totalPages = document.getNumberOfPages();
            if (startPage < 1 || endPage > totalPages || startPage > endPage) {
                throw new IllegalArgumentException("无效的页码范围,总页数: " + totalPages);
            }
            
            PDFTextStripper stripper = new PDFTextStripper();
            //设置提取的页码范围
            stripper.setStartPage(startPage);
            stripper.setEndPage(endPage);
            
            return stripper.getText(document);
        }
    }

    public static void main(String[] args) {
        String pdfPath = "example.pdf"; //替换为你的PDF文件路径
        
        try {
            //提取所有文本
            String allText = extractAllText(pdfPath);
            System.out.println("=== 所有文本内容 ===");
            System.out.println(allText.substring(0, Math.min(allText.length(), 500))); // 只打印前500字符
            
            //提取指定页码范围的文本(示例:第1-2页)
            String pageRangeText = extractTextByPageRange(pdfPath, 1, 2);
            System.out.println("\n=== 第1-2页文本 ===");
            System.out.println(pageRangeText.substring(0, Math.min(pageRangeText.length(), 500)));
            
        } catch (IOException e) {
            System.err.println("提取文本失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

三、代码说明
PDFTextStripper函数是PDFBox中专门用于提取文本的类,支持各种文本提取需求。

主要方法:
extractAllText():提取 PDF 中所有页面的文本
extractTextByPageRange():提取指定页码范围内的文本。

功能特点:
1.支持自动处理文本的排版和换行。
2.支持设置提取的页码范围。
3.会检查文档是否加密,加密文档需要先解密才能提取。

四、注意事项
1.对于由扫描生成的PDF,因为这个文件是扫描的图片格式,所以PDFTextStripper无法提取文本。对于图片类的文件,可以使用OCR(图片文字提取)类工具进行内容提取。
2.涉及复杂排版的PDF,如学术类文章、包含计算公式等,提取到的文本可能会出现顺序错乱的情况。
3.涉及较大文件提取时,可能会速度过慢并占用系统资源,可以使用分页提取,并在提取后释放资源。
4.某些特殊字体或加密的PDF无法直接提取,需要额外单独处理。


标签:

相关文章

Wordpress如何开启错误调试,查看错误...

在使用wordpress的过程中,有的时候部分页面打不开,或是程序不能正常使用,也没有显示具体的错误信息,这个时候该怎么办呢?首先是查看错误日志,可以查看wordpress本身的错误日志,以及php的错误日志。这时有朋友提问了,word...

如何查看微信小程序的二维码?

对于已开发的微信小程序,二维码需要登录微信小程序管理后台查看,具体方法为:1.打开微信公众平台网址https://mp.weixin.qq.com/;2.用管理员微信扫码登录;3.进入小程序后台,在左侧底部的小程序名称中,选择账号设置,...

Wordpress如何进行版本更新?

Wordpress更新有两种方式,一种是自动更新,一种是手动更新。如何查看Wordpress的当前版本?1.用管理员登录Dashbord,如果Wordpress有新更新,在顶部会自动显示有新版本发布,提示进行更新。2.用管理员账号登录后...

Php里边的Memcache和Memcach...

在php的可安装扩展中,有Memcache和Memcached,两者只差一个字母,那么他们到底是什么,有什么区别呢?今天丁老师来解答。首先,Memcache是一种缓存技术,他可以把经常需要读取和存储的数据,保存在内存中,避免每次进行数据...

推荐文章

国外VPS购买后如何登录?

国外很多VPS购买后,只有密码,没有登录账号,如何登录呢?我们以one.com为例,购买了VPS后,只能设置密码,但是用root,也无法登录,是怎么回事呢?查了官方文档,原来修改的VPS密码,不是root的,这个VPS默认的账号是admin...

Linux使用lnmp套件安装后打卡默认站点...

最近要在某单位内网部署项目,使用了lnmp来配置环境,软件安装成功,可安装后不管是打开ip地址还是默认站点,都提示nginx 403 forbidden,这是怎么回事呢?首先,已经出现了nginx 403提示,说明nginx是安装正常的。其...

Windows11右键恢复经典模式的方法[亲...

windows11更新后,不管是桌面的右键,还是文件上点右键,都非常地别扭,而且也非常的卡顿。在网上找了一堆方法,都不管用,经过不懈努力,终于找到了真正能恢复经典版右键的方法。废话不多说,具体方法如下:1.以管理员方式运行CMD打开后,在C...

使用photoshop编辑文字时,弹出的文字...

今天有同学在群里提问,在使用photoshop编辑文字时,经常会弹出一个文字选择的面板如图:这时文字也无法输入,也无法取消和关闭,很是烦人,怎么取消这个功能呢?经过丁老师研究,方法很简单:1.打开photoshop菜单-编辑2.选择首选项-...

当前在线
免费咨询