欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Java提取PDF中的文字的三種常見(jiàn)方法

 更新時(shí)間:2025年06月30日 09:54:05   作者:2401_89793006  
這篇文章主要介紹了Java中提取PDF文本的三種方法:ApachePDFBox(普通PDF,輕量易用)、iText(復(fù)雜格式,功能強(qiáng)大)、TesseractOCR(掃描版,需OCR識(shí)別),并給出各場(chǎng)景下的推薦選擇,需要的朋友可以參考下

使用 Java 提取 PDF 中的文字

在日常開(kāi)發(fā)中,我們經(jīng)常需要從 PDF 文件中提取文本,比如用于文檔分析、搜索功能、數(shù)據(jù)挖掘等。本篇文章將介紹三種常見(jiàn)的方法:

  • Apache PDFBox(適用于大部分 PDF)
  • iText(支持復(fù)雜格式 PDF)
  • Tesseract OCR(適用于掃描版 PDF)

1. 使用 Apache PDFBox 提取 PDF 文本

1.1 添加 Maven 依賴(lài)

<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èi)容:\n" + text);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

1.3 說(shuō)明

  • PDDocument.load(File):加載 PDF 文件。
  • PDFTextStripper.getText(document):提取文本。
  • 適用于大部分 PDF,但如果 PDF 采用了圖片格式(掃描版),無(wú)法提取。

2. 使用 iText 提取 PDF 文本

2.1 添加 Maven 依賴(lài)

<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èi)容:\n" + extractedText);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2.3 說(shuō)明

  • PdfReader(pdfPath):加載 PDF 文件。
  • PdfTextExtractor.getTextFromPage(pdfDoc.getPage(i)):逐頁(yè)提取文本。
  • 適用于大部分 PDF,支持更復(fù)雜的文本解析。

3. 使用 Tesseract OCR 處理掃描版 PDF

如果 PDF 是掃描版(僅包含圖片),需要 OCR 識(shí)別文本。

3.1 添加 Maven 依賴(lài)

<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");  // 設(shè)置 Tesseract 訓(xùn)練數(shù)據(jù)路徑
        tesseract.setLanguage("eng");  // 設(shè)置語(yǔ)言

        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èi)容:\n" + extractedText);
    }
}

3.3 說(shuō)明

  • PDFRenderer.renderImage(i):將 PDF 頁(yè)轉(zhuǎn)換為圖片。
  • tesseract.doOCR(image):執(zhí)行 OCR 識(shí)別文本。
  • 適用于無(wú)可選文本的掃描版 PDF。

4. 總結(jié)

方法適用場(chǎng)景主要特點(diǎn)
Apache PDFBox普通 PDF輕量、易用,適用于大部分 PDF
iText復(fù)雜格式 PDF功能強(qiáng)大,適合更復(fù)雜的文本解析
Tesseract OCR掃描版 PDF需要 OCR 識(shí)別,適用于無(wú)文本層的 PDF

推薦選擇:

  • 普通文本 PDF:使用 PDFBoxiText
  • 復(fù)雜格式 PDF:推薦 iText。
  • 掃描版 PDF:使用 Tesseract OCR 進(jìn)行識(shí)別。

