java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java提取PDF文字

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

作者:2401_89793006

这篇文章主要介绍了Java中提取PDF文本的三种方法:ApachePDFBox(普通PDF,轻量易用)、iText(复杂格式,功能强大)、TesseractOCR(扫描版,需OCR识别),并给出各场景下的推荐选择,需要的朋友可以参考下

使用 Java 提取 PDF 中的文字

在日常开发中,我们经常需要从 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 说明

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 说明

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 说明

4. 总结

方法适用场景主要特点
Apache PDFBox普通 PDF轻量、易用,适用于大部分 PDF
iText复杂格式 PDF功能强大,适合更复杂的文本解析
Tesseract OCR扫描版 PDF需要 OCR 识别,适用于无文本层的 PDF

推荐选择:

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

您可能感兴趣的文章:
阅读全文