Java 提取 PDF 文件內容:告別手動復制粘貼,擁抱自動化解析!

在日常工作中,我們經常需要處理大量的 PDF 文檔,無論是提取報告中的關鍵數據,還是解析合同中的重要條款,手動復制粘貼不僅效率低下,還極易出錯。當面對海量的 PDF 文件時,這種傳統方式更是讓人望而卻步。那么,有沒有一種高效、精準的 Java 解決方案,能夠幫助我們自動化地從 PDF 中提取所需內容呢?答案是肯定的!本文將為您深入講解如何利用功能強大的 Spire.PDF for Java 庫,輕松實現 PDF 文本、表格乃至圖片的自動化提取,徹底告別繁瑣的手動操作。

Spire.PDF for Java 庫簡介與安裝

Spire.PDF for Java 是一個專業級的 Java PDF 組件,它允許開發者創建、讀取、編輯、轉換和打印 PDF 文檔,而無需安裝 Adobe Acrobat。該庫擁有豐富的功能集,包括文本提取、表格識別、圖片提取、內容替換、數字簽名等,其 API 設計直觀,易于上手,能夠顯著提升 PDF 處理的開發效率。

要將 Spire.PDF for Java 引入您的項目,您可以通過 Maven 配置依賴:

<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.8.3</version></dependency>
</dependencies>

或導航到 Spire.PDF 的官方網站下載安裝包,手動導入 .jar 文件。

Java 提取 PDF 中的文本

文本提取是 PDF 內容解析中最常見的需求。無論是從法律文檔中提取條款,還是從財務報表中抓取摘要,高效準確的文本提取至關重要。傳統方法可能僅能提取純文本,而忽略了布局和格式,導致信息丟失或難以理解。Spire.PDF for 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 中的表格

從 PDF 中提取表格數據是一個挑戰,因為 PDF 本身并沒有“表格”這一概念,表格通常是由線條和文本組合模擬出來的。然而,財務報告、數據分析文檔等大量關鍵信息都以表格形式呈現,因此高效準確地提取表格數據至關重要。Spire.PDF for Java 提供了強大的表格識別和提取能力。

以下代碼演示了如何從 PDF 中識別并提取表格數據:

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 中的圖片

PDF 文檔中除了文本和表格,還可能包含重要的圖片,如公司 Logo、圖表、流程圖或簽名圖片。提取這些圖片對于數據分析、文檔歸檔或內容重用都具有重要意義。Spire.PDF for Java 提供了簡單易用的 API 來遍歷 PDF 頁面并提取其中的圖片。

以下代碼演示了如何從 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();}
}

注意: 如果您的 PDF 是掃描文件,那么更加推薦您嘗試 Spire.OCR for Java,該庫可以精準識別多種語言的掃描 PDF 文件并且將識別到的內容做到多種格式輸出。

總結

本文詳細介紹了如何使用 Spire.PDF for Java 庫高效、準確地從 PDF 文件中提取文本、表格和圖片內容。通過其直觀的 API 和強大的功能,您可以輕松實現 PDF 內容的自動化解析,極大地提升工作效率,減少人工干預。無論是處理海量文檔還是應對復雜的數據提取需求,Spire.PDF for Java 都提供了一個現代且可行的解決方案。

希望這篇教程能幫助您更好地利用 Java 處理 PDF 文檔。現在,是時候將這些實用的技巧應用到您的項目中,告別繁瑣的手動操作,擁抱自動化帶來的便捷與高效了!

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

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

相關文章

關鍵字 const

Flutter 是一個使用 Dart 語言構建的 UI 工具包&#xff0c;因此它完全遵循 Dart 的語法和規則。Dart 中的 const 是語言層面的特性&#xff0c;而 Flutter 因其聲明式 UI 和頻繁重建的特性&#xff0c;將 const 的效能發揮到了極致。Dart 中的 const&#xff08;語言層面&…

Ubuntu22.04中使用cmake安裝abseil-cpp庫

