如何在 Java 中向 PDF 添加條碼
介紹
是否曾需要自動追蹤發票、驗證合約真偽,或在大規模下管理庫存文件?學會以程式方式向 PDF 添加條碼即可解決這些問題——如果你使用 Java,則有一個穩定、經過實戰驗證的選擇。
手動添加條碼無法擴展。無論你處理十張發票或一萬張,都需要一個可靠的方式向 PDF 添加條碼。這時,一個好的 Java PDF 條碼函式庫就派上用場了。
在本指南中,我會示範如何使用 GroupDocs.Signature 這個函式庫,將條碼加入 PDF Java 檔案。它負責繁重的工作,同時讓你能精細控制條碼的位置、大小與類型。閱讀完本篇,你將會知道如何以 Java 程式碼在 PDF 上簽署條碼、處理邊緣情況,並避免開發者常碰到的陷阱。
你將學到:
- 為何 PDF 中的條碼對工作流程至關重要
- 正確設定 GroupDocs.Signature for Java 的方式
- 精準建立與定位條碼簽章
- 錯誤處理與效能最佳化
- 各行各業的實務應用
快速回答
- 應該使用哪個函式庫? GroupDocs.Signature for Java
- 如何建立條碼簽章 PDF? 使用
BarcodeSignOptions搭配Signature.sign() - 哪種條碼類型最常用? Code128
- 可以在同一份 PDF 加入多個條碼嗎? 可以,呼叫多次
sign()或傳入列表 - 生產環境需要授權嗎? 需要,有效的 GroupDocs 授權會移除浮水印
為何要在 PDF 中加入條碼?
在進入程式碼之前,先說明為什麼這很重要。PDF 中的條碼不只是讓文件看起來更專業,它們解決了真實的商業問題:
文件驗證 – 條碼可以編碼唯一識別碼,使偽造幾乎不可能。掃描條碼時,系統即可即時驗證文件是否合法。
工作流程自動化 – 省去手動輸入文件編號或追蹤號碼的步驟,員工(或客戶)只要掃描條碼即可。相較於手動輸入,錯誤率降低約 95 %。
與既有系統整合 – 大多數 ERP、庫存與文件管理系統已支援「條碼」語言。將條碼加入 PDF 後,可無縫整合,無需自行開發 API。
合規需求 – 許多產業(醫療、物流、法律)要求文件可追溯。條碼提供符合規範的稽核軌跡。
程式化加入條碼的關鍵優勢是一致性與規模化。一次定義規則,所有文件皆得到相同處理——不論是處理五個檔案或五萬個。
前置條件
在開始編寫程式碼前,請先確保以下基礎已就緒:
必備軟體與函式庫
- 已在機器上安裝 JDK 8 或以上(建議使用 JDK 11+ 以獲得更佳效能)
- 使用 IntelliJ IDEA、Eclipse 或具 Java 擴充功能的 VS Code 作為 IDE
- GroupDocs.Signature for Java 版本 23.12(稍後會示範如何加入)
基本知識需求
- 熟悉 Java 基礎(類別、物件、檔案操作)
- 了解 PDF 文件結構(有助但非必須)
- 熟悉相依管理工具(Maven 或 Gradle)
專業小技巧:若你是 GroupDocs 新手,先取得免費試用版。它提供 30 天的試驗期,無需立即購買授權,適合概念驗證(Proof‑of‑Concept)使用。
設定 GroupDocs.Signature for Java
將 GroupDocs.Signature 加入專案相當簡單。請依照你的建置系統選擇相應方式:
Maven 設定
在 pom.xml 中加入以下內容:
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Gradle 設定
Gradle 使用者請在 build.gradle 中加入此行:
implementation 'com.groupdocs:groupdocs-signature:23.12'
直接下載方式
不想使用建置工具?可從 GroupDocs.Signature for Java releases page 直接下載 JAR,手動加入專案的 classpath。
授權設定
以下是大多數開發者採用的實務授權流程:
- 先使用免費試用 – 無需信用卡,無任何承諾,適合測試。
- 取得臨時授權 – 若 30 天不足以完成開發,可申請延長的臨時授權。
- 購買正式授權 – 準備上線時,依使用量購買相應授權。
重要提醒:免費試用會在輸出文件上加浮水印。若是面向客戶的工作,至少需要臨時授權。
初始設定程式碼
相依加入完成後,請這樣初始化 Signature 物件:
import com.groupdocs.signature.Signature;
// Initialize Signature object with your document path
Signature signature = new Signature("YOUR_DOCUMENT_DIRECTORY/sample.pdf");
發生了什麼:Signature 類別是主要入口點。你傳入檔案路徑,它會將 PDF 載入記憶體以供後續處理。很簡單,對吧?
常見錯誤:別忘了在使用完畢後關閉 Signature 物件(或使用 try‑with‑resources)。未關閉會在長時間執行的應用程式中造成記憶體泄漏。
選擇合適的條碼類型
並非所有條碼都一樣。選擇哪種條碼取決於你要編碼的內容以及掃描環境。
支援的常見條碼類型
- Code128 – 適合字母與數字混合資料;常見於運送標籤。
- QR Code – 需要儲存較多資料(URL、JSON,最多 4 000 個字元)時的最佳選擇。
- Code39 – 比 Code128 簡單但空間利用率較低,適合內部追蹤。
- EAN/UPC – 零售商品的行業標準。
何時使用哪種?
- 需要編碼超過 50 個字元? → QR Code
- 標準商品識別? → EAN/UPC
- 一般文件追蹤? → Code128
- 需要與舊式掃描器最高相容性? → Code39
專業小技巧:Code128 是文件管理的最安全預設選擇,兼具可讀性、容量與掃描相容性。
實作指南:建立條碼簽章
接下來就是重頭戲——實際在 PDF 中建立並加入條碼。我會把流程拆成易於掌握的步驟,讓你可以依序跟著做(或直接跳到需要的部分)。
步驟 1:設定文件路徑
首先告訴 Java PDF 的來源位置與簽署後的儲存位置:
String filePath = "YOUR_DOCUMENT_DIRECTORY/sample.pdf";
String fileName = new File(filePath).getName();
說明:此段程式碼定義了輸入檔案路徑,並抽取檔名以便產生有組織的輸出(特別適合批次處理多個檔案時使用)。
實務建議:在正式環境中,這些路徑通常來自設定檔或環境變數,而非硬編碼字串。可考慮使用 System.getenv() 或 properties 檔提升彈性。
步驟 2:設定輸出與條碼選項
接著定義簽署後檔案的儲存位置以及條碼內容:
// Define output file path
String outputFilePath = "YOUR_OUTPUT_DIRECTORY/SignWithMillimeters/" + fileName;
BarcodeSignOptions options = new BarcodeSignOptions("12345678");
options.setEncodeType(BarcodeTypes.Code128);
拆解說明:
outputFilePath– 完成後 PDF 的儲存路徑。子資料夾結構有助於區分不同簽署方式。BarcodeSignOptions("12345678")– 條碼所編碼的資料,可是發票號、追蹤 ID、文件雜湊值等。setEncodeType(BarcodeTypes.Code128)– 指定使用的條碼格式。
常見問題:「條碼資料可以包含特殊字元嗎?」在 Code128 中可以,支援字母、數字與大多數標點符號。QR Code 更加彈性。
步驟 3:精準定位條碼
這一步讓條碼位置可以精確到毫米:
// Set position and size in millimeters
options.setLocationMeasureType(MeasureType.Millimeters);
options.setLeft(40); // X‑coordinate from left edge
options.setTop(50); // Y‑coordinate from top edge
options.setSizeMeasureType(MeasureType.Millimeters);
options.setWidth(20); // Width of the barcode
options.setHeight(10); // Height of the barcode
為何使用毫米:列印文件時,毫米能確保不同紙張與解析度下的尺寸一致。(如果你的使用情境較適合像素或百分比,也可以自行調整。)
定位策略:
- 右上角(如運送標籤):
setLeft(150),setTop(10) - 底部中間(如票券):依頁寬計算中心位置
- 緊鄰既有內容:先量測 PDF 版面,再依需求定位
專業小技巧:先在少量樣本 PDF 上測試定位,因不同版面可能需要微調。
步驟 4:加入邊距提升可讀性
邊距可防止條碼與其他內容過於擁擠:
// Define margin settings
Padding padding = new Padding();
padding.setLeft(5); // Left margin in mm
padding.setTop(5); // Top margin in mm
padding.setRight(5); // Right margin in mm
padding.setBottom(5); // Bottom margin in mm
options.setMargin(padding);
功能說明:在條碼四周建立 5 mm 的緩衝區,提升掃描成功率並讓外觀更專業。
何時加大邊距:若條碼靠近頁面邊緣,建議提升至 10 mm。印表機常對過於靠邊的內容產生問題。
步驟 5:簽署並儲存文件
最後一步——真正把條碼寫入 PDF:
// Sign and save the document
SignResult signResult = signature.sign(outputFilePath, options);
底層運作:GroupDocs 會開啟 PDF、根據設定渲染條碼、將其嵌入指定位置,最後保存為新檔。原始 PDF 保持不變。
回傳值:SignResult 物件包含成功/失敗狀態與簽署的相關資訊,可用來驗證執行結果。
步驟 6:優雅處理錯誤
程式執行過程中可能會遇到路徑錯誤、PDF 損毀、權限不足等問題,請妥善捕捉例外:
try {
Signature signature = new Signature(filePath);
SignResult signResult = signature.sign(outputFilePath, options);
System.out.println("Barcode added successfully!");
System.out.println("Output saved to: " + outputFilePath);
} catch (Exception e) {
System.err.println("Error signing document: " + e.getMessage());
throw new GroupDocsSignatureException(e.getMessage());
}
例外處理最佳實踐:
- 記錄完整堆疊資訊以便除錯(僅記錄訊息不夠)
- 提供使用者友善的錯誤訊息,避免技術術語
- 即使發生錯誤也要釋放資源(使用 try‑with‑resources)
- 對暫時性失敗(網路、檔案被鎖)可加入重試機制
常見錯誤類型:
FileNotFoundException– 輸入 PDF 路徑錯誤GroupDocsSignatureException– 條碼資料不支援或 PDF 版本不支援OutOfMemoryError– 同時處理過多大型 PDF
如何在 Java 中建立條碼簽章 PDF
如果你想要一個簡潔的步驟清單,請參考以下流程:
- 加入 GroupDocs.Signature 相依(Maven、Gradle 或手動 JAR)。
- 以來源 PDF 路徑初始化
Signature。 - 設定
BarcodeSignOptions─ 設定資料、類型、尺寸與位置。 - 視需要設定邊距 以提升可讀性。
- 呼叫
signature.sign(outputPath, options)將條碼嵌入。 - 處理例外並關閉資源。
遵循以上六個步驟,即可在任何 Java 應用程式中可靠地向 PDF 加入條碼。
常見問題與解決方案
以下整理開發者在實作時最常碰到的問題(因為文件往往寫得不夠完整):
問題 1:條碼無法順利掃描
症狀:掃描器讀不出條碼或回傳錯誤資料。
解決方式:
- 放大條碼尺寸(大多數掃描器最低寬度 15 mm)。
- 確認條碼資料不含該類型不支援的字元。
- 保持條碼與背景之間有足夠對比度。
- 使用多款掃描應用測試,有些較為穩定。
問題 2:條碼位置在不同文件間不一致
症狀:相同的定位程式碼在不同頁面尺寸的 PDF 上呈現不同結果。
解決方式:
- 針對不同頁面尺寸使用計算式,而非硬編碼值。
- 檢查來源 PDF 是否有旋轉設定,這會影響座標。
- 採用百分比定位以提升一致性。
- 如有可能,先將所有輸入 PDF 正規化為統一頁面尺寸。
問題 3:大量批次處理時效能下降
症狀:前 100 份 PDF 處理快速,之後速度變慢。
解決方式:
- 及時關閉
Signature物件(或使用 try‑with‑resources)。 - 將批次拆成較小的子批次,批次間釋放記憶體。
- 考慮使用平行處理提升 CPU 利用率。
- 監控 JVM 堆積使用情況,必要時調整 JVM 參數。
// Good: Process in chunks
List<String> allFiles = getAllPdfFiles();
int batchSize = 100;
for (int i = 0; i < allFiles.size(); i += batchSize) {
List<String> batch = allFiles.subList(i, Math.min(i + batchSize, allFiles.size()));
processBatch(batch);
System.gc(); // Suggest garbage collection between batches
}
問題 4:輸出檔案大小膨脹
症狀:簽署後的 PDF 比原始檔案大很多。
解決方式:
- GroupDocs 本身不會自動壓縮,若需要可自行執行壓縮。
- 若向量條碼即可滿足需求,避免使用高解析度的條碼影像。
- 檢查是否不小心嵌入了字型或額外的 metadata。
何時聯繫支援:若嘗試上述方法仍無法解決,可前往 GroupDocs forum 尋求協助,支援人員回應速度相當不錯。
真實案例
以下說明各行業如何實際運用此功能:
法律產業:合約管理
律師事務所於合約上加條碼,將實體文件與案件管理系統連結。掃描條碼即可即時開啟完整案件歷史,將處理時間從數分鐘縮短至數秒。
實作建議:在條碼中編碼文件雜湊,以便驗證實體文件未被竄改。
醫療產業:病歷記錄
醫院於出院摘要與處方 PDF 上貼條碼。患者掛號時,工作人員掃描條碼即可自動載入過往就診紀錄。
合規說明:確保條碼實作符合 HIPAA 對資料編碼的要求。
物流產業:運送標籤
電商平台自動在裝箱單上加入追蹤條碼。倉儲人員掃描後即可更新出貨狀態,免除手動輸入。
效能考量:此類系統常每小時處理上千份文件,必須使用批次與平行處理。
金融產業:發票處理
會計部門於發票加入條碼,編碼付款條件與供應商 ID。掃描後自動導入正確的審批流程。
小技巧:結合條碼與 OCR,可同時取得元資料與明細項目,達到最大自動化。
效能最佳實踐
在大規模處理文件時,以下優化措施能顯著提升效能:
記憶體管理
- 使用 try‑with‑resources:確保
Signature物件正確關閉。 - 分批處理:避免一次載入 10 000 份 PDF。
- 監控堆積使用:設定適當的 JVM 參數(
-Xmx、-Xms)。
批次處理策略
List<String> files = getAllPdfFiles();
files.parallelStream().forEach(file -> {
try {
addBarcodeToFile(file);
} catch (Exception e) {
// Handle per‑file errors
}
});
注意:平行處理會佔用更多記憶體,需持續監控與調校。
快取 Signature 物件
若頻繁處理相似文件,可考慮重複使用相同的設定:
// Create options once
BarcodeSignOptions templateOptions = createStandardOptions();
// Reuse for multiple files
for (String file : files) {
BarcodeSignOptions options = templateOptions.clone();
// Customize per file if needed
processFile(file, options);
}
常見問答
Q: 如何在 Java 中為不同條碼類型建立條碼簽章 PDF?
A: 只要變更 setEncodeType() 參數即可。QR Code 使用 BarcodeTypes.QR,EAN‑13 使用 BarcodeTypes.EAN13。GroupDocs 內建支援超過 60 種條碼類型。
Q: 可以在同一份 PDF 加入多個條碼嗎?
A: 完全可以。對不同 BarcodeSignOptions 呼叫多次 signature.sign(),或一次傳入多個簽章選項的列表。
Q: 如何在不遺失原有內容的情況下加入條碼?
A: GroupDocs 預設為非破壞性操作,會在新圖層加入條碼,原始文字、影像與排版皆保持不變。
Q: 條碼能編碼的最大資料量是多少?
A: 依類型而定。Code128 大約可容納 128 個字元,QR Code 最多可存 4 000 個字元。若需更大容量,可考慮編碼指向資料的 URL。
Q: 生產環境需要授權嗎?
A: 需要。免費試用會在文件上加浮水印。正式部署時,請取得臨時或正式授權。詳情請見 GroupDocs pricing page。
Q: 批次處理時如何處理例外?
A: 為每個檔案的操作獨立包裹 try‑catch,確保單一失敗不會中斷整個批次。記錄檔名與錯誤資訊,以便事後重新處理。
Q: GroupDocs 能產生 Data Matrix 這類 2D 條碼嗎?
A: 能!使用 BarcodeTypes.DataMatrix。Data Matrix 在製造業很受歡迎,因為即使部分受損或角度不正仍能辨識。
Q: 支援哪些 PDF 版本?
A: GroupDocs.Signature 支援 PDF 1.3 至 2.0(涵蓋 99 % 市面上常見的 PDF)。若遇到非常舊的 PDF,建議先轉換為較新版本。
結論
現在你已掌握如何使用 GroupDocs.Signature 以程式方式在 Java 中向 PDF 加入條碼。本文從基礎設定、錯誤處理到效能優化,完整說明了整個流程。
重點回顧
- 條碼解決自動化、驗證與可追溯等實務需求
- GroupDocs 提供精確的定位與多樣的條碼類型
- 正確的例外處理與資源管理可避免上線後的頭痛問題
- 大規模處理時的效能調校相當重要
下一步:先使用免費試用版完成小規模概念驗證,測試不同條碼類型與實際文件。驗證成功後,可進行批次處理,最後部署至正式環境。
有任何問題或卡關嗎?請到 GroupDocs support forum 發問,社群熱心且回應速度快。
參考資源
文件與下載
授權與支援
最後更新日期: 2026-03-22
測試環境: GroupDocs.Signature 23.12 for Java
作者: GroupDocs