到此這篇關(guān)于使用Java提取PDF中的文字的三種常見(jiàn)方法的文章就介紹到這了,更多相關(guān)Java提取PDF文字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java報(bào)錯(cuò):FileNotFoundException的解決方案

    Java報(bào)錯(cuò):FileNotFoundException的解決方案

    在Java編程中,FileNotFoundException 是一種常見(jiàn)的受檢異常,通常發(fā)生在試圖打開(kāi)一個(gè)不存在的文件或文件路徑錯(cuò)誤時(shí),本文將詳細(xì)探討FileNotFoundException的成因、解決方案以及預(yù)防措施,幫助開(kāi)發(fā)者理解和避免此類(lèi)問(wèn)題,需要的朋友可以參考下
    2024-06-06
  • Java?lambda表達(dá)式與泛型整理總結(jié)

    Java?lambda表達(dá)式與泛型整理總結(jié)

    Lambda?表達(dá)式(lambda?expression)是一個(gè)匿名函數(shù),Lambda表達(dá)式基于數(shù)學(xué)中的λ演算得名。泛型編程,故如其名,是一個(gè)泛化的編程方式。其實(shí)現(xiàn)原理為程序員編寫(xiě)一個(gè)函數(shù)/類(lèi)的代碼示例,讓編譯器去填補(bǔ)出不同的函數(shù)實(shí)現(xiàn)
    2022-07-07
  • Spring Boot集成教程之異步調(diào)用Async

    Spring Boot集成教程之異步調(diào)用Async

    在項(xiàng)目中,當(dāng)訪(fǎng)問(wèn)其他人的接口較慢或者做耗時(shí)任務(wù)時(shí),不想程序一直卡在耗時(shí)任務(wù)上,想程序能夠并行執(zhí)行,我們可以使用多線(xiàn)程來(lái)并行的處理任務(wù),也可以使用spring提供的異步處理方式@Async。需要的朋友們下面來(lái)一起看看吧。
    2018-03-03
  • Java中設(shè)置JAVA_HOME無(wú)效的解決方法

    Java中設(shè)置JAVA_HOME無(wú)效的解決方法

    最近遇到一個(gè)問(wèn)題,就是配置JAVA_HOME無(wú)效,不管怎么改,運(yùn)行Java -version始終是最初的那個(gè)java版本,所以這篇文章主要給大家介紹了關(guān)于Java中設(shè)置JAVA_HOME無(wú)效的解決方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-09-09
  • Java設(shè)計(jì)模式編程中簡(jiǎn)單工廠(chǎng)與抽象工廠(chǎng)模式的使用實(shí)例

    Java設(shè)計(jì)模式編程中簡(jiǎn)單工廠(chǎng)與抽象工廠(chǎng)模式的使用實(shí)例

    這篇文章主要介紹了Java設(shè)計(jì)模式編程中簡(jiǎn)單工廠(chǎng)與抽象工廠(chǎng)模式的使用實(shí)例,簡(jiǎn)單工廠(chǎng)與抽象工廠(chǎng)都可以歸類(lèi)于設(shè)計(jì)模式中的創(chuàng)建型模式,需要的朋友可以參考下
    2016-04-04
  • MyBatis?核心組件Configuration實(shí)例詳解

    MyBatis?核心組件Configuration實(shí)例詳解

    Configuration用于描述 MyBatis 的主配置信息,其他組件需要獲取配置信息時(shí),直接通過(guò) Configuration 對(duì)象獲取,這篇文章主要介紹了MyBatis核心組件Configuration,需要的朋友可以參考下
    2023-08-08
  • 解決使用@RequestParam注解和泛型遇到的問(wèn)題

    解決使用@RequestParam注解和泛型遇到的問(wèn)題

    這篇文章主要介紹了解決使用@RequestParam注解和泛型遇到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Spring中初始化泛型類(lèi)的方法實(shí)例

    Spring中初始化泛型類(lèi)的方法實(shí)例

    這篇文章主要給大家介紹了Spring中如何初始化泛型類(lèi),文中給出詳細(xì)的介紹和方法實(shí)例,對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友可以參考學(xué)習(xí),下面來(lái)一起看看吧。
    2017-01-01
  • 通過(guò)FeignClient調(diào)用微服務(wù)提供的分頁(yè)對(duì)象IPage報(bào)錯(cuò)的解決

    通過(guò)FeignClient調(diào)用微服務(wù)提供的分頁(yè)對(duì)象IPage報(bào)錯(cuò)的解決

    這篇文章主要介紹了通過(guò)FeignClient調(diào)用微服務(wù)提供的分頁(yè)對(duì)象IPage報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 手?jǐn)]一個(gè) spring-boot-starter的全過(guò)程

    手?jǐn)]一個(gè) spring-boot-starter的全過(guò)程

    這篇文章主要介紹了手?jǐn)]一個(gè) spring-boot-starter的全過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01

最新評(píng)論