Ubuntu22.04中使用cmake安裝abseil-cpp庫 關于Abseil庫 Abseil 由 Google 的基礎 C 和 Python 代碼庫組成&#xff0c;包括一些正支撐著如 gRPC、Protobuf 和 TensorFlow 等開源項目并一起 “成長” 的庫。目前已開源 C 部分&#xff0c;Python 部分將在后續開放。 Abseil …

FreeRTOS項目(序)目錄

這章是整個專欄的目錄&#xff0c;負責記錄這個小項目的開發日志和目錄。附帶總流程圖。 目錄 項目簡介 專欄目錄 開發日志 總流程圖 項目簡介 本項目基于STM32C8T6核心板和FreeRTOS&#xff0c;實現一些簡單的功能。以下為目前已實現的功能。 &#xff08;1&#xff09…

Python 多任務編程:進程、線程與協程全面解析

目錄 一、多任務基礎&#xff1a;并發與并行 1. 什么是多任務 2. 兩種表現形式 二、進程&#xff1a;操作系統資源分配的最小單位 1. 進程的概念 2. 多進程實現多任務 2.1 基礎示例&#xff1a;邊聽音樂邊敲代碼 2.2 帶參數的進程任務 2.3 進程編號與應用注意點 2.3.…

ADSL技術

<摘要> ADSL&#xff08;非對稱數字用戶線路&#xff09;是一種利用傳統電話線實現寬帶上網的技術。其核心原理是頻率分割&#xff1a;將一根電話線的頻帶劃分為語音、上行數據&#xff08;慢&#xff09;和下行數據&#xff08;快&#xff09;三個獨立頻道&#xff0c;從…

信號衰減中的分貝到底是怎么回事

問題&#xff1a;在一個低通濾波中&#xff0c;經常會看到一個值-3dB&#xff08;-3分貝&#xff09;&#xff0c;到底是個什么含義&#xff1f; 今天我就來粗淺的講解這個問題。 在低通濾波器中&#xff0c;我們說的 “截止頻率”&#xff08;或叫 - 3dB 點&#xff09;&…

工具分享--IP與域名提取工具2.0

基于原版的基礎上新增了一個功能點:IP-A段過濾&#xff0c;可以快速把內網192、170、10或者其它你想要過濾掉的IP-A段輕松去掉&#xff0c;提高你的干活效率&#xff01;&#xff01;&#xff01; 界面樣式預覽&#xff1a;<!DOCTYPE html> <html lang"zh-CN&quo…

如何通過日志先行原則保障數據持久化:Redis AOF 和 MySQL redo log 的對比

在分布式系統或數據庫管理系統中&#xff0c;日志先行原則&#xff08;Write-Ahead Logging&#xff0c;WAL&#xff09; 是確保數據一致性、持久性和恢復能力的重要機制。通過 WAL&#xff0c;系統能夠在發生故障時恢復數據&#xff0c;保證數據的可靠性。在這篇博客中&#x…

臨床研究三千問——臨床研究體系的3個維度(8)

在上周的文章中&#xff0c;我們共同探討了1345-10戰策的“臨床研究的起點——如何提出一個犀利的臨床與科學問題”。問題固然是靈魂&#xff0c;但若沒有堅實的骨架與血肉&#xff0c;靈魂便無所依歸。今天&#xff0c;我們將深入“1345-10戰策”中的“3”&#xff0c;即支撐起…

AI+預測3D新模型百十個定位預測+膽碼預測+去和尾2025年9月7日第172彈

從今天開始&#xff0c;咱們還是暫時基于舊的模型進行預測&#xff0c;好了&#xff0c;廢話不多說&#xff0c;按照老辦法&#xff0c;重點8-9碼定位&#xff0c;配合三膽下1或下2&#xff0c;殺1-2個和尾&#xff0c;再殺4-5個和值&#xff0c;可以做到100-300注左右。(1)定位…

萬字詳解網絡編程之socket

