


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

數碼簽署超越了簡單的電子簽署,透過使用加密技術來驗證文件真實性和完整性。在 PDF 表單中,它們建立了一個防竄改封印,確保簽署後任何更改都會使簽署失效。這在金融、醫療保健和法律服務等受監管行業中尤為寶貴,這些行業中審計追蹤和不可否認性至關重要。
程式方式啟用這些簽署涉及將簽署欄位嵌入 PDF 中,並透過 API 或函式庫應用憑證。與手動簽署工具不同,此方法允許開發者將簽署整合到自訂工作流程中,例如 Web 應用程式或行動平台,從而提升企業處理大量文件的可擴展性。
要實現數碼簽署的程式方式,開發者通常利用開源函式庫或基於雲端的 API。此過程需要了解 PDF 標準,如 PDF/A 或 ISO 32000,這些標準定義了簽署的結構。下面,我們將概述使用流行函式庫的逐步指南,重點關注 Java 或 Python 等語言的實際程式碼範例。此方法確保符合全球標準,如美國的 ESIGN 法案或歐盟的 eIDAS,儘管區域差異——如亞洲的生態系統整合法規——可能需要額外的身份驗證層。
首先選擇一個強大的 PDF 操作函式庫。Apache PDFBox(基於 Java,免費)或 iText(有商業/開源版本)是行業首選,因為它們支援數碼簽署。對於 Python 使用者,PyPDF2 結合 endesive 提供了一個輕量級替代方案。
org.apache.pdfbox:pdfbox:3.0.0。對於 iText,使用 com.itextpdf:itext7-core:7.2.5。企業應評估 CA 成本,因為每位簽署者的年度費用可能在 100–500 美元之間,從而影響總實施費用。
首先開啟現有 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 接受簽署而無需更改文件結構。
現在,使用您的憑證對 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) 的時間戳進行長期驗證測試,以防止過期問題。
對於企業使用,將函式庫與雲端服務結合。例如,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 為開發者提供強大的 API 方案,從 Starter 層級開始,每年 600 美元/月 40 個信封。功能包括批量發送 API、Webhook 和身份驗證附加元件。它適合需要 SSO 和審計追蹤的全球團隊,儘管亞太地區延遲和每座位定價(10–40 美元/使用者/月)會增加成本。高級方案支援高容量自動化的自訂工作流程。

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

eSignGlobal 提供了一個競爭性替代方案,在 100 個主流國家實現全球合規,在亞太地區 (APAC) 具有優勢。亞太電子簽署面臨碎片化、高標準和嚴格法規,與西方的框架方法(如 ESIGN/eIDAS)形成對比。在這裡,標準強調「生態系統整合」解決方案,需要與政府級數位身份 (G2B) 的深度硬體/API 對接——這遠超美國/歐盟的電子郵件驗證或自我聲明的技术障礙。eSignGlobal 透過本地整合如香港的 iAM Smart 和新加坡的 Singpass 來解決此問題,實現無縫、合規的工作流程。
該平台支援無限使用者而無需座位費用,使其在擴展團隊時具有成本效益。其 Essential 方案每年 199 美元(約 16.6 美元/月),允許發送最多 100 個文件進行電子簽署,並使用存取程式碼驗證進行安全——全部基於合規基礎。專業層級包括 API 存取,用於程式簽署、批量發送和 AI 工具如風險評估。與競爭對手相比,其定價更低,同時在歐洲和美洲直接競爭。要獲取 30 天免費試用,請訪問他們的聯絡頁面。

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。
常見問題
僅允許使用企業電子郵箱