PDF處理控件Spire.PDF教程:在Java中讀取PDF,提取文本、圖片和表格

在數據驅動的現代開發中,高效處理 PDF 文檔已成為 Java 開發者不可或缺的核心能力。無論是處理各類發票掃描件、業務分析報告,還是包含豐富圖表的技術文檔,掌握 Java 版的 PDF 解析技術都將大幅提升數據處理效率,充分釋放文檔中的商業價值。

本指南將介紹如何使用Spire.PDF for Java?讀取 PDF 文檔?,涵蓋從可搜索的 PDF?提取文本?、表格和?圖片?,以及通過?OCR?技術從掃描版 PDF 中讀取文本。

Spire.PDF for Java試用下載

用于讀取 PDF 內容的 Java 庫

選擇適合的庫是成功讀取 PDF 的關鍵。Spire.PDF 以其穩定性和豐富功能脫穎而出,支持文本提取、圖片獲取、表格解析及 OCR 集成,其直觀 API 和完善的教程對新手和專家同樣友好。

開始前請從官網下載 Spire.PDF for Java?并添加至項目依賴。Maven 用戶請在 pom.xml 中添加:

<repositories><repository><id>com.e-iceblue</id><name>e-iceblue</name><url>https://repo.e-iceblue.cn/repository/maven-public/</url></repository>
</repositories>
<dependencies><dependency><groupId>e-iceblue</groupId><artifactId>spire.pdf</artifactId><version>11.6.2</version></dependency>
</dependencies>

下文將演示如何運用 Spire.PDF 完成各類 PDF 讀取任務。

Java 從可搜索 PDF 讀取文本

可搜索 PDF 以機器可讀的格式存儲文本,便于高效提取內容。Spire.PDF?中的?PdfTextExtractor?類可直接獲取可搜索PDF的頁面文本,而?PdfTextExtractOptions?能靈活設置提取參數,包括文本布局處理策略和指定提取區域。

