如何使用 Java 在 PDF 中建立條碼簽章

在本教學中,您將學習如何使用 Java 及 GroupDocs.Signature 建立條碼簽章於 PDF 檔案。條碼簽章嵌入機器可讀的識別碼,具防篡改且易於掃描的特性——非常適合合約、證書、發票以及任何需要可靠驗證的文件。

快速解答

  • 什麼是條碼簽章? 一個嵌入 PDF 中的條碼,可儲存結構化資料,並可由掃描器或軟件讀取。
  • 建議使用哪種條碼類型? Code128,因為它能緊湊地處理字母與數字資料。
  • 我需要授權嗎? 免費試用可用於測試;正式環境需購買完整授權。
  • 我可以在任何頁面尺寸上放置條碼嗎? 是的——使用百分比定位即可自動縮放。
  • 條碼是向量圖嗎? 是的,它只會在 PDF 中增加幾 KB,且在任何解析度下都保持清晰。

為什麼條碼簽章對您的 PDF 很重要

您可能已經遇到過這樣的挑戰:需要在 PDF 中加入既能機器讀取又具防篡改性的唯一識別碼。也許您正在開發文件管理系統、處理證書,或是處理需要日後驗證的合約。

這正是條碼簽章發揮作用的地方。與簡單的文字印章不同,條碼讓您嵌入可即時被掃描器(以及您的軟件)讀取的結構化資料。而且,結合 GroupDocs.Signature for Java 的 PDF 簽署功能,您即可在不需複雜資料庫查詢的情況下,實現文件的追蹤與驗證。

在本指南中,您將完整學會在 Java PDF 中實作條碼簽章——從基礎設定到具彈性定位的正式環境程式碼。無論您是構建發票系統、證書產生器,或是合約管理平台,最後都能掌握所需的一切。

您將掌握的內容:

  • 在數分鐘內設定 GroupDocs.Signature for Java
  • 建立 Code128 條碼簽章(以及為何它通常是最佳選擇)
  • 使用百分比佈局定位條碼,適用於任何 PDF 大小
  • 避免開發者常見的陷阱
  • 正確測試您的實作

開始前您需要的條件

請確保您已備妥以下必備項目:

必備函式庫:

  • GroupDocs.Signature for Java(建議使用 23.12 或更新版本)

開發環境:

  • 已安裝 JDK 8 或以上
  • 您偏好的 IDE(IntelliJ IDEA、Eclipse,或搭配 Java 擴充功能的 VS Code)
  • 使用 Maven 或 Gradle 進行相依管理

您的技能等級: 您應該對基本的 Java 語法及檔案操作相當熟悉。如果您能建立簡單的 Java 類別並處理例外,即可開始。

在專案中設定 GroupDocs.Signature

將函式庫加入專案相當簡單。請選擇您的建置工具:

對於 Maven 使用者,在 pom.xml 中加入以下內容:

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-signature</artifactId>
    <version>23.12</version>
</dependency>

使用 Gradle 嗎?build.gradle 中加入以下行:

implementation 'com.groupdocs:groupdocs-signature:23.12'

偏好手動設定?GroupDocs.Signature for Java releases 直接下載 JAR,並將其加入 classpath。

取得授權設定

在正式上線前,您需要先處理授權事宜:

  • Free Trial: 完美的測試方案——可從 GroupDocs 官方網站取得,以探索核心功能
  • Temporary License: 需要更多時間評估?申請 30 天的臨時授權
  • Full License: 已準備好投入生產?購買授權以獲得無限制使用

這裡提供一個快速的檢查,以確保一切正常運作:

import com.groupdocs.signature.Signature;

public class QuickTest {
    public static void main(String[] args) {
        try {
            Signature signature = new Signature("test-document.pdf");
            System.out.println("GroupDocs.Signature is ready to go!");
        } catch (Exception e) {
            System.err.println("Setup issue: " + e.getMessage());
        }
    }
}

若執行無錯誤,即表示已完成設定!

如何在 Java 中建立條碼簽章

現在進入有趣的部分——讓我們用條碼為 PDF 簽章。以下將步驟拆解為小段落,讓您清楚了解每個階段的運作。

步驟 1:初始化 Signature 物件

首先,您需要告訴 GroupDocs 您要處理的 PDF 檔案:

String filePath = "YOUR_DOCUMENT_DIRECTORY/sample.pdf";
Signature signature = new Signature(filePath);

