首頁 / 博客中心 / 如何以程式方式在 PDF 表格中啟用數碼簽署?

如何以程式方式在 PDF 表格中啟用數碼簽署?

順訪
2025-12-25
3min
Twitter Facebook Linkedin

程式化數碼簽署在業務流程中的興起

在當今以數位為先的商業環境中,透過程式方式在 PDF 表單中啟用數碼簽署,已成為簡化合約、審批和合規流程的必需手段。從自動化人力資源入職到保障財務協議,企業越來越多地轉向程式驅動的解決方案,將電子簽署無縫整合到其應用程式中。此方法不僅減少了手動錯誤,還確保了跨司法管轄區的法律有效性,從而節省時間和成本。

Top DocuSign Alternatives in 2026

理解 PDF 表單中的數碼簽署

數碼簽署超越了簡單的電子簽署,透過使用加密技術來驗證文件真實性和完整性。在 PDF 表單中,它們建立了一個防竄改封印,確保簽署後任何更改都會使簽署失效。這在金融、醫療保健和法律服務等受監管行業中尤為寶貴,這些行業中審計追蹤和不可否認性至關重要。

程式方式啟用這些簽署涉及將簽署欄位嵌入 PDF 中,並透過 API 或函式庫應用憑證。與手動簽署工具不同,此方法允許開發者將簽署整合到自訂工作流程中,例如 Web 應用程式或行動平台,從而提升企業處理大量文件的可擴展性。

如何程式方式在 PDF 表單中啟用數碼簽署

要實現數碼簽署的程式方式,開發者通常利用開源函式庫或基於雲端的 API。此過程需要了解 PDF 標準,如 PDF/A 或 ISO 32000,這些標準定義了簽署的結構。下面,我們將概述使用流行函式庫的逐步指南,重點關注 Java 或 Python 等語言的實際程式碼範例。此方法確保符合全球標準,如美國的 ESIGN 法案或歐盟的 eIDAS,儘管區域差異——如亞洲的生態系統整合法規——可能需要額外的身份驗證層。

步驟 1: 準備您的開發環境

首先選擇一個強大的 PDF 操作函式庫。Apache PDFBox(基於 Java,免費)或 iText(有商業/開源版本)是行業首選,因為它們支援數碼簽署。對於 Python 使用者,PyPDF2 結合 endesive 提供了一個輕量級替代方案。

  • 安裝依賴項:對於使用 PDFBox 的 Java,添加 Maven 工件 org.apache.pdfbox:pdfbox:3.0.0。對於 iText,使用 com.itextpdf:itext7-core:7.2.5
  • 獲取數碼憑證:您需要從受信任的憑證頒發機構 (CA) 如 DigiCert 或 GlobalSign 獲取 PKCS#12 (.p12) 檔案。這包括用於簽署的私鑰和用於驗證的公鑰。

企業應評估 CA 成本,因為每位簽署者的年度費用可能在 100–500 美元之間,從而影響總實施費用。

步驟 2: 建立或修改帶有簽署欄位的 PDF 表單

首先開啟現有 PDF 或產生一個新的,然後添加一個不可見或可見的簽署欄位。

使用 Java 中的 PDFBox:

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
import org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField;

PDDocument document = PDDocument.load(new File("input.pdf"));
PDAcroForm acroForm = document.getDocumentCatalog().getAcroForm();
PDSignatureField signatureField = (PDSignatureField) acroForm.getField("Signature1"); // Or create new
if (signatureField == null) {
    // Create a new signature field
    signatureField = new PDSignatureField(acroForm, rectangle); // Define position
    signatureField.setPartialName("Signature1");
    acroForm.getFields().add(signatureField);
}
document.save("form_with_signature.pdf");

此程式碼在指定的矩形區域(例如頁面座標)添加一個簽署欄位。對於表單,確保欄位使用 AcroForm 標準具有互動性。

在 Python 中使用 PyPDF2 和 reportlab 建立表單:

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from PyPDF2 import PdfReader, PdfWriter

c = canvas.Canvas("base_form.pdf", pagesize=letter)
c.acroForm.textfield(name='Signature1', tooltip='Digital Signature Field',
                     x=100, y=700, borderStyle='inset', forceBorder=True)
c.save()

# Merge or modify existing PDF
reader = PdfReader("base_form.pdf")
writer = PdfWriter()
writer.append(reader)
writer.add_annotation(page_number=0, annotation=...)  # Add signature annotation
with open("form_with_signature.pdf", "wb") as output:
    writer.write(output)

