如何在 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。

授權設定

以下是大多數開發者採用的實務授權流程:

  1. 先使用免費試用 – 無需信用卡,無任何承諾,適合測試。
  2. 取得臨時授權 – 若 30 天不足以完成開發,可申請延長的臨時授權。
  3. 購買正式授權 – 準備上線時,依使用量購買相應授權。

重要提醒:免費試用會在輸出文件上加浮水印。若是面向客戶的工作,至少需要臨時授權。

初始設定程式碼

相依加入完成後,請這樣初始化 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

如果你想要一個簡潔的步驟清單,請參考以下流程:

  1. 加入 GroupDocs.Signature 相依(Maven、Gradle 或手動 JAR)。
  2. 以來源 PDF 路徑初始化 Signature
  3. 設定 BarcodeSignOptions ─ 設定資料、類型、尺寸與位置。
  4. 視需要設定邊距 以提升可讀性。
  5. 呼叫 signature.sign(outputPath, options) 將條碼嵌入。
  6. 處理例外並關閉資源

遵循以上六個步驟,即可在任何 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