使用Java提取PDF中的文字的三種常見方法
使用 Java 提取 PDF 中的文字
在日常開發(fā)中,我們經(jīng)常需要從 PDF 文件中提取文本,比如用于文檔分析、搜索功能、數(shù)據(jù)挖掘等。本篇文章將介紹三種常見的方法:
- 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 訓練數(shù)據(jù)路徑
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):執(zhí)行 OCR 識別文本。- 適用于無可選文本的掃描版 PDF。
4. 總結
| 方法 | 適用場景 | 主要特點 |
|---|---|---|
| Apache PDFBox | 普通 PDF | 輕量、易用,適用于大部分 PDF |
| iText | 復雜格式 PDF | 功能強大,適合更復雜的文本解析 |
| Tesseract OCR | 掃描版 PDF | 需要 OCR 識別,適用于無文本層的 PDF |
推薦選擇:
- 普通文本 PDF:使用 PDFBox 或 iText。
- 復雜格式 PDF:推薦 iText。
- 掃描版 PDF:使用 Tesseract OCR 進行識別。
到此這篇關于使用Java提取PDF中的文字的三種常見方法的文章就介紹到這了,更多相關Java提取PDF文字內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringCloud Gateway路由表配置實現(xiàn)小結
SpringCloudGateway通過路由表將請求轉發(fā)到不同的服務或地址,每個路由包含id、uri、predicates和filters等字段,下面就來介紹一下SpringCloud Gateway路由如何配置,感興趣的可以了解一下2026-01-01
SpringBoot啟動報錯Failed?to?configure?a?DataSource解決方案
SpringBoot應用啟動時出現(xiàn)Failed?to?configure?a?DataSource錯誤,通常是由于數(shù)據(jù)庫配置缺失或不當導致,解決方案分三種情況,下文將介紹對應方法,根據(jù)實際需求選擇對應方案即可解決問題,需要的朋友可以參考下2025-10-10
SpringCloud使用FFmpeg對視頻壓縮處理的代碼示例
在現(xiàn)代的視頻處理系統(tǒng)中,壓縮視頻以減小存儲空間、加快傳輸速度是一項非常重要的任務,FFmpeg作為一個強大的開源工具,廣泛應用于音視頻的處理,包括視頻的壓縮和格式轉換等,本文將通過Java代碼示例,向您展示如何使用FFmpeg進行視頻壓縮,并介紹相關參數(shù)的設置2024-11-11
Spring獲取Cookie和Session(@CookieValue()和@SessionAttribute())
本文主要介紹了Spring獲取Cookie和Session(@CookieValue()和@SessionAttribute()),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2026-01-01
深入剖析springBoot中的@Scheduled執(zhí)行原理
這篇文章主要介紹了springBoot中的@Scheduled執(zhí)行原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11