以下示例展示如何使用 Java 提取 PDF 所有頁面的文本并輸出到TXT文件:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.texts.PdfTextExtractOptions;
import com.spire.pdf.texts.PdfTextExtractor;
import com.spire.pdf.texts.PdfTextStrategy;import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;public class ExtractTextFromSearchablePdf {public static void main(String[] args) throws IOException {// 創建一個 PdfDocument 對象PdfDocument doc = new PdfDocument();// 加載 PDF 文件doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf");// 遍歷所有頁面for (int i = 0; i < doc.getPages().getCount(); i++) {// 獲取當前頁面PdfPageBase page = doc.getPages().get(i);// 創建一個 PdfTextExtractor 對象PdfTextExtractor textExtractor = new PdfTextExtractor(page);// 創建一個 PdfTextExtractOptions 對象PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();// 指定提取策略extractOptions.setStrategy(PdfTextStrategy.None);// 從頁面中提取文本String text = textExtractor.extract(extractOptions);// 定義輸出文件路徑Path outputPath = Paths.get("output/Extracted_Page_" + (i + 1) + ".txt");// 寫入 txt 文件Files.write(outputPath, text.getBytes());}// 關閉文檔doc.close();}
}

效果圖:

Java 提取PDF文本到TXT文件中

Java 從 PDF 文檔讀取圖片

對于包含圖形的 PDF,PdfImageHelper?類能精準提取所有嵌入式圖片。通過?PdfImageInfo?對象可將圖片保存為標準圖像文件,特別適用于產品圖冊等視覺內容重要的文檔。

以下Java示例將 PDF 文檔中的所有圖片提取為 PNG 文件:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.utilities.PdfImageHelper;
import com.spire.pdf.utilities.PdfImageInfo;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;public class ExtractAllImages {public static void main(String[] args) throws IOException {// 創建一個 PdfDocument 對象PdfDocument doc = new PdfDocument();// 加載 PDF 文檔doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf");// 創建一個 PdfImageHelper 對象PdfImageHelper imageHelper = new PdfImageHelper();// 聲明一個整型變量int m = 0;// 遍歷頁面for (int i = 0; i < doc.getPages().getCount(); i++) {// 獲取特定頁面PdfPageBase page = doc.getPages().get(i);// 獲取頁面中的所有圖像信息PdfImageInfo[] imageInfos = imageHelper.getImagesInfo(page);// 遍歷圖像信息for (int j = 0; j < imageInfos.length; j++){// 獲取特定圖像信息PdfImageInfo imageInfo = imageInfos[j];// 獲取圖像BufferedImage image = imageInfo.getImage();File file = new File(String.format("output/Image-%d.png",m));m++;// 以 PNG 格式保存圖像文件ImageIO.write(image, "PNG", file);}}// 清理資源doc.dispose();}
}

效果圖:

Java 從PDF中提取圖片到文件夾

Java 從 PDF 文件讀取表格數據

Spire.PDF?提供的?PdfTableExtractor?類能智能識別表格邊界,生成的?PdfTable?對象保持原始結構,并支持使用?PdfTable.getText()?方法獲取具體單元格中的文本。該功能特別適用于從財務報表等結構化文檔提取數據。

以下 Java 代碼將 PDF 中的每一個表格導出為單獨的TXT文件:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.utilities.PdfTable;
import com.spire.pdf.utilities.PdfTableExtractor;import java.io.FileWriter;public class ExtractTableData {public static void main(String[] args) throws Exception {// 創建一個 PdfDocument 對象PdfDocument doc = new PdfDocument();// 加載 PDF 文檔doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf");// 創建一個 PdfTableExtractor 實例PdfTableExtractor extractor = new PdfTableExtractor(doc);// 初始化表計數器int tableCounter = 1;// 遍歷 PDF 中的頁面for (int pageIndex = 0; pageIndex < doc.getPages().getCount(); pageIndex++) {// 從當前頁面提取表格到 PdfTable 數組PdfTable[] tableLists = extractor.extractTable(pageIndex);// 如果找到任何表格if (tableLists != null && tableLists.length > 0) {// 遍歷數組中的表格for (PdfTable table : tableLists) {// 為當前表格創建一個 StringBuilderStringBuilder builder = new StringBuilder();// 遍歷當前表格中的行for (int i = 0; i < table.getRowCount(); i++) {// 遍歷當前表格中的列for (int j = 0; j < table.getColumnCount(); j++) {// 從當前表格單元格中提取數據并附加到 StringBuilderString text = table.getText(i, j);builder.append(text).append(" | ");}builder.append("\r\n");}// 為每個表格寫入一個單獨的 .txt 文檔FileWriter fw = new FileWriter("output/Table_" + tableCounter + ".txt");fw.write(builder.toString());fw.flush();fw.close();// 增加表計數器tableCounter++;}}}// 清理資源doc.dispose();}
}

效果圖:

Java 從PDF提取表格到TXT文件

通過 OCR 將掃描版 PDF 轉為文本

從掃描版的 PDF 提取文本需要依賴 OCR 引擎,如Spire.OCR for Java。本解決方案首先使用 Spire.PDF 的渲染引擎將頁面轉換為圖片,然后通過 Spire.OCR 的?OcrScanner?類從圖片識別文字。通過這兩步法,可以有效地將實體文檔掃描轉換為可編輯文本,且支持多種語言。

步驟 1. 安裝Spire.OCR 并配置環境

  • 下載 Spire.OCR for Java,并將 Jar 文件作為依賴添加到您的項目中。
  • 從以下鏈接中下載適合您操作系統的模型,并將壓縮包解壓到您磁盤上的某個位置。
    • Windows x64
    • Linux x64
    • macOS 10.15 及更高版本
  • 在您的代碼中配置模型。
OcrScanner scanner = new OcrScanner();
configureOptions.setModelPath("D:\\win-x64"); // 模型路徑

步驟 2. 將掃描的 PDF 轉換為文本

此代碼示例將掃描 PDF 的每一頁轉換為圖像文件,應用 OCR 提取文本,并將結果保存到文本文件中。

import com.spire.ocr.OcrException;
import com.spire.ocr.OcrScanner;
import com.spire.ocr.ConfigureOptions;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.graphics.PdfImageType;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;public class ExtractTextFromScannedPdf {public static void main(String[] args) throws IOException, OcrException {// 創建 OcrScanner 類的實例OcrScanner scanner = new OcrScanner();// 配置掃描器ConfigureOptions configureOptions = new ConfigureOptions();configureOptions.setModelPath("D:\\win-x64"); // 設置模型路徑configureOptions.setLanguage("Chinese"); // 設置語言// 應用配置選項scanner.ConfigureDependencies(configureOptions);// 加載 PDF 文檔PdfDocument doc = new PdfDocument();doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf");// 準備臨時目錄String tempDirPath = "temp";new File(tempDirPath).mkdirs(); // 創建臨時目錄StringBuilder allText = new StringBuilder();// 遍歷所有頁面for (int i = 0; i < doc.getPages().getCount(); i++) {// 將頁面轉換為圖像BufferedImage bufferedImage = doc.saveAsImage(i, PdfImageType.Bitmap);String imagePath = tempDirPath + File.separator + String.format("page_%d.png", i);ImageIO.write(bufferedImage, "PNG", new File(imagePath));// 執行 OCRscanner.scan(imagePath);String pageText = scanner.getText().toString();allText.append(String.format("\n--- PAGE %d ---\n%s\n", i + 1, pageText));// 清理臨時圖像new File(imagePath).delete();}// 將所有提取的文本保存到文件Path outputTxtPath = Paths.get("output", "extracted_text.txt");Files.write(outputTxtPath, allText.toString().getBytes());// 關閉文檔doc.close();System.out.println("文本已提取到 " + outputTxtPath);}
}

效果圖:

Java 使用OCR從掃描PDF提取文本到TXT文件

結語

在數字化轉型的浪潮中,PDF 文檔作為企業信息的重要載體,其高效處理能力已成為現代開發者的核心競爭力。通過本指南介紹的 Spire.PDF for Java 技術方案,開發者可以輕松應對各類?PDF 數據提取需求,從簡單的文本和圖片提取?到復雜的?表格數據解析?,再到?掃描文檔的智能識別?,幫助企業更好地管理和利用文檔信息。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87756.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87756.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87756.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

跨平臺游戲引擎 Axmol-2.7.0 發布

Axmol 2.7.0 版本是一個以錯誤修復和功能改進為主的次要LTS長期支持版本 &#x1f64f;感謝所有貢獻者及財務贊助者&#xff1a;scorewarrior、peterkharitonov、duong、thienphuoc、bingsoo、asnagni、paulocoutinhox 重大變更 Android Studio 最低版本要求升級至 2025.1.1…

XML 筆記

<image src"hue.gif" width"100" height"auto" align"left"/> <br/> 換行 在 XML 中&#xff0c;<![CDATA[ 和 ]]> 用于定義一個 CDATA 節&#xff08;Character Data Section&#xff09;。CDATA 節是用于將一段…

Python實現優雅的目錄結構打印工具

Python實現優雅的目錄結構打印工具 在軟件開發、系統管理和日常工作中&#xff0c;我們經常需要查看和分析目錄結構。 工具功能概述 這個DirectoryPrinter類提供了以下功能&#xff1a; 遞歸打印目錄結構可配置是否顯示隱藏文件可設置最大遞歸深度自定義縮進和文件/文件夾符…

【Python】文件打開:with open具體解析

示例 # 使用 with 語句打開文件并讀取內容 with open(pi.txt, r) as file_object:contents file_object.read()print(contents) # 文件在代碼塊結束后自動關閉with 解析 with 是 Python 中的上下文管理器語法&#xff0c;用于確保某個操作完成后自動執行清理操作。它常用于文…

Acrel-1000系列分布式光伏監控系統在湖北荊門一馬光彩大市場屋頂光伏發電項目中應用

摘 要&#xff1a;分布式光伏發電能夠對日益嚴重的環境壓力起到有效緩解作用,在當前對環境保護需求越來越大情況下,發電行業在發展中不但要提升發電效率,同時也需要降低成本。分布式光伏發電主要是利用風能和太陽能等可再生清潔能源進行發電,對于空氣質量具有改善效果,和傳統發…

CentOS-6與CentOS-7的網絡配置IP設置方式對比 筆記250706

CentOS-6與CentOS-7的網絡配置IP設置方式對比 筆記250706 1?? 參考 1 CentOS-6 與 CentOS-7 的網絡配置IP設置方式對比 CentOS 6 和 CentOS 7 在網絡配置上存在顯著差異&#xff0c;主要體現在配置文件結構、管理工具、服務機制和命令集等方面。以下是兩者的核心對比&#x…

【網絡系列】HTTP 429 狀態碼

博客目錄 HTTP 429 狀態碼的定義與背景產生 429 錯誤的常見場景1. API 速率限制觸發2. 網絡爬蟲行為被檢測3. 分布式拒絕服務(DDoS)防護4. 用戶/IP 特定限流策略5. 應用程序邏輯錯誤 深入解讀 429 響應的關鍵頭部信息Retry-After 頭部X-RateLimit 系列頭部RateLimit 標準化頭部…

C++無鎖數據結構:CAS(Compare-and-Swap)

在高并發場景下&#xff0c;傳統鎖機制帶來的線程阻塞和上下文切換開銷成為性能瓶頸。無鎖數據結構通過原子操作實現線程安全&#xff0c;避免了鎖的使用&#xff0c;成為高性能系統的關鍵技術。本文將深入探討C中基于CAS&#xff08;Compare-and-Swap&#xff09;的無鎖數據結…

【數字圖像處理】

數字圖像處理 緒論1. 數字圖像處理基本概念2. 數字圖像處理系統的組成3. 數字圖像處理技術研究的內容4. 數字圖像處理技術的應用領域5. 圖像處理技術涉及的學科領域 圖像處理基礎1. 電磁波譜與可見光譜2. 人眼的亮度視覺特性3. 圖像的表示4. 空間分辨率和灰度級分辨率5. 像素間…

linux chrome瀏覽器打不開了

報錯信息 通過terminal執行google-chrome [12714:12714:0706/223620.723519:ERROR:chrome/browser/process_singleton_posix.cc:358] The profile appears to be in use by another Google Chrome process (54949) on another computer (192.168.0.17). Chrome has locked t…

Python:模塊

一、Python模塊基礎概念 1. 什么是Python模塊&#xff1f; 在 Python 中&#xff0c;模塊&#xff08;Module&#xff09; 是一個包含 Python 代碼的文件&#xff08;擴展名為 .py&#xff09;&#xff0c;用于組織代碼、實現功能復用和命名空間管理。模塊可以包含變量、函數…

C 語言指針與作用域詳解

一、指針基礎概念 &#xff08;一&#xff09;指針的本質 指針是 C 語言中一個重要的概念&#xff0c;其本質是內存地址。在計算機內存中&#xff0c;每個字節都有唯一的編號&#xff0c;這個編號就是我們所說的內存地址&#xff0c;而指針變量就是用于存儲這些內存地址的變量…

解鎖阿里云ACK:開啟Kubernetes容器化應用新時代

引言&#xff1a;云原生時代下的 ACK 在當今數字化飛速發展的時代&#xff0c;云原生技術正以前所未有的速度改變著軟件開發和部署的格局。隨著企業對應用敏捷性、彈性擴展以及成本優化的需求日益增長&#xff0c;云原生已成為眾多企業實現數字化轉型的關鍵路徑。在云原生的技…

【C++基礎】內存管理四重奏:malloc/free vs new/delete - 面試高頻考點與真題解析

在 C/C 編程中&#xff0c;內存管理是核心基礎技能&#xff0c;而malloc/free和new/delete作為兩套內存分配釋放機制&#xff0c;是面試中高頻出現的考點。 一、內存管理的 "雙生花"&#xff1a;基礎概念解析 1.1 malloc/free&#xff1a;C 語言的內存管家 malloc全…

Dify+Ollama+QwQ:3步本地部署,開啟AI搜索新篇章

如何來評價本地化部署的價值與優勢分析&#xff1a; 成本優化與隱私保障 自定義搜索插件&#xff0c;告別信息過載 一鍵生成報告、分析&#xff0c;效率翻倍&#xff01; 接下來我們就嘗試跟隨來部署本地的價值所在! 1&#xff1a;安裝Ollama & 部署QwQ模型 1.1 安裝O…

FAISS 簡介及其與 GPT 的對接(RAG)

什么是 FAISS&#xff1f; FAISS (Facebook AI Similarity Search) 是 Facebook AI 團隊開發的一個高效的相似性搜索和密集向量聚類的庫。它主要用于&#xff1a; 大規模向量相似性搜索高維向量最近鄰檢索向量聚類 https://github.com/facebookresearch/faissFAISS 特別適合處理…

【Apache Doris 深度實戰:從 MPP 架構到實時分析,解鎖三大數據模型的性能優化秘籍】

一、安裝部署 安裝教程&#xff1a;GitHub地址 Doc文檔&#xff1a;Apache Doris 簡介 - Apache Doris 二、功能及作用 Apache Doris 是一款基于MPP 架構的高性能、實時分析型數據庫。它以高效、簡單和統一的特性著稱&#xff0c;能夠在亞秒級的時間內返回海量數據的查詢結果…

MySQL主從復制與讀寫分離概述

前言&#xff1a; 在數據驅動的現代應用中&#xff0c;數據庫面臨高并發讀寫與海量存儲的雙重挑戰。單一數據庫實例在性能、可用性及擴展性上逐漸成為瓶頸。MySQL主從復制&#xff08;Master-Slave Replication&#xff09;與讀寫分離&#xff08;Read/Write Splitting&#xf…

數據庫-元數據表

1. 什么是元數據表元數據&#xff1a;數據的數據&#xff0c;用以描述數據的信息也是數據&#xff0c;被稱為元數據2. 獲取元數據的方法MySQL提供了以下三種方法用于獲取數據庫對象的元數據&#xff1a;show語句從INFORMATION_SCHEMA數據庫里查詢相關表&#xff08;information…

【STM32】通用定時器PWM

STM32 通用定時器 PWM 輸出完全解析&#xff08;以 TIM3_CH1 為例&#xff09; PWM 輸出基本原理 PWM&#xff08;Pulse Width Modulation&#xff09;即脈沖寬度調制&#xff0c;是由定時器通過比較 CNT 與 CCR 寄存器實現的。 信號產生原理&#xff1a; ARR 決定周期&#…