此程式碼的作用: Signature 物件會將您的 PDF 載入記憶體,並為後續修改做準備。請確保檔案路徑正確——常見的錯誤是 Windows 上使用單斜線而未進行跳脫(請使用 \\ 或直接使用正斜線,跨平台皆可)。

步驟 2:設定條碼選項(如何加入條碼)

現在讓我們使用您的資料建立條碼簽章:

import com.groupdocs.signature.options.sign.BarcodeSignOptions;
import com.groupdocs.signature.domain.barcodes.BarcodeTypes;

BarcodeSignOptions options = new BarcodeSignOptions("12345678");
options.setEncodeType(BarcodeTypes.Code128);

說明如下:

  • "12345678" 為條碼資料——可作為訂單編號、證書號碼或任何您需要的識別碼
  • Code128 為編碼類型(以下會說明如何選擇合適的類型)

專業提示: Code128 能同時處理數字與字母,適用於大多數情境。如果僅需數字,Code39 可能較簡單,但 Code128 提供更高的彈性。

步驟 3:定位條碼(如何在 PDF 中簽署條碼)

這正是 GroupDocs 發揮優勢的地方——使用百分比定位可確保條碼在任何 PDF 大小上都呈現良好:

import com.groupdocs.signature.domain.enums.MeasureType;
import com.groupdocs.signature.domain.Padding;

// Use percentages instead of fixed pixels
options.setLocationMeasureType(MeasureType.Percents);
options.setLeft(5);  // 5% from the left edge
options.setTop(5);   // 5% from the top

// Size it proportionally too
options.setSizeMeasureType(MeasureType.Percents);
options.setWidth(10);  // 10% of page width
options.setHeight(5);  // 5% of page height

// Add some breathing room with margins
Padding margins = new Padding();
margins.setLeft(1);
margins.setTop(1);
margins.setRight(1);
options.setMargin(margins);

為何使用百分比: 想像您同時簽署 A4 文件與 legal 大小的表單。透過百分比定位,條碼會自動按比例縮放,保持一致外觀。若使用固定像素,條碼在大文件上會過小,或在小文件上過大。

實務範例: 在 A4 頁面(595 × 842 點)上,10% 寬度的條碼約為 60 點寬;在 legal 頁面(612 × 1008 點)上則約為 61 點——自動保持比例。

步驟 4:簽署並儲存文件(如何加入條碼 PDF)

現在正式套用簽章並儲存檔案:

String outputFilePath = "YOUR_OUTPUT_DIRECTORY/SignWithPercents/sample_signed.pdf";
signature.sign(outputFilePath, options);

重要說明: 輸出目錄必須事先存在,GroupDocs 不會自動建立多層目錄,請先自行建立或在程式中處理:

Path outputPath = Paths.get(outputFilePath);
Files.createDirectories(outputPath.getParent());
signature.sign(outputFilePath, options);

如果發生錯誤該怎麼辦? 請將程式碼包在 try‑catch 區塊中:

try {
    signature.sign(outputFilePath, options);
    System.out.println("PDF signed successfully at: " + outputFilePath);
} catch (Exception e) {
    System.err.println("Signing failed: " + e.getMessage());
    e.printStackTrace();
}

為您的需求選擇合適的條碼類型(code128 pdf 條碼)

GroupDocs 支援多種條碼格式,選擇適合的類型相當重要。以下提供實用比較:

Code128(我們的預設選擇):

  • 適用情境: 混合字母與數字資料(如 “INV2024-001” 的 ID)
  • 容量: 最多 128 個 ASCII 字元
  • 優勢: 緊湊、支援度高,能同時處理字母與數字
  • 使用時機: 需要彈性且不確定要編碼的資料類型時

Code39:

  • 適用情境: 簡單的字母與數字碼
  • 容量: 43 個字元(A‑Z、0‑9 以及少量符號)
  • 考慮原因: 老舊掃描器通常對其支援較好
  • 使用時機: 與舊系統整合或需求簡單勝於資料密度時

QR Code:

  • 適用情境: 大量資料(如 URL、JSON)
  • 容量: 最多 3 KB 資料
  • 優勢: 可儲存複雜資料結構,內建錯誤更正功能
  • 使用時機: 需要嵌入結構化資料或 URL 時

EAN/UPC:

  • 適用情境: 商品識別
  • 容量: 固定長度的數字碼(8‑13 位)
  • 使用時機: 於零售或庫存系統中使用

