使用 HIBC 在 Java 中以條碼簽署 PDF
如果您正在開發製藥或醫療保健物流軟件,可能已經遇到紙本追蹤、簽名遺失以及稽核噩夢的問題。以條碼簽署 PDF——尤其是 HIBC Data Matrix 或 QR 代碼——可建立防篡改、機器可讀的痕跡,能在列印、掃描和法規審查中存活。於本教學中,您將看到如何使用 GroupDocs.Signature for Java 為 PDF 添加 Data Matrix 與 QR 條碼。
快速回答
- 什麼程式庫在 Java 中處理 HIBC 條碼? GroupDocs.Signature for Java。
- 哪種條碼格式最緊湊? Data Matrix – 適用於小尺寸標籤。
- 我可以在同一 PDF 中同時加入 QR 與 Data Matrix 嗎? 可以,只需建立分別的
QrCodeSignOptions。 - 執行時需要網際網路連線嗎? 不需要,程式庫安裝後即可完全離線運作。
- 建議使用哪個 Java 版本? Java 11+ 以獲得生產等級的效能。
什麼是 HIBC 條碼 PDF 簽署?
Signature 是 GroupDocs.Signature 的核心類別,代表 PDF 文件並允許嵌入數位簽章。GroupDocs.Signature for Java 中的 Signature 類別提供將 HIBC 條碼作為數位簽章嵌入的方法。透過以 HIBC 條碼簽署 PDF,您可建立可驗證、防篡改的記錄,供供應鏈任何階段掃描。
為何同時使用 Data Matrix 與 QR 代碼?
Data Matrix 具最小的佔位空間,同時可容納多達 2,335 個字母數字字元,適合密集標籤區域。相較之下,QR 代碼支援最高 4,296 個字元,且可被智慧手機普遍讀取。結合兩者可在空間效率與資料容量之間取得最佳平衡,確保所有利害關係人——從倉庫掃描器到行動應用程式——皆能讀取所需資訊。
前置條件
- JDK 11 或更高(Java 8 亦可使用,但建議使用 Java 11+ 以獲得最佳效能)。
- IDE 如 IntelliJ IDEA、Eclipse 或具 Java 擴充功能的 VS Code。
- Maven 或 Gradle 用於相依管理(以下示例)。
- 範例 PDF(例如
sample.pdf)以測試實作。 - 有效的 GroupDocs.Signature 授權(開發可使用免費試用,正式環境需購買授權)。
設定 GroupDocs.Signature for Java
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 下載 JAR 檔,手動加入專案的 classpath。此方式在受限網路環境中表現良好。
取得授權
向 GroupDocs 申請免費試用或臨時授權,以移除浮水印並解鎖全部功能。正式部署需購買授權。
基本初始化
Signature 為所有簽署操作的入口點。它會載入 PDF、套用條碼,並寫入已簽署的檔案。
import com.groupdocs.signature.Signature;
class InitializeSignature {
public static void main(String[] args) {
Signature signature = new Signature("sample.pdf");
// Proceed with signing operations...
}
}
如何使用 HIBC 條碼建立 Data Matrix PDF?
實例化 Signature 並傳入來源 PDF,將 QrCodeSignOptions 設為 Data Matrix 格式,提供正確格式的 HIBC 字串,然後呼叫 sign()。程式庫會將已簽署的 PDF 寫入目標位置,保留版面配置,並將條碼嵌入為防篡改簽章。QrCodeSignOptions 指定條碼類型、內容、大小與簽章的放置位置。
- 匯入所需類別 – 取得簽章引擎與 Data Matrix 選項的存取權。
import com.groupdocs.signature.Signature;
import com.groupdocs.signature.options.sign.QrCodeSignOptions;
import com.groupdocs.signature.domain.qrcodes.QrCodeTypes;
- 實例化
Signature物件,使用來源與目標檔案的絕對路徑。
String sourceFilePath = "YOUR_DOCUMENT_DIRECTORY";
String destinFilePath = "YOUR_OUTPUT_DIRECTORY/SignWithHIBCLICQR.pdf";
final Signature signature = new Signature(sourceFilePath);
- 設定 Data Matrix 選項 – 設定 HIBC 字串、選擇
QrCodeTypes.HIBCLICDataMatrix,並定義放置座標。QrCodeTypes列舉了 HIBC 簽章支援的條碼格式。
QrCodeSignOptions hibcLic_QR = new QrCodeSignOptions("A123PROD30917/75#422011907#GP293", QrCodeTypes.HIBCLICQR);
hibcLic_QR.setLeft(1); // Set the position from left
hibcLic_QR.setTop(1); // Set the position from top
hibcLic_QR.setReturnContent(true); // Return content after signing
hibcLic_QR.setReturnContentType(FileType.PNG); // Specify return content type as PNG
- 套用簽章 至 PDF。
signature.sign(destinFilePath, hibcLic_QR);
- 釋放資源,以釋放檔案句柄並避免記憶體洩漏。
finally {
if (signature != null) signature.dispose();
}
完整範例
以下是一個完整流程的單一程式碼區塊(占位符代表您先前片段中的實際程式碼):
import com.groupdocs.signature.Signature;
import com.groupdocs.signature.options.sign.QrCodeSignOptions;
import com.groupdocs.signature.domain.qrcodes.QrCodeTypes;
public class HibcQrSigning {
public static void main(String[] args) {
String sourceFilePath = "sample.pdf";
String destinFilePath = "output/SignWithHIBCLICQR.pdf";
Signature signature = null;
try {
signature = new Signature(sourceFilePath);
QrCodeSignOptions hibcLic_QR = new QrCodeSignOptions(
"A123PROD30917/75#422011907#GP293",
QrCodeTypes.HIBCLICQR
);
hibcLic_QR.setLeft(1);
hibcLic_QR.setTop(1);
hibcLic_QR.setReturnContent(true);
hibcLic_QR.setReturnContentType(FileType.PNG);
signature.sign(destinFilePath, hibcLic_QR);
System.out.println("PDF signed successfully with HIBC QR code");
} catch (Exception e) {
System.err.println("Error signing PDF: " + e.getMessage());
e.printStackTrace();
} finally {
if (signature != null) signature.dispose();
}
}
}
直接回答(40–70 字)
要 建立 Data Matrix PDF,先以來源 PDF 實例化 Signature,將 QrCodeSignOptions 設為 QrCodeTypes.HIBCLICDataMatrix 並提供正確格式的 HIBC 字串,然後呼叫 signature.sign(outputPath, options)。程式庫會將已簽署的 PDF 寫入目標位置,保留版面配置,並將條碼嵌入為防篡改簽章。
如何使用 GroupDocs.Signature 為 PDF 加入 QR 代碼?
載入 PDF,為 QR 格式設定 QrCodeSignOptions,然後呼叫 sign()。程式庫會調整 QR 圖片大小以確保可讀性,並根據您設定的座標定位,避免與現有內容重疊。此方式確保條碼在列印後仍可掃描,且符合 HIBC 標準。QrCodeSignOptions 定義 QR 條碼的內容、大小與位置。
- 匯入 QR 專屬類別
QrCodeSignOptions hibcLic_AZ = new QrCodeSignOptions("A123PROD30917/75#422011907#GP293", QrCodeTypes.HIBCLICAztec);
hibcLic_AZ.setLeft(1); // Set the position from left
hibcLic_AZ.setTop(200); // Set the position from top
hibcLic_AZ.setReturnContent(true); // Return content after signing
hibcLic_AZ.setReturnContentType(FileType.PNG); // Specify return content type as PNG
- 建立並設定 QR 選項 – 注意使用
QrCodeTypes.HIBCLICQR。
signature.sign(destinFilePath, hibcLic_AZ);
- 簽署文件
QrCodeSignOptions hibcLic_DM = new QrCodeSignOptions("A123PROD30917/75#422011907#GP293", QrCodeTypes.HIBCLICDataMatrix);
hibcLic_DM.setLeft(1); // Set the position from left
hibcLic_DM.setTop(400); // Set the position from top
hibcLic_DM.setReturnContent(true); // Return content after signing
hibcLic_DM.setReturnContentType(FileType.PNG); // Specify return content type as PNG
直接回答: 在
QrCodeSignOptions中使用QrCodeTypes.HIBCLICQR,設定 HIBC 內容字串,使用setLeft()與setTop()位置條碼,然後呼叫signature.sign(outputPath, options)。QR 條碼會即時嵌入,隨時可供智慧手機或掃描器捕捉。
常見錯誤須避免
1. 忘記釋放資源
錯誤:
Signature signature = new Signature("sample.pdf");
signature.sign(destinFilePath, options);
// Oops, no dispose() call
修正:
將 Signature 的使用包在 try‑with‑resources 區塊,或在 finally 子句中明確呼叫 close()。
2. 使用不正確的 HIBC 格式字串
錯誤: 使用類似 “12345” 的通用字串。
修正: 依照 HIBCC 標準(例如 A123PROD30917/75#422011907#GP293)。可使用 HIBCC online validator 進行驗證。
3. 硬編碼檔案路徑
錯誤:
String sourceFilePath = "C:/Users/John/Documents/test.pdf";
修正: 將路徑存於設定檔或環境變數,於執行時讀取。
4. 忽視條碼位置衝突
將條碼放置於現有文字或簽章之外。使用 PDF 座標系統(原點在左下角),並以列印樣本測試。
5. 未使用實體掃描器測試
列印已簽署的 PDF,並使用工作流程中相同的硬體掃描。驗證在不同列印品質下的可讀性。
醫療保健的實務應用
| 情境 | 建議條碼 | 適用原因 |
|---|---|---|
| 藥品分銷 | QR Code | 高資料容量,智慧手機廣泛掃描。 |
| 庫存管理 | Data Matrix | 佔位小,適合密集貨架標籤。 |
| 法規遵循(FDA 21 CFR Part 11) | QR + Data Matrix | 雙格式提供冗餘與稽核能力。 |
| 醫療器材追蹤 | Aztec Code | 尺寸緊湊,適用於有限空間的包裝。 |
效能考量與最佳實踐
批次處理模式
List<String> filesToSign = getFileList();
for (String filePath : filesToSign) {
Signature signature = null;
try {
signature = new Signature(filePath);
// Sign and save
} finally {
if (signature != null) signature.dispose();
}
}
- 為每個檔案建立新的
Signature實例,以降低記憶體使用量。 - 使用固定執行緒池(
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() - 1))進行平行處理,但需監控堆積大小,因每個Signature會將整個 PDF 載入記憶體。
保持函式庫更新
GroupDocs 的新版本可提升處理速度最高 20 %,並加入新的 HIBC 合規功能。建議每季檢查相依性。
快取範本
一次載入 PDF 範本,為每種條碼變體克隆後再簽署。此方式減少 I/O,提升大量工作流程的速度。
常見問答
Q: GroupDocs.Signature 能簽署除 PDF 之外的檔案類型嗎?
A: 可以,它同樣支援 DOCX、XLSX、PPTX、PNG、JPEG 與 TIFF,使用相同的條碼簽署 API。
Q: 如何排除 “Invalid barcode content” 錯誤?
A: 確認您的 HIBC 字串符合 HIBCC 語法,使用線上驗證工具,並確保使用正確的 QrCodeTypes 常數對應所選格式。
Q: 各 HIBC 格式的最大資料容量為何?
A: QR ≈ 4,296 個字母數字字元,Aztec ≈ 3,832 個數字 / 3,067 個字母數字,Data Matrix ≈ 3,116 個數字 / 2,335 個字母數字。為確保掃描可靠性,建議將碼長度控制在 200 個字元以內。
Q: 能在同一 PDF 中嵌入多種條碼類型嗎?
A: 完全可以。建立不同位置的 QrCodeSignOptions 物件,分別呼叫 signature.sign()。只要確保它們不重疊即可。
Q: 執行時簽署需要網際網路連線嗎?
A: 不需要。只要 JAR 在 classpath 且授權已啟用,所有操作皆在本機完成。
其他資源
最後更新: 2026-09-15
測試環境: GroupDocs.Signature 23.12 for Java
作者: GroupDocs