开发者

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

开发者 https://www.devze.com 2025-06-30 10:42 出处:网络 作者: 2401_89793006
目录使用 Java 提取 PDF 中的文字1. 使用 Apache PDFBox 提取 PDF 文本1.1 添加 Maven 依赖1.2 代码示例1.3 说明2. 使用 iText 提取 PDF 文本2.1 添加 Maven 依赖2.2 代码示例2.3 说明3. 使用 Tesseract OCR 处理扫描
目录
  • 使用 Java 提取 PDF 中的文字
    • 1. 使用 Apache PDFBox 提取 PDF 文本
      • 1.1 添加 Maven 依赖
      • 1.2 代码示例
      • 1.3 说明
    • 2. 使用 iText 提取 PDF 文本
      • 2.1 添加 Maven 依赖
      • 2.2 代码示例
      • 2.3 说明
    • 3. 使用 Tesseract OCR 处理扫描版 PDF
      • 3.1 添加 Maven 依赖
      • 3.2 代码示例
      • 3.3 说明
    • 4. 总结

    使用 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 phppdfStripper = new PDFTextStripper();
                String text = pdfStripper.getText(document);
                System.out.println("提取的文本内容:\n" + text);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    1.3 说明

    • PDDocument.load(Fil编程e):加载 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.getNumbjavascripterOfPages(); 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</androidartifactId>
        <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 文件路径
            PDDjavascriptocument 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文字内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号