快速決策指南:

  • 需要字母與數字? → Code128
  • 只要數字,保持簡單? → Code39
  • 大量資料或 URL? → QR Code
  • 零售/商品編碼? → EAN/UPC

常見陷阱與避免方法

以下列出開發者最常遇到的問題(讓您免於踩雷):

問題 1:條碼定位不正確

症狀: 條碼出現在意外位置或被截斷。

常見原因:

  • 在不同頁面尺寸上使用像素值
  • 忘記 PDF 座標系統是從左下角開始,而非左上角
  • 邊距將內容推至可見區域之外

解決方案:
始終使用百分比定位以確保一致性:

options.setLocationMeasureType(MeasureType.Percents);
options.setLeft(5);  // 5% from left works on any page width

問題 2:條碼文字無法辨識

症狀: 雖然條碼文字顯示,但掃描器無法讀取。

原因:

  • 條碼尺寸過小,無法容納資料量
  • 使用了不適合資料的編碼類型
  • 解析度低或對比度不足

解決方案:
將條碼尺寸與資料長度匹配。對於 10‑15 個字元的 Code128,建議寬度至少佔頁面寬度的 8‑10%:

options.setWidth(10);  // Give it room to breathe
options.setHeight(5);  // Maintain proper aspect ratio

問題 3:檔案路徑例外

症狀: 出現 FileNotFoundException 或類似錯誤。

原因:

  • 在 Windows 上硬編碼單斜線路徑
  • 輸出目錄不存在
  • 檔案權限問題

解決方案:
使用正斜線(在所有平台皆可),並先建立目錄:

String filePath = "documents/sample.pdf";  // Works on Windows, Mac, Linux
Files.createDirectories(Paths.get("output/signed"));

問題 4:大型 PDF 記憶體問題

症狀: 處理大型文件時出現記憶體不足錯誤。

解決方案:
完成後關閉 Signature 物件以釋放資源:

try (Signature signature = new Signature(filePath)) {
    signature.sign(outputFilePath, options);
} // Automatically closes and releases memory

測試您的條碼實作

在部署前,請確保條碼能正常運作。以下提供實用測試清單:

1. 目視檢查測試

開啟已簽署的 PDF,檢查:

  • 條碼是否可見且定位正確?
  • 外觀是否清晰(非模糊或像素化)?
  • 周圍是否有足夠的留白?

2. 掃描測試

使用手機上的條碼掃描應用程式(如「Barcode Scanner」或「QR & Barcode Reader」)驗證:

  • 掃描器能讀取條碼
  • 解碼後的資料與您編碼的內容相符
  • 在不同角度與距離下皆能正常讀取

3. 跨平台測試

在不同裝置上開啟 PDF:

  • Windows(Adobe Reader、Chrome)
  • Mac(Preview、Chrome)
  • 行動裝置(iOS、Android)

確保條碼在所有平台上皆正確呈現。

4. 自動化測試程式碼

以下提供一段簡易測試程式碼:

import org.junit.Test;
import static org.junit.Assert.*;

public class BarcodeSignatureTest {
    
    @Test
    public void testBarcodeSigning() {
        String testPdf = "test-data/sample.pdf";
        String output = "test-output/signed.pdf";
        
        try (Signature signature = new Signature(testPdf)) {
            BarcodeSignOptions options = new BarcodeSignOptions("TEST123");
            options.setEncodeType(BarcodeTypes.Code128);
            
            signature.sign(output, options);
            
            // Verify output file exists
            assertTrue(new File(output).exists());
            
            // Verify file size increased (signature was added)
            long originalSize = new File(testPdf).length();
            long signedSize = new File(output).length();
            assertTrue(signedSize > originalSize);
            
        } catch (Exception e) {
            fail("Signing should not throw exception: " + e.getMessage());
        }
    }
}

條碼簽章的實務應用案例

以下說明此技術在實務系統中的典型應用:

1. 證書產生與驗證

情境: 您正在打造一個發放結業證書的培訓平台。
實作方式: 產生唯一的證書 ID(例如 “CERT‑2024‑00123”),並在右下角嵌入 Code128 條碼。掃描條碼即可讓 API 即時取得證書資訊,免除人工輸入。

2. 發票追蹤系統

