在日常工作中,我們經常需要處理大量的 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 文檔。現在,是時候將這些實用的技巧應用到您的項目中,告別繁瑣的手動操作,擁抱自動化帶來的便捷與高效了!