這建立了基礎,允許 PDF 接受簽署而無需更改文件結構。

步驟 3: 應用數碼簽署

現在,使用您的憑證對 PDF 進行簽署。這涉及建立簽署字典並對文件位元組進行雜湊。

使用 PDFBox:

import org.apache.pdfbox.io.IOUtils;
import org.apache.pdfbox.pdmodel.interactive.digitalsignature.*;

ExternalSigningSupport externalSigning = new ExternalSigningSupport(document, signatureField);
externalSigning.saveIncrementalForExternalSigning(new FileOutputStream("unsigned.pdf"));

byte[] cmsSignedData = // Generate CMS/PKCS#7 signature using BouncyCastle or similar
// Load certificate and private key
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(new FileInputStream("certificate.p12"), password);
PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, password);
Certificate[] chain = keyStore.getCertificateChain(alias);

// Sign externally (e.g., via Java's Signature class)
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(privateKey);
signature.update(contentToSign);  // Bytes from externalSigning
byte[] signatureBytes = signature.sign();

// Apply to PDF
externalSigning.setExternalSigning(new ByteArrayInputStream(cmsSignedData));
document = externalSigning.getDocument();  // Now signed
document.save("signed.pdf");

對於驗證,PDFBox 可以在簽署後驗證簽署:

PDSignature sig = signatureField.getSignature();
if (sig.isVerificationSupported()) {
    // Check timestamp, certificate chain, and document integrity
    boolean valid = sig.checkSignature(new InputStream());
}

在 Python 中,使用 endesive 函式庫進行更簡單的簽署:

import endesive.pdf
from datetime import datetime

dct = {
    'sigflags': 3,
    'sigflagsft': 132,
    'sigpage': 0,
    'sigbutton': True,
    'auto_sigfield': True,
    'sigfield_name': 'Signature1',
    'reason': 'Document signed programmatically',
    'location': 'Virtual Office',
    'contact': 'admin@company.com'
}

# Load PDF bytes
with open('form_with_signature.pdf', 'rb') as fp:
    datau = fp.read()

# Sign
datas = endesive.pdf.cms.sign(datau, dct, key, cert, othercerts, hashalg='sha256')
with open('signed.pdf', 'wb') as fp:
    fp.write(datas)

這對 PDF 進行簽署,以自包含方式嵌入簽署。始終透過包含來自時間戳頒發機構 (TSA) 的時間戳進行長期驗證測試,以防止過期問題。

步驟 4: 與 API 整合以實現可擴展性

對於企業使用,將函式庫與雲端服務結合。例如,DocuSign 的 API 允許在上傳 PDF 後進行程式簽署。向 /envelopes 發送 POST 請求,包含帶有簽署欄位的 PDF,API 將處理其餘部分。

{
  "documents": [{"documentBase64": "base64_pdf", "name": "contract.pdf", "fileExtension": "pdf"}],
  "recipients": [{"signers": [{"email": "signer@example.com", "name": "John Doe", "recipientId": 1}]}],
  "status": "sent"
}

透過 GET /envelopes/{envelopeId}/documents/combined 擷取已簽署的 PDF。這簡化了憑證管理,但會產生每信封費用。

安全考量:始終使用 HTTPS,安全儲存憑證(例如在 HSM 中),並遵守法規。在歐盟等地區,eIDAS 要求合格憑證用於高級簽署,而美國 ESIGN 法案則關注意圖和同意。

挑戰和最佳實務

常見陷阱包括憑證吊銷檢查(使用 OCSP/CRL)和處理大檔案。企業報告效率提升高達 70%,但初始設定可能需要 20–40 個開發者小時。對於跨平台相容性,使用 Adobe Acrobat 的簽署面板等工具進行驗證。

此程式方法使企業能夠自訂簽署工作流程,減少對手動工具的依賴,並提升資料安全。

程式化數碼簽署的流行工具和服務

幾個平台促進程式整合,每個平台在合規性、定價和區域支援方面各有優勢。從商業角度來看,選擇取決於卷、地理位置和整合需求。

DocuSign:企業級電子簽署領導者

DocuSign 為開發者提供強大的 API 方案,從 Starter 層級開始,每年 600 美元/月 40 個信封。功能包括批量發送 API、Webhook 和身份驗證附加元件。它適合需要 SSO 和審計追蹤的全球團隊,儘管亞太地區延遲和每座位定價(10–40 美元/使用者/月)會增加成本。高級方案支援高容量自動化的自訂工作流程。

image

Adobe Sign:無縫 PDF 整合