情境: 您的公司每月處理數千張發票。
實作方式: 將發票號碼與到期日以 QR Code 形式置於易於掃描的區域。自動分揀系統即可在無需人工介入的情況下處理發票,將處理時間從數小時縮短至數分鐘。

3. 法律合約管理

情境: 律師事務所需要追蹤合約版本與修訂。
實作方式: 每個合約版本皆附加包含合約 ID、版本號與簽署日期的唯一條碼識別碼。審核時掃描即可自動取得完整的版本歷史。

4. 醫療記錄安全

情境: 醫院希望防止未授權的病歷存取。
實作方式: 在條碼中嵌入患者 ID 與紀錄建立時間戳。僅有經驗證的裝置能解碼並存取完整病歷,且每次掃描都會產生符合規範的稽核日誌。

效能最佳化技巧

當您需要簽署大量 PDF 時,效能相當重要。以下提供幾項讓系統順暢運作的建議:

批次處理策略

不必一次只簽署單一文件,改以批次方式處理:

List<String> pdfFiles = Arrays.asList("doc1.pdf", "doc2.pdf", "doc3.pdf");

for (String pdfFile : pdfFiles) {
    try (Signature signature = new Signature(pdfFile)) {
        BarcodeSignOptions options = createBarcodeOptions(); // Reuse options
        signature.sign(getOutputPath(pdfFile), options);
    }
}

此做法的好處: 重複使用 options 物件並正確關閉資源,可避免記憶體洩漏。

記憶體管理

對於非常大的 PDF(50 + MB):

  • 以序列方式處理,而非一次載入多個
  • 使用 try‑with‑resources 確保資源釋放
  • 監控堆積大小,必要時調整 JVM 參數,例如 -Xmx2g

快取策略

若頻繁使用相同條碼簽署:

// Create options once, reuse many times
BarcodeSignOptions templateOptions = createStandardBarcodeOptions();

// For each document, clone and customize
BarcodeSignOptions documentOptions = templateOptions.clone();
documentOptions.setText(uniqueDocumentId);

何時使用條碼簽章(以及何時不適合)

理想使用情境:

  • 需要機器可讀的文件識別碼
  • 文件將被自動掃描或處理
  • 想要具防篡改追蹤功能而不使用數位憑證
  • 可與現有條碼基礎設施整合

不適合的情況:

  • 需要具法律效力的數位簽章(應改用數位憑證)
  • 文件僅供人類閱讀(簡單文字浮水印即可)
  • 文件極小,條碼會佔據過多版面
  • 安全需求要求加密(條碼是可見且任何人都能掃描的)

可以同時結合兩種方式嗎? 絕對可以!許多系統同時使用條碼簽章作為追蹤手段,並搭配數位簽章以確保法律效力。

常見問答

問:我可以在同一 PDF 中使用不同的條碼類型嗎?
答: 可以!只要對每種條碼類型呼叫 signature.sign() 多次,使用不同的 BarcodeSignOptions 即可。請確保條碼不會重疊。

問:如何處理包含特殊字元的條碼?
答: Code128 能良好支援大多數 ASCII 字元。若需 Unicode 或複雜資料,請改用 QR Code,支援 UTF‑8 編碼。

問:Code128 條碼最多能儲存多少資料?
答: 理論上可容納 128 個字元,但超過 30‑40 個字元後可讀性會顯著下降。若資料量較大,請使用 QR Code。

問:加入條碼會顯著增加 PDF 檔案大小嗎?
答: 不會明顯增加——條碼為向量圖形,通常每個條碼僅增加 5‑20 KB,視尺寸與複雜度而定。

問:我可以旋轉條碼或垂直放置嗎?
答: 可以!使用 options.setRotationAngle(90) 旋轉條碼,適合在邊緣放置。

問:如何讓條碼出現在多頁 PDF 的每一頁?
答: 迭代每一頁並對其套用簽章。請參考 GroupDocs 文件中的 PagesSetup 類別,以控制簽署的頁面。

問:如果條碼掃描器無法讀取產生的條碼怎麼辦?
答: 首先確認掃描器支援所選的條碼類型。接著增大條碼尺寸——大多數掃描問題源於條碼過小。建議寬度至少 1 吋(2.54 cm)以確保可靠讀取。

其他資源

文件說明:

下載與授權:

社群與支援:


最後更新: 2026-03-06
測試環境: GroupDocs.Signature 23.12 (Java)
作者: GroupDocs