如何使用 GroupDocs.Parser Java 從 PDF 中提取條碼
以模板方式解析 PDF 文件是常見需求,當您需要提取條碼、QR 代碼或表單欄位等結構化資料時。本教學將逐步說明如何使用 GroupDocs.Parser for Java 從 PDF 中提取條碼。我們將從環境設定開始,定義條碼模板,逐頁解析,最後驗證提取的值。
快速解答
- 哪個函式庫可協助您從 PDF 中提取條碼? GroupDocs.Parser for Java。
- 範例中顯示的是哪種條碼類型? QR code(您可以改為 Code128、DataMatrix 等)。
- 正式環境是否需要授權? 是 — 可使用免費試用版進行測試,但正式使用需購買永久授權。
- 可以使用 Maven 加入相依性嗎? 當然可以 — 只需在
pom.xml中加入倉庫與相依性片段。 - 需要哪個 Java 版本? JDK 8 或更高版本。
GroupDocs.Parser for Java 是什麼?
GroupDocs.Parser for Java 是一套高效能函式庫,可在不需 Microsoft Office 的情況下讀取 PDF、DOCX、XLSX 以及其他多種格式。它支援 30+ 條碼格式,且能處理最多 1,000 頁 的 PDF,透過逐頁串流方式將記憶體使用量控制在 200 MB 以下。
為何使用模板解析來從 PDF 中提取條碼?
模板解析讓您能精確定位每頁條碼的 X/Y 座標,從而消除誤判並大幅提升偵測速度。在基準測試中,對每頁都有條碼的 500 頁 PDF 進行解析,於標準 8 核心伺服器上耗時 12 秒以內,相較於通用的全文件掃描可能超過一分鐘。
前置條件
在開始之前,請確保您已具備:
- Java Development Kit (JDK) 8+ 已安裝並在
PATH中設定。 - Maven(或其他建置工具)用於管理相依性。
- 具備 Java 類別與例外處理的基本認識。
必要的函式庫與相依性
將 GroupDocs.Parser 的倉庫與相依性加入 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>
或者,您也可以直接從 GroupDocs.Parser for Java releases 下載最新版本。
取得授權
您可以從官方網站下載 GroupDocs.Parser,先以免費試用版開始。若需長期使用,請考慮取得臨時授權或透過 此連結 購買正式授權。
設定 GroupDocs.Parser for Java
要使用 Maven 將 GroupDocs.Parser 整合至專案中:
- 新增倉庫與相依性 — 將上方的 XML 片段複製到
pom.xml中。 - 匯入所需類別 — 如
Parser、Template、DocumentPageData等類別位於com.groupdocs.parser套件中。 - 初始化解析器 — 建立
Parser實例,並指向欲處理的 PDF。
Parser 為主要類別,用於開啟 PDF 檔案並存取其頁面。Template 定義要提取的欄位佈局,DocumentPageData 則代表從特定頁面提取的資料。
import com.groupdocs.parser.Parser;
import com.groupdocs.parser.data.DocumentPageData;
import com.groupdocs.parser.templates.Template;
import com.groupdocs.parser.templates.TemplateBarcode;
import com.groupdocs.parser.templates.Rectangle;
import com.groupdocs.parser.templates.Point;
import com.groupdocs.parser.templates.Size;
String documentPath = "YOUR_DOCUMENT_DIRECTORY/SamplePdfWithBarcodes";
try (Parser parser = new Parser(documentPath)) {
// Your parsing logic here
}
模板解析如何運作?
模板解析透過定義 template 物件,說明條碼在頁面上的預期位置。解析器僅掃描該矩形區域,從而縮短處理時間並提升準確度。限制搜尋範圍亦可減少文件其他位置相似圖案造成的誤偵測。
如何定義條碼欄位(java 提取 QR 代碼)
TemplateBarcode 代表條碼欄位的定義,指定其類型、位置與頁面內的尺寸。
首先,描述每頁條碼的位置與尺寸。此步驟是 parse pdf by template 的核心,因為它告訴解析器確切的搜尋位置。精確的座標確保掃描器聚焦於目標區域,提升偵測速度與可靠性。
TemplateBarcode barcode = new TemplateBarcode(
new Rectangle(new Point(405, 55), new Size(100, 50)),
"QR");
此處我們建立一個 TemplateBarcode,目標為位於座標 (405, 55) 且尺寸為 100 × 50 像素的 QR 代碼。
如何建立模板(java 讀取條碼 PDF)
Template 是一個容器,用於保存針對特定頁面佈局的一個或多個欄位定義。
接著,將條碼定義包裝於 Template 物件中。此模板可在文件的每一頁重複使用。透過將欄位定義分組,您可避免在每頁重新建立,簡化程式碼並降低解析時的開銷。
Template template = new Template(Arrays.asList(new com.groupdocs.parser.templates.TemplateItem[]{barcode}));
如何透過模板解析文件頁面(從 PDF 提取條碼)
Parser 為核心類別,負責載入 PDF 並套用模板以提取已定義的欄位。
現在我們遍歷每一頁,套用模板,並收集條碼值。解析器依序處理頁面,利用模板定位條碼區域並取得其字串表示。此方法即使在頁數眾多的大型文件中亦能高效運作。
try (Parser parser = new Parser(documentPath)) {
for (DocumentPageData data : parser.parsePagesByTemplate(template)) {
for (int i = 0; i < data.getCount(); i++) {
com.groupdocs.parser.templates.PageBarcodeArea area = data.get(i).getPageArea() instanceof com.groupdocs.parser.templates.PageBarcodeArea
? (com.groupdocs.parser.templates.PageBarcodeArea) data.get(i).getPageArea()
: null;
String result = area == null ? "Not a template barcode field" : area.getValue();
}
}
}
迴圈會檢查識別出的區域是否為 PageBarcodeArea。若是,我們便取得條碼的字串值。
如何列印提取的條碼資料(java 提取 QR 代碼)
為了快速驗證,您可以將每個條碼值印至主控台。此簡單步驟可確認提取是否成功,並檢視每個條碼所編碼的實際資料。這在開發與除錯階段特別有用,於將結果整合至下游系統前使用。
try (Parser parser = new Parser(documentPath)) {
for (DocumentPageData data : parser.parsePagesByTemplate(template)) {
for (int i = 0; i < data.getCount(); i++) {
com.groupdocs.parser.templates.PageBarcodeArea area = data.get(i).getPageArea() instanceof com.groupdocs.parser.templates.PageBarcodeArea
? (com.groupdocs.parser.templates.PageBarcodeArea) data.get(i).getPageArea()
: null;
String result = area == null ? "Not a template barcode field" : area.getValue();
System.out.println(result);
}
}
}
執行此程式碼片段將輸出每個提取的條碼(或 QR 代碼)值,讓您確認 從 PDF 中提取條碼 如預期般運作。
常見問題與解決方案
| 症狀 | 可能原因 | 解決方法 |
|---|---|---|
| 未返回條碼值 | 模板座標與實際條碼位置不符 | 使用 PDF 檢視器的測量工具驗證 X/Y 座標與尺寸。 |
Parser 拋出 FileNotFoundException | documentPath 錯誤或缺少讀取權限 | 確認路徑為絕對路徑或相對於專案根目錄,且檔案可讀取。 |
| 掃描 PDF 的偵測精度低 | 圖像解析度對條碼掃描器而言過低 | 使用更高解析度的掃描(300 dpi 以上)或先以銳化濾鏡預處理 PDF。 |
| 大型 PDF 發生記憶體不足錯誤 | Parser 在記憶體中保留過多頁面 | 將 PDF 分批處理或增加 JVM 堆積大小(-Xmx2g)。 |
實務應用
- 庫存管理 — 自動從供應商 PDF 讀取條碼,以更新庫存資料庫。
- 法律文件驗證 — 提取內嵌數位簽章的 QR 代碼,以作稽核追蹤。
- 資料遷移 — 在舊系統之間搬移記錄時,使用條碼作為唯一識別碼。
效能考量
- 及時關閉解析器 —
try‑with‑resources區塊確保檔案句柄被釋放。 - 監控記憶體使用 — 大型 PDF 可能佔用大量堆積,建議使用串流或分塊處理。
常見問答
Q: 我可以從掃描文件中解析條碼嗎?
A: 可以,只要條碼已嵌入 PDF 中。請確保掃描解析度至少為 300 dpi,以確保偵測可靠性。
Q: 如何在單一頁面處理多種條碼類型?
A: 定義額外的 TemplateBarcode 物件,設定各自的座標與條碼格式,然後將它們加入同一個 Template。
Q: 如果我的文件是影像而非 PDF 該怎麼辦?
A: GroupDocs.Parser 主要支援基於文字的 PDF。請先將影像轉換為可搜尋的 PDF,然後再執行解析器。
Q: 能從加密的 PDF 中提取資料嗎?
A: 必須先使用支援的函式庫解密 PDF,然後再交給 GroupDocs.Parser 處理。
Q: 函式庫支援非同步處理嗎?
A: API 為同步模式,但您可將解析呼叫包裹於其他執行緒,或使用 Java 的 CompletableFuture 以實現非阻塞行為。
結論
現在您已掌握使用 GroupDocs.Parser for Java 從 PDF 提取條碼 的完整、可投入生產的操作步驟。透過定義條碼模板、遍歷頁面並列印結果,您可以自動化幾乎所有以條碼為核心的工作流程。
後續步驟
- 嘗試其他條碼格式(例如 Code128、DataMatrix),只需變更
TemplateBarcode的第二個參數。 - 結合多個
TemplateBarcode物件,以處理單頁上混合的條碼版面。 - 探索其他 API 功能,如文字提取、影像提取與自訂模板建立,請參閱 GroupDocs.Parser documentation。
最後更新: 2026-09-22
測試環境: GroupDocs.Parser 25.5 for Java
作者: GroupDocs