一&#xff0c;socket簡介1.什么是socketsocket通常也稱作"套接字"&#xff0c;?于描述IP地址和端?&#xff0c;是?個通信鏈的句柄&#xff0c;應用程序通常通過"套接字"向?絡發出請求或者應答?絡請求。?絡通信就是兩個進程間的通信&#xff0c;這兩…

維度躍遷:當萬物皆成電路,智能將從“擁有”變為“存在”

我們習以為常的電子世界&#xff0c;其本質是一個由電路構成的精密宇宙。而一場從二維到三維的終極變革&#xff0c;正在悄然醞釀&#xff0c;它將徹底顛覆我們創造和交互的方式。一、電子世界的本質&#xff1a;一切都是電路 在深入未來之前&#xff0c;我們首先要理解當下。電…

大語言模型預訓練數據采集與清洗技術實踐:從語料到知識庫的全流程優化

大語言模型(LLM)的性能上限由 “數據質量 數據規模 數據多樣性” 共同決定 —— 預訓練階段的海量語料決定模型的泛化能力與語言理解基礎,而知識庫數據則決定模型的知識準確性與領域專業性。當前 LLM 落地面臨的核心痛點之一,便是 “數據臟、處理難、知識雜”:預訓練語料…

模擬音頻采集設備的制作

模擬音頻程序與設備的制作 需要設備 esp32s3 pcm1808 pcm5102(非必須) 程序界面 程序代碼 代碼鏈接

Java Modbus通信實戰(四):Modbus通信測試與故障排查

在工業現場&#xff0c;設備通信系統就像工廠的神經網絡&#xff0c;連接著各種傳感器、控制器和執行器。當你搭建好這套系統后&#xff0c;最關鍵的一步就是全面測試&#xff0c;確保每個環節都能正常工作。 就像汽車出廠前要經過嚴格的路試一樣&#xff0c;Modbus RTU通信系統…

少兒編程C++快速教程之——1. 基礎語法和輸入輸出

1. 歡迎來到C編程世界&#xff01; 1.1 什么是編程&#xff1f; 編程就像是給計算機寫一份詳細的"說明書"&#xff0c;告訴它該做什么、怎么做。C是一種強大的編程語言&#xff0c;可以用來創建游戲、應用程序和各種有趣的軟件&#xff01; 1.2 第一個C程序&#xff…

arma::imat22

arma::imat22 是 Armadillo C 線性代數庫中定義的一個固定大小的 2x2 有符號整數矩陣類型。它主要用于處理小型、維度在編譯時已知的整數矩陣&#xff0c;因其在棧上分配內存&#xff0c;故通常比動態矩陣有更高的效率。 下面是一個匯總了 arma::imat22 主要特性的表格&#xf…

狗都能看懂的HunYuan3D 1.0詳解

HunYuan3D 1.0 HunYuan3D 1.0是2024年9月發布的一篇論文。雖然站在現在的時間節點&#xff0c;HunYuan3D系列已經出到2.5了&#xff0c;但是1.0版本的改進思路&#xff0c;和它trick集成的做法&#xff0c;還是很值得學習的。由于文章用到了很多技術&#xff0c;由于篇幅有限&a…

踏腳邁入奇幻樂園

每天早上上班的路上都會經過一個小花園。它被夾在丁字路口的拐角&#xff0c;面積不大&#xff0c;匆匆而過的行人都不會注意到它。但如果順著幾個不起眼的入口走進去&#xff0c;里面卻是別有洞天。清早的街道還沒有車水馬龍的喧嘩&#xff0c;花園里靜悄悄的。各式各樣的花草…

內存越界引發線程函數調用堆棧回溯異常以及INT 3軟中斷實戰分析案例分享

目錄 1、問題說明 2、導出dump文件時只是遇到了INT 3軟中斷&#xff0c;并沒有發生異常崩潰 3、函數中發生了棧內存越界&#xff0c;導致線程的棧回溯出異常&#xff0c;堆棧中只顯示一行函數調用記錄 3.1、處理Json數據時產生了異常 3.2、函數中發生棧內存越界&#xff0…