使用Java提取PDF中的文字的三種常見方法
使用 Java 提取 PDF 中的文字
在日常開發(fā)中,我們經(jīng)常需要從 PDF 文件中提取文本,比如用于文檔分析、搜索功能、數(shù)據(jù)挖掘等。本篇文章將介紹三種常見的方法:
- Apache PDFBox(適用于大部分 PDF)
- iText(支持復(fù)雜格式 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èi)容:\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èi)容:\n" + extractedText);
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.3 說明
PdfReader(pdfPath):加載 PDF 文件。PdfTextExtractor.getTextFromPage(pdfDoc.getPage(i)):逐頁提取文本。- 適用于大部分 PDF,支持更復(fù)雜的文本解析。
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"); // 設(shè)置 Tesseract 訓(xùn)練數(shù)據(jù)路徑
tesseract.setLanguage("eng"); // 設(shè)置語言
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 說明
PDFRenderer.renderImage(i):將 PDF 頁轉(zhuǎn)換為圖片。tesseract.doOCR(image):執(zhí)行 OCR 識別文本。- 適用于無可選文本的掃描版 PDF。
4. 總結(jié)
| 方法 | 適用場景 | 主要特點 |
|---|---|---|
| Apache PDFBox | 普通 PDF | 輕量、易用,適用于大部分 PDF |
| iText | 復(fù)雜格式 PDF | 功能強大,適合更復(fù)雜的文本解析 |
| Tesseract OCR | 掃描版 PDF | 需要 OCR 識別,適用于無文本層的 PDF |
推薦選擇:
- 普通文本 PDF:使用 PDFBox 或 iText。
- 復(fù)雜格式 PDF:推薦 iText。
- 掃描版 PDF:使用 Tesseract OCR 進行識別。
到此這篇關(guān)于使用Java提取PDF中的文字的三種常見方法的文章就介紹到這了,更多相關(guān)Java提取PDF文字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java報錯:FileNotFoundException的解決方案
在Java編程中,FileNotFoundException 是一種常見的受檢異常,通常發(fā)生在試圖打開一個不存在的文件或文件路徑錯誤時,本文將詳細探討FileNotFoundException的成因、解決方案以及預(yù)防措施,幫助開發(fā)者理解和避免此類問題,需要的朋友可以參考下2024-06-06
Spring Boot集成教程之異步調(diào)用Async
在項目中,當訪問其他人的接口較慢或者做耗時任務(wù)時,不想程序一直卡在耗時任務(wù)上,想程序能夠并行執(zhí)行,我們可以使用多線程來并行的處理任務(wù),也可以使用spring提供的異步處理方式@Async。需要的朋友們下面來一起看看吧。2018-03-03
Java設(shè)計模式編程中簡單工廠與抽象工廠模式的使用實例
這篇文章主要介紹了Java設(shè)計模式編程中簡單工廠與抽象工廠模式的使用實例,簡單工廠與抽象工廠都可以歸類于設(shè)計模式中的創(chuàng)建型模式,需要的朋友可以參考下2016-04-04
通過FeignClient調(diào)用微服務(wù)提供的分頁對象IPage報錯的解決
這篇文章主要介紹了通過FeignClient調(diào)用微服務(wù)提供的分頁對象IPage報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03

