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