使用 Java 解析的批次發票處理 – GroupDocs.Parser
在當今快速變化的商業環境中,批次發票處理對於減少人工工作量和消除資料輸入錯誤至關重要。使用 GroupDocs.Parser for Java,您可以自動從 PDF、DOCX 檔案或掃描圖像中提取發票號碼、日期、稅額和總額。本教程將指導您設定庫、建立可重用的範本,並將解決方案擴展至一次處理數千張發票。
快速答案
- 「提取發票資料」是什麼意思? 它指的是以程式方式從 PDF、DOCX 或圖像檔案中提取發票號碼、日期、稅額和總額等欄位。
- 我應該使用哪個函式庫? GroupDocs.Parser for Java 提供基於範本的提取,並支援完整的正則表達式。
- 我可以一次處理多個檔案嗎? 可以 — 結合解析器與批次處理模式,即可有效處理大量檔案。
- 我需要授權嗎? 免費試用或臨時授權可用於評估;正式使用則需購買授權。
- 它適用於 Java 8 以上嗎? 絕對適用 — 此函式庫支援 JDK 8 及更新版本。
什麼是「提取發票資料」?
提取發票資料是從數位文件中自動取得關鍵發票欄位(例如發票號碼、開立日期、稅額與應付總額)的過程。透過程式化定位這些數值,企業可消除手動資料輸入、降低錯誤,並加速後續的會計、報表與分析等處理。
為什麼要使用 GroupDocs.Parser for Java?
GroupDocs.Parser for Java 透過結合正則表達式匹配與連結欄位定位,提供高精度提取。它支援超過 30 種輸入與輸出格式,包括 PDF、DOCX 以及常見的圖像類型,且能在不將整個檔案載入記憶體的情況下處理數百頁的文件。這使其非常適合單一文件情境以及大規模批次發票處理管線。
先決條件
- JDK 8 或更高版本已安裝於開發機器上。
- 使用 IntelliJ IDEA 或 Eclipse 等 IDE。
- 取得 GroupDocs.Parser for Java 函式庫(可從 Maven 套件庫或以 JAR 形式下載)。
所需函式庫、版本與相依性
將儲存庫與相依性加入您的 pom.xml:
<repositories>
<repository>
<id>repository.groupdocs.com</id>
<name>GroupDocs Repository</name>
<url>https://releases.groupdocs.com/parser/java/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-parser</artifactId>
<version>25.5</version>
</dependency>
</dependencies>
您也可以下載最新的 JAR,網址為 GroupDocs.Parser for Java releases。
知識先備
具備 Java 程式設計與檔案 I/O 的基本概念,將使步驟更順暢。
設定 GroupDocs.Parser for Java
- 將 Maven 相依性(或 JAR)加入您的專案。
- 取得授權 — 您可以從臨時授權頁面開始使用免費試用或臨時授權。
- 初始化解析器 — 以下程式碼片段示範所需的匯入與簡易初始化。
import com.groupdocs.parser.Parser;
import com.groupdocs.parser.data.*;
import com.groupdocs.parser.templates.*;
如何在範本中建立連結欄位
直接回答: 連結欄位允許您捕獲相對於另一已知欄位固定偏移位置的資料(例如,緊跟在「Tax」字樣之後的稅額)。先以正則表達式模式定義標籤欄位(例如「Tax」),再建立一個連結欄位,提取位於該標籤右側數個字元處的值。此兩步驟方法確保即使文件版面變化,提取的值仍與其標籤對齊。
定義正則表達式欄位
首先,我們使用正則表達式模式定位標籤 Tax。
// Create a template field with a regex position
TemplateField regexField = new TemplateField(
new TemplateRegexPosition("Tax"),
"Tax");
設定連結欄位
接著,我們定義實際稅額的欄位,其位置相對於 Tax 標籤。
// Create a linked field based on the position of 'Tax'
TemplateField linkedField = new TemplateField(
new TemplateLinkedPosition(
"Tax",
new Size(100, 20),
new TemplateLinkedPositionEdges(false, false, true, false)),
"TaxValue");
組合範本
將正則表達式欄位與連結欄位合併為單一範本物件。
// Combine both fields into a comprehensive template
Template templateWithRegexAndLink = new Template(Arrays.asList(
new TemplateItem[]{regexField, linkedField}));
如何使用已定義的範本提取發票資料
直接回答: Parser 是用來讀取與解析文件的核心類別。使用 Parser parser = new Parser("invoice.pdf") 載入目標文件,透過 parser.parse(template) 套用先前建立的範本,然後遍歷 Field 集合以讀取每個提取的值。此過程會回傳一個結構化的映射,將欄位名稱對應到其提取的字串,供後續處理使用。
解析文件
開啟 PDF(或任何支援的格式)並套用範本。
try (Parser parser = new Parser("YOUR_DOCUMENT_DIRECTORY/InvoiceSample.pdf")) {
// Extract data according to the defined template
DocumentData data = parser.parseByTemplate(templateWithRegexAndLink);
遍歷提取的資料
Field 代表一筆提取的資料,包含其名稱與值。遍歷結果並印出每個欄位的名稱與值。
// Loop through all extracted data items
for (int i = 0; i < data.getCount(); i++) {
Object pageArea = data.get(i).getPageArea();
if (pageArea instanceof PageTextArea) {
PageTextArea area = (PageTextArea) pageArea;
System.out.println(data.get(i).getName() + ": " + area.getText());
} else {
System.out.println(data.get(i).getName() + ": Not a template field");
}
}
}
故障排除提示
TemplateLinkedPosition 定義了文件中連結欄位的相對位置與大小。
- 確認檔案路徑並確保文件可存取。
- 在嵌入之前,使用如 regex101.com 等工具測試您的正則表達式。
- 若連結欄位未正確捕獲,請調整
TemplateLinkedPosition中的Size與邊緣設定。
實務應用
真實案例
- 發票處理 — 自動提取發票號碼、日期、稅額與總額,以供會計系統使用。
- 合約管理 — 從法律協議中提取當事人、有效日期與關鍵條款。
- 客戶資料提取 — 從已填寫的訂單表單中提取訂單細節。
整合可能性
您可以將提取的資料匯入 ERP 或 CRM 平台,存入關聯式資料庫,或傳送至下游分析管線,以進行即時財務報告。
批次文件處理技巧
在處理批次發票處理時,請考慮:
- 重複使用單一
Parser實例處理多個檔案,以減少開銷。 - 在平行串流或 executor services 中執行解析任務,以利用多核心 CPU。
- 將提取結果持久化至 CSV 檔案或資料庫,以供下游使用。
ExecutorService是 Java 的併發工具,可管理執行緒池以非同步執行任務。
效能考量
- 簡化範本 — 欄位較少、正則表達式較簡單可加速解析。
- 管理記憶體 — 使用 try‑with‑resources 及時關閉
Parser物件。 - 批次處理 — 將文件分組,以平衡 CPU 與 I/O 使用,避免資源消耗峰值。
常見問題
Q: 什麼是 GroupDocs.Parser for Java?
A: GroupDocs.Parser for Java 是一個使用可自訂範本與正則表達式,從 PDF、Word 文件、圖像及其他格式提取結構化資料的函式庫。
Q: 如何使用 GroupDocs.Parser 設定 Maven 專案?
A: 將上述 Maven 區塊中顯示的儲存庫與 <dependency> 加入您的 pom.xml,然後執行 mvn clean install 以下載函式庫。
Q: 我可以在未購買授權的情況下使用 GroupDocs.Parser 嗎?
A: 可以,您可以先使用免費試用或取得臨時授權以進行評估。
Q: 範本中的連結欄位是什麼?
A: 連結欄位是其位置相對於另一欄位定義的範本元素,允許根據文件版面進行精確提取。
Q: 如何將解決方案擴展至處理數千張發票?
A: 實作批次處理、重複使用 parser 實例,並使用多執行緒(例如 Java ExecutorService)同時解析多個檔案,同時監控記憶體使用情況。
結論
透過本指南,您現在已了解如何使用 Java 解析提取發票資料,運用正則表達式,並建立連結欄位以適應任何發票版面。嘗試不同的範本,將輸出整合至您的財務系統,並探索進階功能,如自訂資料轉換器與掃描發票的 OCR 支援。
最後更新: 2026-09-22
測試版本: GroupDocs.Parser 25.5
作者: GroupDocs