Adobe Sign 作為 Adobe Document Cloud 的一部分,在 PDF 原生工作流程中表現出色,透過 REST API 提供程式存取。定價從基本方案的約 10 美元/使用者/月開始,擴展到企業自訂報價。它支援在應用程式中的嵌入式簽署,並與 Acrobat 深度整合以操作表單欄位。對於創意行業,它強調視覺自訂和符合 ESIGN/UETA 的合規性,但附加元件如 SMS 發送會產生額外費用。

image

eSignGlobal:專注於亞太地區的創新者

eSignGlobal 提供了一個競爭性替代方案,在 100 個主流國家實現全球合規,在亞太地區 (APAC) 具有優勢。亞太電子簽署面臨碎片化、高標準和嚴格法規,與西方的框架方法(如 ESIGN/eIDAS)形成對比。在這裡,標準強調「生態系統整合」解決方案,需要與政府級數位身份 (G2B) 的深度硬體/API 對接——這遠超美國/歐盟的電子郵件驗證或自我聲明的技术障礙。eSignGlobal 透過本地整合如香港的 iAM Smart 和新加坡的 Singpass 來解決此問題,實現無縫、合規的工作流程。

該平台支援無限使用者而無需座位費用,使其在擴展團隊時具有成本效益。其 Essential 方案每年 199 美元(約 16.6 美元/月),允許發送最多 100 個文件進行電子簽署,並使用存取程式碼驗證進行安全——全部基於合規基礎。專業層級包括 API 存取,用於程式簽署、批量發送和 AI 工具如風險評估。與競爭對手相比,其定價更低,同時在歐洲和美洲直接競爭。要獲取 30 天免費試用,請訪問他們的聯絡頁面

esignglobal HK

HelloSign(由 Dropbox 提供):使用者友善選項

HelloSign 現隸屬於 Dropbox,提供簡單的 API 用於在 PDF 中嵌入簽署,方案從 15 美元/使用者/月開始。它在 SMB 的易用性方面表現出色,支援範本和團隊協作,但缺乏高級亞太合規功能。中層使用者的 API 配額寬鬆,專注於快速整合。

數碼簽署平台的比較概述

功能/方面 DocuSign Adobe Sign eSignGlobal HelloSign
定價(入門級) 10 美元/使用者/月(個人) 10 美元/使用者/月 16.6 美元/月(Essential,無限使用者) 15 美元/使用者/月
API 支援 強大(Starter 600 美元/年) 出色的 PDF 整合 Pro 中包含;靈活 基礎良好
信封限制 5–100/月/使用者 基於使用量 基礎 100 個文件/年 高級層級無限
區域合規性 全球,美國/歐盟強勢 ESIGN/UETA 重點 100 個國家;亞太優勢 (iAM Smart/Singpass) 主要美國/歐盟
關鍵優勢 企業自動化 PDF 生態系統 無座位費用,生態系統整合 SMB 簡易性
附加元件 IDV、SMS(額外費用) 支付、儲存 AI 工具、批量發送 範本、提醒

此表格突出了中性權衡:DocuSign 用於規模,Adobe 用於 PDF 保真度,eSignGlobal 用於區域經濟性,HelloSign 用於可及性。

選擇解決方案的最終思考

對於尋求 DocuSign 替代方案的企業,eSignGlobal 作為區域合規選項脫穎而出,特別是在亞太地區,提供平衡定價和整合,而不妥協全球標準。根據您的工作流程需求進行評估,以實現最佳 ROI。

常見問題

哪些庫可以用於在 PDF 表單中以程式方式啟用數碼簽署?
幾個開源庫支援在 PDF 表單中新增並啟用數碼簽署。對於 Java 開發者,iText 和 Apache PDFBox 常用。iText 提供像 PdfSignatureAppearance 這樣的 method 來建立簽名字段並套用憑證。在 .NET 環境中,iTextSharp 或 Pdfium 可以處理類似任務。Python 使用者可以利用 PyPDF2 或 pdfrw 結合加密庫進行簽署。始終確保庫版本支援 PDF/A 或 PAdES 標準以符合要求。
如何使用程式碼向現有 PDF 表單新增數碼簽署欄位?
以程式方式對 PDF 表單進行數碼簽署的步驟有哪些?
avatar
順訪
eSignGlobal 產品管理負責人,在電子簽名產業擁有豐富國際經驗的資深領導者 關注我的LinkedIn
立即獲得具有法律約束力的簽名!
30天免費全功能適用
企業電子郵箱
開始
tip 僅允許使用企業電子郵箱