數位簽署和認證檔案

關於簽名服務

簽章服務可讓貴組織保護其發送及接收之Adobe PDF檔案的安全性和隱私權。 本服務使用數位簽章和認證,以確保只有預期的收件者才能變更檔案。 由於安全性功能會套用至檔案本身,因此檔案在整個生命週期中都會保持安全並受到控制。 檔案在防火牆外、離線下載時,以及送出回您的組織時,都能保有安全。

注意

您可以為「簽名」服務建立自訂的簽名處理常式,該處理常式會在呼叫特定作業(例如簽署PDF檔案)時被叫用。

簽名欄位名

某些簽名服務操作要求您指定執行操作的簽名欄位的名稱。 例如,在簽署PDF檔案時,您可以指定要簽署的簽名欄位名稱。 假設簽名欄位的全名為form1[0].Form1[0].SignatureField1[0]。 您可以指定SignatureField1[0]而非form1[0].Form1[0].SignatureField1[0]

有時衝突會導致簽名服務在錯誤欄位中籤名(或執行另一個需要簽名欄位名稱的操作)。 此衝突是名稱SignatureField1[0]出現在同一PDF檔案中兩個或多個位置的結果。 例如,假設PDF檔案包含兩個名為form1[0].Form1[0].SignatureField1[0]form1[0].Form1[0].SubForm1[0].SignatureField1[0]的簽名欄位,而您指定SignatureField1[0]。 在這種情況下,簽章服務會簽署它在重複檔案中所有簽名欄位時所找到的第一個簽名欄位。

如果PDF檔案中有多個簽名欄位,建議您指定簽名欄位的完整名稱。 也就是說,請指定form1[0].Form1[0].SignatureField1[0]而非SignatureField1[0]

您可以使用簽名服務完成下列工作:

注意

如需簽名服務的詳細資訊,請參閱AEM Forms的服務參考

添加簽名欄位

數位簽名會出現在簽名欄位中,這些欄位是包含簽名圖形表示的表格欄位。 簽名欄位可以是可見或不可見的。 簽署者可以使用預先存在的簽名欄位,或以程式設計方式新增簽名欄位。 在這兩種情況下,簽名欄位必須存在,才能簽署PDF檔案。

您可以使用簽名服務Java API或簽名網站服務API,以程式設計方式新增簽名欄位。 您可以在PDF檔案中新增多個簽名欄位;但是,每個簽名欄位名必須是唯一的。

注意

有些PDF檔案類型不允許您以程式設計方式新增簽名欄位。 有關簽名服務和添加簽名欄位的詳細資訊,請參閱AEM Forms的服務參考

步驟摘要

若要將簽名欄位新增至PDF檔案,請執行下列工作:

  1. 包含專案檔案。
  2. 建立簽名用戶端。
  3. 取得新增簽名欄位的PDF檔案。
  4. 新增簽名欄位。
  5. 將PDF檔案儲存為PDF檔案。

包含專案檔案

將必要的檔案加入您的開發專案中。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用web services,請確定您包含proxy檔案。

必須將以下JAR檔案添加到項目的類路徑中:

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-utilities.jar(如果AEM Forms部署在JBoss上,則為必要)
  • jbossall-client.jar(如果AEM Forms部署在JBoss上,則為必需)

建立簽名用戶端

您必須先建立簽名服務用戶端,才能以程式設計方式執行簽名服務作業。

取得新增簽名欄位的PDF檔案

您必須取得新增簽名欄位的PDF檔案。

新增簽名欄位

若要成功將簽名欄位新增至PDF檔案,請指定用以識別簽名欄位位置的坐標值。 (如果您新增不可見的簽名欄位,則不需要這些值。) 此外,您也可以指定在將簽名套用至簽名欄位後,PDF檔案中的哪些欄位會被鎖定。

將PDF檔案儲存為PDF檔案

在簽章服務新增簽名欄位至PDF檔案後,您可以將檔案儲存為PDF檔案,讓使用者在Acrobat或Adobe Reader開啟它。

另請參閱

包含AEM FormsJava庫檔案

設定連接屬性

數位簽署PDF檔案

使用Java API新增簽名欄位

使用簽名API(Java)新增簽名欄位:

  1. 包含專案檔案

    在Java專案的類路徑中包含用戶端JAR檔案,例如adobe-signatures-client.jar。

  2. 建立簽名用戶端

    • 建立包含連接屬性的ServiceClientFactory對象。
    • 使用其建構子並傳遞ServiceClientFactory對象,建立SignatureServiceClient對象。
  3. 取得新增簽名欄位的PDF檔案

    • 建立java.io.FileInputStream物件,此物件代表PDF檔案,並使用其建構函式並傳遞指定PDF檔案位置的字串值,將簽名欄位新增至該PDF檔案。
    • 使用其建構子並傳遞java.io.FileInputStream對象,建立com.adobe.idp.Document對象。
  4. 新增簽名欄位

    • 使用PositionRectangle物件的建構函式,建立指定簽名欄位位置的物件。 在建構函式中,指定坐標值。

    • 如果需要,請建立FieldMDPOptions對象,該對象指定將數字簽名應用於簽名欄位時鎖定的欄位。

    • 叫用SignatureServiceClient物件的addSignatureField方法並傳遞下列值,將簽名欄位新增至PDF檔案:

      • A com.adobe.idp. Document 物件,代表新增簽名欄位的PDF檔案。
      • 指定簽名欄位名稱的字串值。
      • java.lang.Integer值,代表新增簽名欄位的頁碼。
      • PositionRectangle物件,指定簽名欄位的位置。
      • FieldMDPOptions物件,指定在數位簽章套用至簽名欄位後鎖定的PDF檔案欄位。 此參數值是可選的,您可以傳遞null
    • PDFSeedValueOptions物件,指定各種執行時間值。 此參數值是可選的,您可以傳遞null

      addSignatureField方法返回com.adobe.idpDocument 物件,代表包含簽名欄位的PDF檔案。

    注意

    您可以叫用SignatureServiceClient物件的addInvisibleSignatureField方法,以新增不可見的簽名欄位。

  5. 將PDF檔案儲存為PDF檔案

    • 建立java.io.File物件,並確定副檔名為。pdf。
    • 叫用com.adobe.idpDocument 物件的方 copyToFile 法,將物件的內容復 Document 制至檔案。請確定您使用com.adobe.idpDocument 由方法返回的對 addSignatureField 像。

另請參閱

簽章服務API快速入門

使用web service API新增簽名欄位

若要使用簽名API(web service)新增簽名欄位:

  1. 包含專案檔案

    建立使用MTOM的Microsoft .NET專案。 請確定您使用下列WSDL定義:http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1

    注意

    localhost取代為代管AEM Forms的伺服器的IP位址。

  2. 建立簽名用戶端

    • 使用其預設建構子建立SignatureServiceClient對象。

    • 使用System.ServiceModel.EndpointAddress建構函式建立SignatureServiceClient.Endpoint.Address物件。 將指定WSDL的字串值傳遞給AEM Forms服務(例如http://localhost:8080/soap/services/SignatureService?WSDL)。 您不需要使用lc_version屬性。 建立服務參考時,將使用此屬性。)

    • 獲取SignatureServiceClient.Endpoint.Binding欄位的值,建立System.ServiceModel.BasicHttpBinding對象。 將返回值轉換為BasicHttpBinding

    • System.ServiceModel.BasicHttpBinding物件的MessageEncoding欄位設為WSMessageEncoding.Mtom。 此值可確保使用MTOM。

    • 執行下列工作以啟用基本HTTP驗證:

      • 將表AEM單用戶名分配給欄位SignatureServiceClient.ClientCredentials.UserName.UserName
      • 將相應的口令值分配給欄位SignatureServiceClient.ClientCredentials.UserName.Password
      • 將常數值HttpClientCredentialType.Basic分配給欄位BasicHttpBindingSecurity.Transport.ClientCredentialType
      • 將常數值BasicHttpSecurityMode.TransportCredentialOnly分配給欄位BasicHttpBindingSecurity.Security.Mode
  3. 取得新增簽名欄位的PDF檔案

    • 使用其建構子建立BLOB對象。 BLOB物件用來儲存包含簽名欄位的PDF檔案。
    • 通過調用其建構子並傳遞一個字串值來建立System.IO.FileStream對象,該字串值表示PDF文檔的檔案位置以及開啟檔案的模式。
    • 建立儲存System.IO.FileStream對象內容的位元組陣列。 您可以取得System.IO.FileStream物件的Length屬性,以判斷位元組陣列的大小。
    • 調用System.IO.FileStream物件的Read方法,並傳遞要讀取的位元組陣列、開始位置和串流長度,以串流資料填入位元組陣列。
    • 通過為MTOM對象的屬性指定位元組陣列的內容來填充BLOB對象。
  4. 新增簽名欄位

    叫用SignatureServiceClient物件的addSignatureField方法並傳遞下列值,將簽名欄位新增至PDF檔案:

    • BLOB物件,代表新增簽名欄位的PDF檔案。
    • 指定簽名欄位名稱的字串值。
    • 一個整數值,它表示要向其添加簽名欄位的頁碼。
    • PositionRect物件,指定簽名欄位的位置。
    • FieldMDPOptions物件,指定在數位簽章套用至簽名欄位後鎖定的PDF檔案欄位。 此參數值是可選的,您可以傳遞null
    • PDFSeedValueOptions物件,指定各種執行時間值。 此參數值是可選的,您可以傳遞null

    addSignatureField方法返回一個BLOB對象,該對象表示包含簽名欄位的PDF文檔。

  5. 將PDF檔案儲存為PDF檔案

    • 通過調用其建構子並傳遞一個字串值來建立System.IO.FileStream對象,該字串值表示將包含簽名欄位的PDF文檔的檔案位置以及開啟檔案的模式。
    • 建立一個位元組陣列,用於儲存addSignatureField方法返回的BLOB對象的內容。 獲取BLOB對象binaryData資料成員的值,以填充位元組陣列。
    • 調用System.IO.BinaryWriter對象的建構子並傳遞System.IO.FileStream對象,以建立對象。
    • 調用System.IO.BinaryWriter物件的Write方法並傳遞位元組陣列,將位元組陣列的內容寫入PDF檔案。

另請參閱

使用MTOM叫用AEM Forms

使用SwaRef叫用AEM Forms

檢索簽名欄位名稱

您可以擷取位於要簽署或認證之PDF檔案中之所有簽名欄位的名稱。 如果您不確定PDF檔案中的簽名欄位名稱,或想要驗證名稱,則可以以程式設計方式擷取這些名稱。 簽名服務會傳回簽名欄位的完全限定名稱,例如form1[0].grantApplication[0].page1[0].SignatureField1[0]

注意

如需簽名服務的詳細資訊,請參閱AEM Forms的服務參考

步驟摘要

要檢索簽名欄位名稱,請執行以下任務:

  1. 包含專案檔案。
  2. 建立簽名用戶端。
  3. 取得包含簽名欄位的PDF檔案。
  4. 擷取簽名欄位名稱。

包含專案檔案

將必要的檔案加入您的開發專案中。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用web services,請確定您包含proxy檔案。

必須將以下JAR檔案添加到項目的類路徑中:

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-utilities.jar(如果AEM Forms部署在JBoss上,則為必要)
  • jbossall-client.jar(如果AEM Forms部署在JBoss上,則為必需)

有關這些JAR檔案位置的資訊,請參見包括AEM FormsJava庫檔案

建立簽名用戶端

您必須先建立簽名服務用戶端,才能以程式設計方式執行簽名服務作業。

取得包含簽名欄位的PDF檔案

擷取包含簽名欄位的PDF檔案。

擷取簽名欄位名稱

在擷取包含一或多個簽名欄位的PDF檔案後,可以擷取簽名欄位名稱。

另請參閱

使用Java API擷取簽名欄位名稱

使用web service API擷取簽名欄位

包含AEM FormsJava庫檔案

設定連接屬性

新增簽名欄位

使用Java API擷取簽名欄位名稱

使用簽名API(Java)擷取簽名欄位名稱:

  1. 包含專案檔案

    在Java專案的類路徑中包含用戶端JAR檔案,例如adobe-signatures-client.jar。

  2. 建立簽名用戶端

    • 建立包含連接屬性的ServiceClientFactory對象。
    • 使用其建構子並傳遞ServiceClientFactory對象,建立SignatureServiceClient對象。
  3. 取得包含簽名欄位的PDF檔案

    • 使用PDF檔案的建構函式並傳遞指定PDF檔案位置的字串值,以建立java.io.FileInputStream物件來表示包含簽名欄位的PDF檔案。
    • 使用其建構子並傳遞java.io.FileInputStream對象,建立com.adobe.idp.Document對象。
  4. 擷取簽名欄位名稱

    • 叫用SignatureServiceClient物件的getSignatureFieldList方法並傳遞包含簽名欄位之PDF檔案的com.adobe.idp.Document物件,以擷取簽名欄位名稱。 此方法返回java.util.List對象,其中每個元素都包含PDFSignatureField對象。 使用此對象,您可以獲取有關簽名欄位的其他資訊,如簽名欄位是否可見。
    • 重複java.util.List物件,以判斷是否有簽名欄位名稱。 對於PDF文檔中的每個簽名欄位,您可以獲取單獨的PDFSignatureField對象。 若要取得簽名欄位的名稱,請叫用PDFSignatureField物件的getName方法。 此方法傳回指定簽名欄位名稱的字串值。

另請參閱

檢索簽名欄位名稱

快速入門(SOAP模式):使用Java API檢索簽名欄位名稱

包含AEM FormsJava庫檔案

設定連接屬性

使用web service API擷取簽名欄位

使用簽名API(web service)擷取簽名欄位名稱:

  1. 包含專案檔案

    建立使用MTOM的Microsoft .NET專案。 請確定您使用下列WSDL定義:http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1

    注意

    localhost取代為代管AEM Forms的伺服器的IP位址。

  2. 建立簽名用戶端

    • 使用其預設建構子建立SignatureServiceClient對象。

    • 使用System.ServiceModel.EndpointAddress建構函式建立SignatureServiceClient.Endpoint.Address物件。 將指定WSDL的字串值傳遞給AEM Forms服務(例如http://localhost:8080/soap/services/SignatureService?WSDL)。 您不需要使用lc_version屬性。 建立服務參考時,將使用此屬性。)

    • 獲取SignatureServiceClient.Endpoint.Binding欄位的值,建立System.ServiceModel.BasicHttpBinding對象。 將返回值轉換為BasicHttpBinding

    • System.ServiceModel.BasicHttpBinding物件的MessageEncoding欄位設為WSMessageEncoding.Mtom。 此值可確保使用MTOM。

    • 執行下列工作以啟用基本HTTP驗證:

      • 將表AEM單用戶名分配給欄位SignatureServiceClient.ClientCredentials.UserName.UserName
      • 將相應的口令值分配給欄位SignatureServiceClient.ClientCredentials.UserName.Password
      • 將常數值HttpClientCredentialType.Basic分配給欄位BasicHttpBindingSecurity.Transport.ClientCredentialType
      • 將常數值BasicHttpSecurityMode.TransportCredentialOnly分配給欄位BasicHttpBindingSecurity.Security.Mode
  3. 取得包含簽名欄位的PDF檔案

    • 使用其建構子建立BLOB對象。 BLOB物件用來儲存包含簽名欄位的PDF檔案。
    • 通過調用其建構子並傳遞一個字串值來建立System.IO.FileStream對象,該字串值表示PDF文檔的檔案位置以及開啟檔案的模式。
    • 建立儲存System.IO.FileStream對象內容的位元組陣列。 您可以取得System.IO.FileStream物件的Length屬性,以判斷位元組陣列的大小。
    • 調用System.IO.FileStream物件的Read方法,並傳遞要讀取的位元組陣列、開始位置和串流長度,以串流資料填入位元組陣列。
    • 通過為MTOM對象的欄位分配位元組陣列內容,填充BLOB對象。
  4. 擷取簽名欄位名稱

    • 叫用SignatureServiceClient物件的getSignatureFieldList方法並傳遞BLOB物件(該物件包含包含簽名欄位的PDF檔案),以擷取簽名欄位名稱。 此方法返回MyArrayOfPDFSignatureField集合對象,其中每個元素都包含PDFSignatureField對象。
    • 重複MyArrayOfPDFSignatureField物件,以判斷是否有簽名欄位名稱。 對於PDF文檔中的每個簽名欄位,您可以獲取PDFSignatureField對象。 若要取得簽名欄位的名稱,請叫用PDFSignatureField物件的getName方法。 此方法傳回指定簽名欄位名稱的字串值。

另請參閱

檢索簽名欄位名稱

使用MTOM叫用AEM Forms

使用SwaRef叫用AEM Forms

修改簽名欄位

您可以使用Java API和web service API修改PDF檔案中的簽名欄位。 修改簽名欄位涉及操作其簽名欄位鎖定字典值或種子值字典值。

欄位鎖定字典​指定簽名欄位簽名時鎖定的欄位清單。 鎖定的欄位可防止使用者變更欄位。 種子值字典​包含在應用簽名時使用的約束資訊。 例如,您可以變更權限,以控制發生動作,而不會使簽名無效。

修改現有的簽名欄位,您就可以變更PDF檔案,以反映不斷變更的業務需求。 例如,新業務要求可能要求在簽署檔案後鎖定所有檔案欄位。

本節說明如何通過修改欄位鎖定字典和種子值字典值來修改簽名欄位。 對簽名欄位鎖定字典所做的變更,會在簽名欄位時鎖定PDF檔案中的所有欄位。 對種子值字典所做的更改禁止對文檔進行特定類型的更改。

注意

有關簽名服務和修改簽名欄位的詳細資訊,請參閱AEM Forms的服務參考

步驟摘要

要修改PDF文檔中的簽名欄位,請執行以下任務:

  1. 包含專案檔案。
  2. 建立簽名用戶端。
  3. 取得包含要修改之簽名欄位的PDF檔案。
  4. 設定字典值。
  5. 修改簽名欄位。
  6. 將PDF檔案儲存為PDF檔案。

包含專案檔案

在您的開發專案中加入必要的檔案。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用web services,請確定您包含proxy檔案。

必須將以下JAR檔案添加到項目的類路徑中:

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-utilities.jar(如果AEM Forms部署在JBoss上,則為必要)
  • jbossall-client.jar(如果AEM Forms部署在JBoss上,則為必需)

有關這些JAR檔案位置的資訊,請參見包括LiveCycleJava庫檔案

建立簽名用戶端

您必須先建立簽名服務用戶端,才能以程式設計方式執行簽名服務作業。

取得包含要修改之簽名欄位的PDF檔案

擷取包含要修改之簽名欄位的PDF檔案。

設定字典值

要修改簽名欄位,請為其欄位鎖定字典或種子值字典指定值。 指定簽名欄位鎖定字典值涉及指定簽名欄位時鎖定的PDF文檔欄位。 (本節討論如何鎖定所有欄位。)

可以設定以下種子值字典值:

  • 修訂檢查:指定在將簽名應用到簽名欄位時是否執行撤銷檢查。

  • 憑證選項:為證書種子值字典指定值。在指定憑證選項之前,建議您熟悉憑證種子值字典。 (請參閱PDF參考。)

  • 摘要選項:指派用於簽署的摘要演算法。有效值為SHA1、SHA256、SHA384、SHA512和RIPEMD160。

  • 篩選:指定與簽名欄位一起使用的篩選器。例如,您可以使用Adobe.PPKLite篩選器。 (請參閱PDF參考。)

  • 標籤選項:指定與此簽名欄位關聯的標籤值。值1表示簽署者只能使用指定的值來輸入項目。 值0表示允許其他值。 以下是位元位置:

    • 1(篩選器): 用於簽署簽名欄位的簽名處理常式
    • 2(SubFilter): 表示簽署時使用之可接受編碼的名稱陣列
    • 3(V):用於簽署簽名欄位之簽名處理常式的最低必要版本號碼
    • 4(原因):指 定簽署檔案之可能原因的字串陣列
    • 5(PDFLegalWarnings):指 定可能的法律證明的字串陣列
  • 法律證明:當檔案獲得認證時,會自動掃描特定類型的內容,這些內容可能會使檔案的可見內容模糊或產生誤導。例如,註解可以遮蔽對瞭解認證內容很重要的文字。 掃描過程生成指示存在此類內容的警告。 此外,也會針對可能產生警告的內容提供其他說明。

  • 權限:指定可在PDF檔案上使用而不會使簽名無效的權限。

  • 原因:指定必須簽署此檔案的原因。

  • 時間戳:指定時間戳記選項。例如,您可以設定所使用之時間戳記伺服器的URL。

  • 版本:指定用於簽署簽名欄位的簽名處理程式的最小版本號。

修改簽名欄位

在您建立簽名服務用戶端後,請擷取包含要修改之簽名欄位的PDF檔案,並設定字典值,您可以指示簽名服務修改簽名欄位。 然後,簽名服務會傳回包含已修改簽名欄位的PDF檔案。 原始PDF檔案不受影響。

將PDF檔案儲存為PDF檔案

將包含已修改簽名欄位的PDF檔案儲存為PDF檔案,讓使用者可以在Acrobat或Adobe Reader開啟它。

另請參閱

包含AEM FormsJava庫檔案

設定連接屬性

簽章服務API快速入門

數位簽署PDF檔案

使用Java API修改簽名欄位

使用簽名API(Java)修改簽名欄位:

  1. 包含專案檔案

    在Java專案的類別路徑中包含用戶端JAR檔案,例如adobe-signatures-client.jar。

  2. 建立簽名用戶端

    • 建立包含連接屬性的ServiceClientFactory對象。
    • 使用其建構子並傳遞ServiceClientFactory對象,建立SignatureServiceClient對象。
  3. 取得包含要修改之簽名欄位的PDF檔案

    • 建立java.io.FileInputStream對象,該對象表示要修改的PDF文檔,方法是使用其建構子並傳遞指定PDF文檔位置的字串值。
    • 使用其建構子並傳遞java.io.FileInputStream對象,建立com.adobe.idp.Document對象。
  4. 設定字典值

    • 使用其建構子建立PDFSignatureFieldProperties對象。 PDFSignatureFieldProperties對象儲存簽名欄位鎖定字典和種子值字典資訊。
    • 使用其建構子建立PDFSeedValueOptionSpec對象。 此物件可讓您設定種子值字典值。
    • 叫用PDFSeedValueOptionSpec物件的setMdpValue方法並傳遞MDPPermissions.NoChanges列舉值,以禁止變更PDF檔案。
    • 使用其建構子建立FieldMDPOptionSpec對象。 此物件可讓您設定簽名欄位鎖定字典值。
    • 叫用FieldMDPOptionSpec物件的setMdpValue方法並傳遞FieldMDPAction.ALL列舉值,以鎖定PDF檔案中的所有欄位。
    • 調用PDFSignatureFieldProperties物件的setSeedValue方法並傳遞PDFSeedValueOptionSpec物件,以設定種子值字典資訊。
    • 調用PDFSignatureFieldProperties物件的setFieldMDP方法並傳遞FieldMDPOptionSpec物件,以設定簽名欄位鎖定字典資訊。
    注意

    要查看您可以設定的所有種子值字典值,請參閱PDFSeedValueOptionSpec類參考。 (請參閱AEM FormsAPI參考)。

  5. 修改簽名欄位

    調用SignatureServiceClient物件的modifySignatureField方法並傳遞下列值,以修改簽名欄位:

    • com.adobe.idp.Document物件,它儲存包含要修改之簽名欄位的PDF檔案
    • 指定簽名欄位名稱的字串值
    • 儲存簽名欄位鎖定字典和種子值字典資訊的PDFSignatureFieldProperties對象

    modifySignatureField方法返回一個com.adobe.idp.Document對象,該對象儲存包含已修改簽名欄位的PDF文檔。

  6. 將PDF檔案儲存為PDF檔案

    • 建立java.io.File物件,並確定副檔名為。pdf。
    • 調用com.adobe.idp.Document物件的copyToFile方法,將com.adobe.idp.Document物件的內容複製至檔案。 請確定您使用modifySignatureField方法傳回的com.adobe.idp.Document物件。

使用web service API修改簽名欄位

使用簽名API(web service)修改簽名欄位:

  1. 包含專案檔案

    建立使用MTOM的Microsoft .NET專案。 請確定您使用下列WSDL定義:http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1

    注意

    localhost取代為代管AEM Forms的伺服器的IP位址。

  2. 建立簽名用戶端

    • 使用其預設建構子建立SignatureServiceClient對象。

    • 使用System.ServiceModel.EndpointAddress建構函式建立SignatureServiceClient.Endpoint.Address物件。 將指定WSDL的字串值傳遞給AEM Forms服務(例如http://localhost:8080/soap/services/SignatureService?WSDL)。 您不需要使用lc_version屬性。 建立服務參考時,將使用此屬性。)

    • 獲取SignatureServiceClient.Endpoint.Binding欄位的值,建立System.ServiceModel.BasicHttpBinding對象。 將返回值轉換為BasicHttpBinding

    • System.ServiceModel.BasicHttpBinding物件的MessageEncoding欄位設為WSMessageEncoding.Mtom。 此值可確保使用MTOM。

    • 執行下列工作以啟用基本HTTP驗證:

      • 將表AEM單用戶名分配給欄位SignatureServiceClient.ClientCredentials.UserName.UserName
      • 將相應的口令值分配給欄位SignatureServiceClient.ClientCredentials.UserName.Password
      • 將常數值HttpClientCredentialType.Basic分配給欄位BasicHttpBindingSecurity.Transport.ClientCredentialType
      • 將常數值BasicHttpSecurityMode.TransportCredentialOnly分配給欄位BasicHttpBindingSecurity.Security.Mode
  3. 取得包含要修改之簽名欄位的PDF檔案

    • 使用其建構子建立BLOB對象。 BLOB物件用來儲存包含要修改之簽名欄位的PDF檔案。
    • 通過調用其建構子並傳遞一個字串值來建立System.IO.FileStream對象,該字串值表示PDF文檔的檔案位置以及開啟檔案的模式。
    • 建立儲存System.IO.FileStream對象內容的位元組陣列。 您可以取得System.IO.FileStream物件的Length屬性,以判斷位元組陣列的大小。
    • 調用System.IO.FileStream物件的Read方法,並傳遞要讀取的位元組陣列、開始位置和串流長度,以串流資料填入位元組陣列。
    • 通過為MTOM屬性指定位元組陣列的內容來填充BLOB對象。
  4. 設定字典值

    • 使用其建構子建立PDFSignatureFieldProperties對象。 該對象儲存簽名欄位鎖定字典和種子值字典資訊。
    • 使用其建構子建立PDFSeedValueOptionSpec對象。 此物件可讓您設定種子值字典值。
    • MDPPermissions.NoChanges列舉值指派給PDFSeedValueOptionSpec物件的mdpValue資料成員,以禁止變更PDF檔案。
    • 使用其建構子建立FieldMDPOptionSpec對象。 此物件可讓您設定簽名欄位鎖定字典值。
    • FieldMDPAction.ALL列舉值指派給FieldMDPOptionSpec物件的mdpValue資料成員,以鎖定PDF檔案中的所有欄位。
    • PDFSeedValueOptionSpec物件指派給PDFSignatureFieldProperties物件的seedValue資料成員,以設定種子值字典資訊。
    • FieldMDPOptionSpec物件指派給PDFSignatureFieldProperties物件的fieldMDP資料成員,以設定簽名欄位鎖定字典資訊。
    注意

    要查看您可以設定的所有種子值字典值,請參閱PDFSeedValueOptionSpec類參考。 (請參閱AEM FormsAPI參考)。

  5. 修改簽名欄位

    調用SignatureServiceClient物件的modifySignatureField方法並傳遞下列值,以修改簽名欄位:

    • BLOB物件,它儲存包含要修改之簽名欄位的PDF檔案
    • 指定簽名欄位名稱的字串值
    • 儲存簽名欄位鎖定字典和種子值字典資訊的PDFSignatureFieldProperties對象

    modifySignatureField方法返回一個BLOB對象,該對象儲存包含已修改簽名欄位的PDF文檔。

  6. 將PDF檔案儲存為PDF檔案

    • 通過調用其建構子並傳遞一個字串值來建立System.IO.FileStream對象,該字串值表示將包含簽名欄位的PDF文檔的檔案位置以及開啟檔案的模式。
    • 建立一個位元組陣列,用於儲存addSignatureField方法返回的BLOB對象的內容。 獲取BLOB對象MTOM資料成員的值,以填充位元組陣列。
    • 調用System.IO.BinaryWriter對象的建構子並傳遞System.IO.FileStream對象,以建立對象。
    • 調用System.IO.BinaryWriter物件的Write方法並傳遞位元組陣列,將位元組陣列的內容寫入PDF檔案。

另請參閱

使用MTOM叫用AEM Forms

使用SwaRef叫用AEM Forms

數位簽署PDF檔案

數位簽章可套用至PDF檔案,以提供更高的安全性。 數位簽章(如手寫簽章)提供簽署者識別自己並對檔案進行陳述的方式。 以數位方式簽署檔案的技術有助於確保簽署者和收件者都清楚已簽署的內容,並確信檔案自簽署後未變更。

PDF檔案是透過公開金鑰技術簽署。 簽章者有兩個密鑰:公鑰和私鑰。 私密金鑰會儲存在使用者的憑證中,當簽署時,該憑證必須可供使用。 公開金鑰會儲存在使用者的憑證中,而收件者必須能使用此憑證來驗證簽名。 有關已撤銷證書的資訊可在證書撤銷清單(CRL)和由證書頒發機構(CA)分發的線上證書狀態協定(OCSP)響應中找到。 簽署時間可從稱為時間戳記授權機構的受信任來源取得。

注意

您必須先確定將憑證新增至AEM Forms,才能數位簽署PDF檔案。 憑證是使用管理控制台或使用信任管理器API以程式設計方式新增。 (請參閱使用Trust Manager API匯入認證。)

您可以以程式設計方式數位簽署PDF檔案。 在數位簽署PDF檔案時,您必須參考存在於AEM Forms的安全憑證。 憑證是用於簽署的私密金鑰。

簽署PDF檔案時,簽名服務會執行下列步驟:

  1. 簽名服務通過傳遞請求中指定的別名從Truststore檢索憑據。
  2. Truststore會搜尋指定的憑證。
  3. 憑證會傳回給簽章服務,並用來簽署檔案。 此憑證也會根據別名快取,以供日後請求使用。

如需有關處理安全憑證的詳細資訊,請參閱應用程式伺服器的安裝與部署AEM Forms指南。

注意

簽署和認證檔案之間有差異。 (請參閱認證PDF檔案。)

注意

並非所有PDF檔案都支援簽署。 如需簽名服務及數位簽署檔案的詳細資訊,請參閱AEM Forms服務參考

注意

簽章服務不支援將內嵌PDF資料的XDP檔案輸入至作業,例如認證檔案。 此動作會導致簽名服務拋出PDFOperationException。 若要解決此問題,請使用PDF公用程式服務將XDP檔案轉換為PDF檔案,然後將轉換的PDF檔案傳遞至簽名服務作業。 (請參閱使用PDF公用程式)。

nCypher nShield HSM憑證

當使用nCypher nShield HSM憑證來簽署或認證PDF檔案時,必須重新啟動部署在AEM Forms的J2EE應用程式伺服器,才能使用新憑證。 不過,您可以設定設定值,讓簽署或認證作業運作正常,而不需重新啟動J2EE應用程式伺服器。

您可以在cknfastrc檔案中新增下列組態值,該檔案位於/opt/nfast/cknfastrc(或c:\nfast\cknfastrc):

 CKNFAST_ASSUME_SINGLE_PROCESS=0

將此配置值添加到cknfastrc檔案後,無需重新啟動J2EE應用程式伺服器即可使用新憑據。

不信任簽名

在認證和簽署相同PDF檔案時,如果不信任認證簽名,在Acrobat或Adobe Reader開啟PDF檔案時,第一個簽名會出現黃色三角形。 為避免這種情況,認證簽名必須受到信任。

簽署以XFA為基礎的表格檔案

如果您嘗試使用簽名服務API簽署以XFA為基礎的表單,則位於Acrobat的View Signed Version中可能會遺失資料。 例如,請考慮下列工作流程:

  • 使用Designer建立的XDP檔案,可以合併包含簽名欄位的表單設計和包含表單資料的XML資料。 您使用Forms服務來產生互動式PDF檔案。
  • 您使用簽名服務API簽署PDF檔案。

步驟摘要

若要數位簽署PDF檔案,請執行下列工作:

  1. 包含專案檔案。
  2. 建立簽名服務用戶端。
  3. 取得要簽署的PDF檔案。
  4. 簽署PDF檔案。
  5. 將簽署的PDF檔案儲存為PDF檔案。

包含專案檔案

將必要的檔案加入您的開發專案中。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用web services,請確定您包含proxy檔案。

必須將以下JAR檔案添加到項目的類路徑中:

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-utilities.jar(如果AEM Forms部署在JBoss上,則為必要)
  • jbossall-client.jar(如果AEM Forms部署在JBoss上,則為必需)

建立簽名用戶端

您必須先建立簽名服務用戶端,才能以程式設計方式執行簽名服務作業。

取得PDF檔案以簽署

若要簽署PDF檔案,您必須取得包含簽名欄位的PDF檔案。 如果PDF檔案不包含簽名欄位,則無法簽署。 可使用設計工具或程式設計方式新增簽名欄位。

簽署PDF檔案

在簽署PDF檔案時,您可以設定簽章服務使用的執行時期選項。 您可以設定下列選項:

  • 外觀選項
  • 撤銷檢查
  • 時間戳記值

您可使用PDFSignatureAppearanceOptionSpec物件來設定外觀選項。 例如,您可以叫用PDFSignatureAppearanceOptionSpec物件的setShowDate方法並傳遞true,以顯示簽名中的日期。

您也可以指定是否執行撤銷檢查,以判斷用於數位簽署PDF檔案的憑證是否已被撤銷。 要執行撤銷檢查,您可以指定以下值之一:

  • NoCheck:請勿執行撤銷檢查。
  • BestEffort:請務必檢查是否撤銷鏈中的所有證書。如果檢查中發生任何問題,則假定撤銷有效。 如果發生任何失敗,請假定憑證未被撤銷。
  • CheckIfAvailable:如果 有撤銷資訊,請檢查是否撤銷鏈中的所有憑證。如果檢查中發生任何問題,則假定撤銷無效。 如果發生任何故障,請假定憑證已撤銷且無效。 (這是預設值。)
  • AlwaysCheck:檢查是否撤銷鏈中的所有證書。如果撤銷資訊未出現在任何憑證中,則假定撤銷無效。

要對證書執行撤銷檢查,可以使用CRLOptionSpec對象指定證書撤銷清單(CRL)伺服器的URL。 但是,如果您要執行撤銷檢查,而您未指定CRL伺服器的URL,則簽名服務會從憑證取得URL。

執行撤銷檢查時,您可以使用線上認證狀態通訊協定(OCSP)伺服器,而不是使用CRL伺服器。 通常在使用OCSP伺服器而非CRL伺服器時,會更快地執行撤銷檢查。 (請參閱https://tools.ietf.org/html/rfc2560的「Online Certificate Status Protocol」(聯機證書狀態協定)。

您可以使用「簽名應用程式與服務」來設定「簽名服務」使用的CRL和OCSP伺服器順序。 例如,如果OCSP伺服器是在「Adobe應用程式和服務」中首先設定的,則檢查OCSP伺服器,然後檢查CRL伺服器。 (請參閱AAC說明中的「使用信任商店管理憑證和認證」)。

如果您指定不執行撤銷檢查,則簽章服務不會檢查用來簽署或認證檔案的憑證是否已被撤銷。 即,忽略CRL和OCSP伺服器資訊。

注意

雖然CRL或OCSP伺服器可在憑證中指定,但您仍可使用CRLOptionSpecOCSPOptionSpec物件來覆寫憑證中指定的URL。 例如,若要覆寫CRL伺服器,您可以叫用CRLOptionSpec物件的setLocalURI方法。

時間戳記是指追蹤已簽署或已認證檔案修改時間的程式。 簽署檔案後,即使檔案擁有者也不應修改檔案。 時間戳記有助於強制簽署或認證檔案的有效性。 可以使用TSPOptionSpec對象設定時間戳選項。 例如,您可以指定時間戳記提供者(TSP)伺服器的URL。

注意

在Java和web服務中,通過各個部分和相應的快速啟動,使用撤銷檢查。 由於未指定CRL或OCSP伺服器資訊,因此伺服器資訊是從用於數位簽署PDF檔案的憑證中取得。

若要成功簽署PDF檔案,您可以指定包含數位簽名的簽名欄位的完全限定名稱,例如form1[0].#subform[1].SignatureField3[3]。 使用XFA表單欄位時,也可以使用簽名欄位的部分名稱:SignatureField3[3]

您也必須參考安全憑證才能數位簽署PDF檔案。 要引用安全憑據,請指定別名。 別名是對PKCS#12檔案(副檔名為。pfx)或硬體安全模組(HSM)中實際憑據的引用。 有關安全憑證的詳細資訊,請參閱應用程式伺服器的安裝與部署AEM Forms指南。

儲存已簽署的PDF檔案

在簽名服務數位簽署PDF檔案後,您可以將它儲存為PDF檔案,讓使用者在Acrobat或Adobe Reader開啟它。

另請參閱

使用Java API數位簽署PDF檔案

使用web service API數位簽署PDF檔案

包含AEM FormsJava庫檔案

設定連接屬性

新增簽名欄位

檢索簽名欄位名稱

使用Java API數位簽署PDF檔案

使用簽名API(Java)數位簽署PDF檔案:

  1. 包含專案檔案

    在Java專案的類路徑中包含用戶端JAR檔案,例如adobe-signatures-client.jar。

  2. 建立簽名用戶端

    • 建立包含連接屬性的ServiceClientFactory對象。
    • 使用其建構子並傳遞ServiceClientFactory對象,建立SignatureServiceClient對象。
  3. 取得PDF檔案以簽署

    • 使用PDF檔案的建構函式並傳遞指定PDF檔案位置的字串值,以建立代表PDF檔案的java.io.FileInputStream物件來進行數位簽署。
    • 使用其建構子並傳遞java.io.FileInputStream對象,建立com.adobe.idp.Document對象。
  4. 簽署PDF檔案

    叫用SignatureServiceClient物件的sign方法並傳遞下列值,以簽署PDF檔案:

    • com.adobe.idp.Document物件,代表要簽署的PDF檔案。
    • 一個字串值,代表將包含數位簽名之簽名欄位的名稱。
    • Credential物件,代表用於數位簽署PDF檔案的憑證。 通過調用Credential對象的靜態getInstance方法並傳遞一個字串值來建立Credential對象,該字串值指定與安全憑據對應的別名值。
    • HashAlgorithm物件,指定代表雜湊演算法的靜態資料成員,用於摘要PDF檔案。 例如,您可以指定HashAlgorithm.SHA1來使用SHA1演算法。
    • 一個字串值,代表PDF檔案數位簽章的原因。
    • 代表簽署者聯絡資訊的字串值。
    • 控制數位簽名外觀的PDFSignatureAppearanceOptions物件。 例如,您可使用此物件將自訂標誌新增至數位簽名。
    • java.lang.Boolean物件,指定是否對簽署者的憑證執行撤銷檢查。
    • OCSPOptionSpec物件,儲存線上憑證狀態通訊協定(OCSP)支援的偏好設定。 如果未完成撤銷檢查,則不使用此參數,您可以指定null
    • CRLPreferences物件,可儲存憑證撤銷清單(CRL)偏好設定。 如果未完成撤銷檢查,則不使用此參數,您可以指定null
    • TSPPreferences物件,可儲存時間戳記提供者(TSP)支援的偏好設定。 此參數為可選參數,可以是null。 如需詳細資訊,請參閱AEM FormsAPI參考

    sign方法會傳回代表已簽署PDF檔案的com.adobe.idp.Document物件。

  5. 儲存已簽署的PDF檔案

    • 建立java.io.File物件,並確定副檔名為。pdf。
    • 調用com.adobe.idp.Document物件的copyToFile方法並傳遞java.io.File,將Document物件的內容複製至檔案。 請確定您使用sign方法傳回的com.adobe.idp.Document物件。

另請參閱

數位簽署PDF檔案

快速入門(SOAP模式):使用Java API數位簽署PDF檔案

包含AEM FormsJava庫檔案

設定連接屬性

使用web service API數位簽署PDF檔案

若要使用簽名API(web service)數位簽署PDF檔案:

  1. 包含專案檔案

    建立使用MTOM的Microsoft .NET專案。 請確定您使用下列WSDL定義:http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1

    注意

    localhost取代為代管AEM Forms的伺服器的IP位址。

  2. 建立簽名用戶端

    • 使用其預設建構子建立SignatureServiceClient對象。

    • 使用System.ServiceModel.EndpointAddress建構函式建立SignatureServiceClient.Endpoint.Address物件。 將指定WSDL的字串值傳遞給AEM Forms服務(例如http://localhost:8080/soap/services/SignatureService?WSDL)。 您不需要使用lc_version屬性。 建立服務參考時,將使用此屬性。)

    • 獲取SignatureServiceClient.Endpoint.Binding欄位的值,建立System.ServiceModel.BasicHttpBinding對象。 將返回值轉換為BasicHttpBinding

    • System.ServiceModel.BasicHttpBinding物件的MessageEncoding欄位設為WSMessageEncoding.Mtom。 此值可確保使用MTOM。

    • 執行下列工作以啟用基本HTTP驗證:

      • 將表AEM單用戶名分配給欄位SignatureServiceClient.ClientCredentials.UserName.UserName
      • 將相應的口令值分配給欄位SignatureServiceClient.ClientCredentials.UserName.Password
      • 將常數值HttpClientCredentialType.Basic分配給欄位BasicHttpBindingSecurity.Transport.ClientCredentialType
      • 將常數值BasicHttpSecurityMode.TransportCredentialOnly分配給欄位BasicHttpBindingSecurity.Security.Mode
  3. 取得PDF檔案以簽署

    • 使用其建構子建立BLOB對象。 BLOB物件用來儲存已簽署的PDF檔案。
    • 通過調用其建構子並傳遞一個字串值來建立System.IO.FileStream對象,該字串值表示要簽名的PDF文檔的檔案位置以及開啟檔案的模式。
    • 建立儲存System.IO.FileStream對象內容的位元組陣列。 您可以取得System.IO.FileStream物件的Length屬性,以判斷位元組陣列的大小。
    • 調用System.IO.FileStream物件的Read方法,並傳遞要讀取的位元組陣列、開始位置和串流長度,以串流資料填入位元組陣列。
    • 通過為MTOM屬性指定位元組陣列的內容來填充BLOB對象。
  4. 簽署PDF檔案

    叫用SignatureServiceClient物件的sign方法並傳遞下列值,以簽署PDF檔案:

    • BLOB物件,代表要簽署的PDF檔案。
    • 一個字串值,代表將包含數位簽名之簽名欄位的名稱。
    • Credential物件,代表用於數位簽署PDF檔案的憑證。 使用其建構函式建立Credential物件,並透過為Credential物件的alias屬性指派值來指定別名。
    • HashAlgorithm物件,指定代表雜湊演算法的靜態資料成員,用於摘要PDF檔案。 例如,您可以指定HashAlgorithm.SHA1來使用SHA1演算法。
    • 一個布爾值,它指定是否使用散列算法。
    • 一個字串值,代表PDF檔案數位簽章的原因。
    • 代表簽署者位置的字串值。
    • 代表簽署者聯絡資訊的字串值。
    • 控制數位簽名外觀的PDFSignatureAppearanceOptions物件。 例如,您可使用此物件將自訂標誌新增至數位簽名。
    • System.Boolean物件,指定是否對簽署者的憑證執行撤銷檢查。 如果完成此撤銷檢查,則會將其嵌入簽名中。 預設值為false
    • OCSPOptionSpec物件,儲存線上憑證狀態通訊協定(OCSP)支援的偏好設定。 如果未完成撤銷檢查,則不使用此參數,您可以指定null。 有關此對象的資訊,請參見AEM FormsAPI參考
    • CRLPreferences物件,可儲存憑證撤銷清單(CRL)偏好設定。 如果未完成撤銷檢查,則不使用此參數,您可以指定null
    • TSPPreferences物件,可儲存時間戳記提供者(TSP)支援的偏好設定。 此參數為可選參數,可以是null

    sign方法會傳回代表已簽署PDF檔案的BLOB物件。

  5. 儲存已簽署的PDF檔案

    • 通過調用System.IO.FileStream對象的建構子建立對象。 傳遞一個字串值,代表已簽署PDF檔案的檔案位置以及開啟檔案的模式。
    • 建立一個位元組陣列,用於儲存sign方法返回的BLOB對象的內容。 獲取BLOB對象MTOM資料成員的值,以填充位元組陣列。
    • 調用System.IO.BinaryWriter對象的建構子並傳遞System.IO.FileStream對象,以建立對象。
    • 調用System.IO.BinaryWriter物件的Write方法並傳遞位元組陣列,將位元組陣列的內容寫入PDF檔案。

另請參閱

數位簽署PDF檔案

使用MTOM叫用AEM Forms

使用SwaRef叫用AEM Forms

數位簽署互動式Forms

您可以簽署Forms服務所建立的互動式表單。 例如,請考慮下列工作流程:

  • 您可以合併使用設計工具建立的以XFA為基礎的PDF表單,以及使用Forms服務在XML檔案中的表單資料。 Forms伺服器將呈現互動式表單。
  • 您可使用簽名服務API簽署互動式表單。

結果是以數位簽章的互動式PDF表單。 簽署以XFA表單為基礎的PDF表單時,請確定您將PDF檔案儲存為Adobe靜態PDF表單。 如果您嘗試簽署儲存為Adobe動態PDF表單的PDF表單,就會發生例外。 由於您正在簽署從Forms服務傳回的表格,請確定表格包含簽名欄位。

注意

您必須先確保將憑證新增至AEM Forms,才能數位簽署互動式表單。 憑證是使用管理控制台或使用信任管理器API以程式設計方式新增。 (請參閱使用Trust Manager API匯入認證。)

使用Forms服務API時,將GenerateServerAppearance運行時選項設定為true。 此運行時選項可確保在Acrobat或Adobe Reader開啟時,伺服器上生成的表單的外觀仍然有效。 建議您在使用FormsAPI產生要簽署的互動式表單時,設定這個執行時期選項。

注意

在閱讀「數位簽署互動式Forms」之前,建議您熟悉簽署PDF檔案。 (請參閱數位簽署PDF檔案)。

步驟摘要

若要數位簽署Forms服務傳回的互動式表單,請執行下列工作:

  1. 包含專案檔案。
  2. 建立Forms與簽名客戶端。
  3. 使用Forms服務取得互動式表單。
  4. 簽署互動式表單。
  5. 將簽署的PDF檔案儲存為PDF檔案。

包含專案檔案

將必要的檔案加入您的開發專案中。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用web services,請確定您包含proxy檔案。

必須將以下JAR檔案添加到項目的類路徑中:

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-forms-client.jar
  • adobe-utilities.jar(如果AEM Forms部署在JBoss上,則為必要)
  • jbossall-client.jar(如果AEM Forms部署在JBoss上,則為必需)

有關這些JAR檔案位置的資訊,請參見包括AEM FormsJava庫檔案

建立Forms和簽名用戶端

由於此工作流程會叫用Forms和簽章服務,因此請同時建立Forms服務用戶端和簽章服務用戶端。

使用Forms服務取得互動式表單

您可以使用Forms服務取得互動式PDF表單進行簽署。 從AEM Forms開始,您可以將com.adobe.idp.Document物件傳遞至包含要呈現的表單的Forms服務。 此方法的名稱為renderPDFForm2。 此方法會傳回包含要簽署之表單的com.adobe.idp.Document物件。 您可以將此com.adobe.idp.Document實例傳遞至簽名服務。

同樣地,如果您使用web services,則可以將Forms服務返回的BLOB實例傳遞給簽名服務。

注意

與「數位簽署互動式Forms」區段關聯的快速入門會叫用renderPDFForm2方法。

簽署互動式表單

在簽署PDF檔案時,您可以設定簽章服務使用的執行時期選項。 您可以設定下列選項:

  • 外觀選項
  • 撤銷檢查
  • 時間戳記值

您可使用PDFSignatureAppearanceOptionSpec物件來設定外觀選項。 例如,您可以叫用PDFSignatureAppearanceOptionSpec物件的setShowDate方法並傳遞true,以顯示簽名中的日期。

儲存已簽署的PDF檔案

在簽名服務數位簽署PDF檔案後,您就可將它儲存為PDF檔案。 PDF檔案可在Acrobat或Adobe Reader開啟。

另請參閱

使用Java API數位簽署互動式表單

使用web service API數位簽署互動式表單

包含AEM FormsJava庫檔案

設定連接屬性

數位簽署PDF檔案

轉換互動式PDF forms

使用Java API數位簽署互動式表單

使用Forms和簽名API(Java)數位簽署互動式表單:

  1. 包含專案檔案

    在Java專案的類路徑中包含用戶端JAR檔案,例如adobe-signatures-client.jar和adobe-forms-client.jar。

  2. 建立Forms和簽名用戶端

    • 建立包含連接屬性的ServiceClientFactory對象。
    • 使用其建構子並傳遞ServiceClientFactory對象,建立SignatureServiceClient對象。
    • 使用其建構子並傳遞ServiceClientFactory對象,建立FormsServiceClient對象。
  3. 使用Forms服務取得互動式表單

    • 建立java.io.FileInputStream物件,以代表PDF檔案,並使用其建構函式傳遞至Forms服務。 傳遞指定PDF檔案位置的字串值。

    • 使用其建構子並傳遞java.io.FileInputStream對象,建立com.adobe.idp.Document對象。

    • 建立java.io.FileInputStream對象,該對象表示包含表單資料的XML文檔,並使用其建構子傳遞給Forms服務。 傳遞指定XML檔案位置的字串值。

    • 使用其建構子並傳遞java.io.FileInputStream對象,建立com.adobe.idp.Document對象。

    • 建立用於設定運行時選項的PDFFormRenderSpec對象。 叫用PDFFormRenderSpec物件的setGenerateServerAppearance方法並傳遞true

    • 叫用FormsServiceClient物件的renderPDFForm2方法並傳遞下列值:

      • com.adobe.idp.Document物件,其中包含要轉譯的PDF表格。
      • com.adobe.idp.Document物件,包含要與表單合併的資料。
      • 儲存運行時選項的PDFFormRenderSpec對象。
      • URLSpec物件,包含Forms服務所需的URI值。 您可以指定此參數值的null
      • 儲存檔案附件的java.util.HashMap對象。 此為可選參數,如果您不想將檔案附加到表單,可以指定null

      renderPDFForm2方法返回包含表單資料流的FormsResult對象

    • 叫用FormsResult物件的getOutputContent方法,擷取PDF表格。 此方法傳回代表互動式表單的com.adobe.idp.Document物件。

  4. 簽署互動式表單

    叫用SignatureServiceClient物件的sign方法並傳遞下列值,以簽署PDF檔案:

    • com.adobe.idp.Document物件,代表要簽署的PDF檔案。 確保此對象是從Forms服務獲取的com.adobe.idp.Document對象。
    • 一個字串值,代表已簽署的簽名欄位名稱。
    • Credential物件,代表用於數位簽署PDF檔案的憑證。 通過調用Credential對象的靜態getInstance方法建立Credential對象。 傳遞一個字串值,該字串值指定與安全憑據對應的別名值。
    • HashAlgorithm物件,指定代表雜湊演算法的靜態資料成員,用於摘要PDF檔案。 例如,您可以指定HashAlgorithm.SHA1來使用SHA1演算法。
    • 一個字串值,代表PDF檔案數位簽章的原因。
    • 代表簽署者聯絡資訊的字串值。
    • 控制數位簽名外觀的PDFSignatureAppearanceOptions物件。 例如,您可使用此物件將自訂標誌新增至數位簽名。
    • java.lang.Boolean物件,指定是否對簽署者的憑證執行撤銷檢查。
    • OCSPPreferences物件,儲存線上憑證狀態通訊協定(OCSP)支援的偏好設定。 如果未完成撤銷檢查,則不使用此參數,您可以指定null
    • CRLPreferences物件,可儲存憑證撤銷清單(CRL)偏好設定。 如果未完成撤銷檢查,則不使用此參數,您可以指定null
    • TSPPreferences物件,可儲存時間戳記提供者(TSP)支援的偏好設定。 此參數為可選參數,可以是null

    sign方法會傳回代表已簽署PDF檔案的com.adobe.idp.Document物件。

  5. 儲存已簽署的PDF檔案

    • 建立java.io.File物件,並確定副檔名為。pdf。
    • 調用com.adobe.idp.Document物件的copyToFile方法並傳遞java.io.File,將Document物件的內容複製至檔案。 請確定您使用sign方法傳回的com.adobe.idp.Document物件。

另請參閱

數位簽署互動式Forms

快速入門(SOAP模式):使用Java API數位簽署PDF檔案

包含AEM FormsJava庫檔案

設定連接屬性

使用web service API數位簽署互動式表單

使用Forms和簽名API(web service)數位簽署互動式表單:

  1. 包含專案檔案

    建立使用MTOM的Microsoft .NET專案。 由於此客戶端應用程式調用兩個AEM Forms服務,因此建立兩個服務引用。 對與簽名服務關聯的服務引用使用以下WSDL定義:http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1

    對與Forms服務關聯的服務引用使用以下WSDL定義:http://localhost:8080/soap/services/FormsService?WSDL&lc_version=9.0.1

    由於BLOB資料類型對於兩個服務引用都很常見,因此使用BLOB資料類型時可完全限定資料類型。 在相應的Web服務快速啟動中,所有BLOB實例都完全限定。

    注意

    localhost取代為代管AEM Forms的伺服器的IP位址。

  2. 建立Forms和簽名用戶端

    • 使用其預設建構子建立SignatureServiceClient對象。

    • 使用System.ServiceModel.EndpointAddress建構函式建立SignatureServiceClient.Endpoint.Address物件。 將指定WSDL的字串值傳遞給AEM Forms服務(例如http://localhost:8080/soap/services/SignatureService?WSDL)。 您不需要使用lc_version屬性。 建立服務參考時,將使用此屬性。)

    • 獲取SignatureServiceClient.Endpoint.Binding欄位的值,建立System.ServiceModel.BasicHttpBinding對象。 將返回值轉換為BasicHttpBinding

    • System.ServiceModel.BasicHttpBinding物件的MessageEncoding欄位設為WSMessageEncoding.Mtom。 此值可確保使用MTOM。

    • 執行下列工作以啟用基本HTTP驗證:

      • 將表AEM單用戶名分配給欄位SignatureServiceClient.ClientCredentials.UserName.UserName
      • 將相應的口令值分配給欄位SignatureServiceClient.ClientCredentials.UserName.Password
      • 將常數值HttpClientCredentialType.Basic分配給欄位BasicHttpBindingSecurity.Transport.ClientCredentialType
    • 將常數值BasicHttpSecurityMode.TransportCredentialOnly分配給欄位BasicHttpBindingSecurity.Security.Mode

    注意

    對Forms服務客戶端重複這些步驟。

  3. 使用Forms服務取得互動式表單

    • 使用其建構子建立BLOB對象。 BLOB物件用來儲存已簽署的PDF檔案。

    • 通過調用其建構子並傳遞一個字串值來建立System.IO.FileStream對象,該字串值表示要簽名的PDF文檔的檔案位置以及開啟檔案的模式。

    • 建立儲存System.IO.FileStream對象內容的位元組陣列。 您可以取得System.IO.FileStream物件的Length屬性,以判斷位元組陣列的大小。

    • 調用System.IO.FileStream物件的Read方法,並傳遞要讀取的位元組陣列、開始位置和串流長度,以串流資料填入位元組陣列。

    • 通過為MTOM屬性指定位元組陣列的內容來填充BLOB對象。

    • 使用其建構子建立BLOB對象。 BLOB物件用來儲存表單資料。

    • 通過調用System.IO.FileStream對象的建構子並傳遞一個字串值,該字串值表示包含表單資料的XML檔案的檔案位置,以及開啟檔案的模式。

    • 建立儲存System.IO.FileStream對象內容的位元組陣列。 您可以取得System.IO.FileStream物件的Length屬性,以判斷位元組陣列的大小。

    • 調用System.IO.FileStream物件的Read方法,並傳遞要讀取的位元組陣列、開始位置和串流長度,以串流資料填入位元組陣列。

    • 通過為MTOM屬性指定位元組陣列的內容來填充BLOB對象。

    • 建立用於設定運行時選項的PDFFormRenderSpec對象。 將值true指派至PDFFormRenderSpec物件的generateServerAppearance欄位。

    • 叫用FormsServiceClient物件的renderPDFForm2方法並傳遞下列值:

      • BLOB物件,其中包含要轉譯的PDF表格。
      • BLOB物件,包含要與表單合併的資料。
      • 儲存運行時選項的PDFFormRenderSpec對象。
      • URLSpec物件,包含Forms服務所需的URI值。 您可以指定此參數值的null
      • 儲存檔案附件的java.util.HashMap對象。 此為可選參數,如果您不想將檔案附加到表單,可以指定null
      • 用於儲存表單中頁數的長輸出參數。
      • 用於地區值的字串輸出參數。
      • FormResult值,此值是用於儲存互動式表單的輸出參數。
    • 叫用FormsResult物件的outputContent欄位,以重新建立PDF表格。 此欄位儲存代表互動式表單的BLOB對象。

  4. 簽署互動式表單

    叫用SignatureServiceClient物件的sign方法並傳遞下列值,以簽署PDF檔案:

    • BLOB物件,代表要簽署的PDF檔案。 使用Forms服務返回的BLOB實例。
    • 一個字串值,代表已簽署的簽名欄位名稱。
    • Credential物件,代表用於數位簽署PDF檔案的憑證。 使用其建構函式建立Credential物件,並透過為Credential物件的alias屬性指派值來指定別名。
    • HashAlgorithm物件,指定代表雜湊演算法的靜態資料成員,用於摘要PDF檔案。 例如,您可以指定HashAlgorithm.SHA1來使用SHA1演算法。
    • 一個布爾值,它指定是否使用散列算法。
    • 一個字串值,代表PDF檔案數位簽章的原因。
    • 代表簽署者位置的字串值。
    • 代表簽署者聯絡資訊的字串值。
    • 控制數位簽名外觀的PDFSignatureAppearanceOptions物件。 例如,您可使用此物件將自訂標誌新增至數位簽名。
    • System.Boolean物件,指定是否對簽署者的憑證執行撤銷檢查。 如果完成此撤銷檢查,則會將其嵌入簽名中。 預設值為false
    • OCSPPreferences物件,儲存線上憑證狀態通訊協定(OCSP)支援的偏好設定。 如果未完成撤銷檢查,則不使用此參數,您可以指定null。 有關此對象的資訊,請參見AEM FormsAPI參考
    • CRLPreferences物件,可儲存憑證撤銷清單(CRL)偏好設定。 如果未完成撤銷檢查,則不使用此參數,您可以指定null
    • TSPPreferences物件,可儲存時間戳記提供者(TSP)支援的偏好設定。 此參數為可選參數,可以是null

    sign方法會傳回代表已簽署PDF檔案的BLOB物件。

  5. 儲存已簽署的PDF檔案

    • 通過調用System.IO.FileStream對象的建構子建立對象。 傳遞一個字串值,代表已簽署PDF檔案的檔案位置以及開啟檔案的模式。
    • 建立一個位元組陣列,用於儲存sign方法返回的BLOB對象的內容。 獲取BLOB對象MTOM資料成員的值,以填充位元組陣列。
    • 調用System.IO.BinaryWriter對象的建構子並傳遞System.IO.FileStream對象,以建立對象。
    • 調用System.IO.BinaryWriter物件的Write方法並傳遞位元組陣列,將位元組陣列的內容寫入PDF檔案。

另請參閱

數位簽署互動式Forms

使用MTOM叫用AEM Forms

認證PDF檔案

您可以使用稱為認證簽名的特定簽名類型來認證PDF檔案,以保全PDF檔案。 認證簽名與數位簽名的區別在於:

  • 它必須是套用至PDF檔案的第一個簽名;也就是說,在套用認證簽名時,檔案中的任何其他簽名欄位都必須未簽署。 在PDF檔案中僅允許使用一個認證簽名。 如果您想要簽署和認證PDF檔案,您必須先取得認證,才能簽署。 在認證PDF檔案後,您可以數位簽署其他簽名欄位。
  • 文檔的作者或發起者可以指定文檔可以通過某些方式進行修改,而不使經認證的簽名失效。 例如,檔案可能允許填寫表單或加上註解。 如果作者指定不允許進行某些修改,Acrobat會限制用戶以這種方式修改文檔。 如果進行此類修改,例如使用其他應用程式,則認證的簽名無效,而Acrobat會在使用者開啟檔案時發出警告。 (使用未認證的簽名時,不會防止修改,而一般的編輯作業也不會使原始簽名無效。)
  • 在簽署時,會掃描檔案,以找出可能導致檔案內容模糊或誤導的特定內容類型。 例如,註解可能會遮蔽頁面上對瞭解所認證內容很重要的部分文字。 可以提供有關此類內容的說明(法律證明)。

您可以使用簽名服務Java API或簽名網站服務API,以程式設計方式認證PDF檔案。 認證PDF檔案時,您必須參考憑證服務中的安全憑證。 有關安全憑證的資訊,請參閱應用伺服器的​安裝和部署AEM Forms​指南。

注意

在認證和簽署相同的PDF檔案時,如果不信任認證簽名,當您在Acrobat或Adobe Reader開啟PDF檔案時,第一個簽名旁邊會出現一個黃色三角形。 必須信任認證簽名才能避免這種情況。

注意

當使用nCypher nShield HSM憑證來簽署或認證PDF檔案時,必須先重新啟動部署了AEM Forms的J2EE應用程式伺服器,才能使用新憑證。 不過,您可以設定設定值,讓簽署或認證作業運作正常,而不需重新啟動J2EE應用程式伺服器。

您可以在cknfastrc檔案中新增下列組態值,該檔案位於/opt/nfast/cknfastrc(或c:\nfast\cknfastrc):

             CKNFAST_ASSUME_SINGLE_PROCESS=0

將此配置值添加到cknfastrc檔案後,無需重新啟動J2EE應用程式伺服器即可使用新憑據。

注意

有關簽名服務和認證文檔的詳細資訊,請參閱AEM Forms服務參考

步驟摘要

若要認證PDF檔案,請執行下列工作:

  1. 包含專案檔案。
  2. 建立簽名用戶端。
  3. 取得PDF檔案以進行認證。
  4. 認證PDF檔案。
  5. 將認證的PDF檔案儲存為PDF檔案。

包含專案檔案

將必要的檔案加入您的開發專案中。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用web services,請確定您包含proxy檔案。

必須將以下JAR檔案添加到項目的類路徑中:

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-utilities.jar(如果AEM Forms部署在JBoss上,則為必要)
  • jbossall-client.jar(如果AEM Forms部署在JBoss上,則為必需)

有關這些JAR檔案位置的資訊,請參見包括AEM FormsJava庫檔案

建立簽名用戶端

您必須先建立「簽名」用戶端,才能以程式設計方式執行「簽名」操作。

取得PDF檔案以取得認證

若要認證PDF檔案,您必須取得包含簽名欄位的PDF檔案。 如果PDF檔案不包含簽名欄位,則無法取得認證。 可使用設計工具或程式設計方式新增簽名欄位。 有關以寫程式方式添加簽名欄位的資訊,請參閱添加簽名欄位

認證PDF檔案

若要成功認證PDF檔案,您需要下列由簽章服務用來認證PDF檔案的輸入值:

  • PDF檔案:包含簽名欄位的PDF文檔,該欄位是包含已認證簽名的圖形表示的表單欄位。PDF檔案必須先包含簽名欄位,才能取得認證。 可使用設計工具或程式設計方式新增簽名欄位。 (請參閱添加簽名欄位。)
  • 簽名欄位名稱:經認證的簽名欄位的全限定名稱。以下是一個示例:form1[0].#subform[1].SignatureField3[3]。 使用XFA表單欄位時,也可以使用簽名欄位的部分名稱:SignatureField3[3]。 如果為欄位名稱傳遞空值,則會動態建立並認證不可見的簽名欄位。
  • 安全憑證:用於認證PDF檔案的憑證。此安全憑證包含密碼和別名,這些密碼和別名必須與位於憑證服務中的憑證中顯示的別名相符。 別名是對PKCS#12檔案(副檔名為。pfx)或硬體安全模組(HSM)中實際憑據的引用。
  • 雜湊算法:用於摘要PDF檔案的雜湊演算法。
  • 簽署原因:顯示在Acrobat或Adobe Reader的值,讓其他使用者知道PDF檔案獲得認證的原因。
  • 簽署者的位置:憑證指定之簽署者的位置。
  • 聯絡資訊:簽署者的聯絡資訊,例如地址和電話號碼。
  • 權限資訊:控制一般使用者可在檔案上執行動作而不導致認證簽名無效的權限。例如,您可以設定權限,如此對PDF檔案所做的任何變更,都會導致認證的簽名無效。
  • 法律解釋:當檔案獲得認證時,會自動掃描特定類型的內容,這些內容可能會使檔案的內容模糊或產生誤導。例如,註解可能會遮蔽頁面上對瞭解所認證內容很重要的部分文字。 掃描過程生成關於這些類型內容的警告。 此值提供可能產生警告之內容的額外說明。
  • 外觀選項:控制認證簽名外觀的選項。例如,認證的簽名可顯示日期資訊。
  • 撤銷檢查:此值指定是否對簽署者的憑證執行撤銷檢查。預設的false設定表示不會執行撤銷檢查。
  • OCSP設定:線上認證狀態通訊協定(OCSP)支援的設定,提供用來認證PDF檔案之憑證狀態的相關資訊。例如,您可以指定伺服器的URL,以提供您用來登入PDF檔案之憑證的相關資訊。
  • CRL設定:完成撤銷檢查時,證書撤銷清單(CRL)首選項的設定。例如,您可以指定一律檢查憑證是否已撤銷。
  • 時間戳記:定義套用至認證簽名之時間戳記資訊的設定。時間戳表示特定資料在某個時間之前建立。 這項知識有助於在簽署者與驗證者之間建立信任關係。

將認證的PDF檔案儲存為PDF檔案

在簽章服務認證PDF檔案後,您可以將它儲存為PDF檔案,讓使用者在Acrobat或Adobe Reader開啟它。

另請參閱

使用Java API認證PDF檔案

使用web service API認證PDF檔案

包含AEM FormsJava庫檔案

設定連接屬性

新增簽名欄位

使用Java API認證PDF檔案

使用簽名API(Java)認證PDF檔案:

  1. 包含專案檔案

    在Java專案的類別路徑中包含用戶端JAR檔案,例如adobe-signatures-client.jar。

  2. 建立簽名用戶端

    • 建立包含連接屬性的ServiceClientFactory對象。
    • 使用其建構子並傳遞ServiceClientFactory對象,建立SignatureServiceClient對象。
  3. 取得PDF檔案以取得認證

    • 使用PDF檔案的建構函式並傳遞指定PDF檔案位置的字串值,建立代表PDF檔案的java.io.FileInputStream物件以進行認證。
    • 使用其建構子並傳遞java.io.FileInputStream對象,建立com.adobe.idp.Document對象。
  4. 認證PDF檔案

    叫用SignatureServiceClient物件的certify方法並傳遞下列值,以認證PDF檔案:

    • 代表要認證的PDF檔案的com.adobe.idp.Document物件。
    • 一個字串值,它表示將包含簽名的簽名欄位的名稱。
    • Credential物件,代表用來認證PDF檔案的憑證。 通過調用Credential對象的靜態getInstance方法並傳遞一個字串值來建立Credential對象,該字串值指定與安全憑據對應的別名值。
    • HashAlgorithm物件,指定代表用於摘要PDF檔案之雜湊演算法的靜態資料成員。 例如,您可以指定HashAlgorithm.SHA1來使用SHA1演算法。
    • 一個字串值,代表PDF檔案獲得認證的原因。
    • 代表簽署者聯絡資訊的字串值。
    • MDPPermissions物件,指定可在PDF檔案上執行使簽名無效的動作。
    • 控制已認證簽名外觀的PDFSignatureAppearanceOptions物件。 如果需要,請通過調用方法(如setShowDate)修改簽名的外觀。
    • 字串值,可說明哪些動作使簽名無效。
    • java.lang.Boolean物件,指定是否對簽署者的憑證執行撤銷檢查。 如果完成此撤銷檢查,則會將其嵌入簽名中。 預設值為false
    • 一個java.lang.Boolean對象,它指定是否鎖定要認證的簽名欄位。 如果欄位已鎖定,則簽名欄位會標示為唯讀,其屬性無法修改,而且沒有必要權限的任何人也無法清除。 預設值為false
    • OCSPPreferences物件,儲存線上憑證狀態通訊協定(OCSP)支援的偏好設定。 如果未完成撤銷檢查,則不使用此參數,您可以指定null。 有關此對象的資訊,請參閱AEM FormsAPI參考
    • CRLPreferences物件,可儲存憑證撤銷清單(CRL)偏好設定。 如果未完成撤銷檢查,則不使用此參數,您可以指定null
    • TSPPreferences物件,可儲存時間戳記提供者(TSP)支援的偏好設定。 例如,在建立TSPPreferences物件後,您可以叫用TSPPreferences物件的setTspServerURL方法來設定TSP伺服器的URL。 此參數為可選參數,可以是null。 如需詳細資訊,請參閱AEM Forms的服務參考

    certify方法會傳回代表已認證PDF檔案的com.adobe.idp.Document物件。

  5. 將認證的PDF檔案儲存為PDF檔案

    • 建立java.io.File物件,並確定副檔名為。pdf。
    • 調用com.adobe.idp.Document物件的copyToFile方法,將com.adobe.idp.Document物件的內容複製至檔案。

另請參閱

認證PDF檔案

快速入門(SOAP模式):使用Java API認證PDF檔案

包含AEM FormsJava庫檔案

設定連接屬性

使用web service API認證PDF檔案

使用簽名API(web service)認證PDF檔案:

  1. 包含專案檔案

    建立使用MTOM的Microsoft .NET專案。 請確定您使用下列WSDL定義:http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1

    注意

    localhost取代為代管AEM Forms的伺服器的IP位址。

  2. 建立簽名用戶端

    • 使用其預設建構子建立SignatureServiceClient對象。

    • 使用System.ServiceModel.EndpointAddress建構函式建立SignatureServiceClient.Endpoint.Address物件。 將指定WSDL的字串值傳遞給AEM Forms服務(例如http://localhost:8080/soap/services/SignatureService?WSDL)。 您不需要使用lc_version屬性。 建立服務參考時,將使用此屬性。)

    • 獲取SignatureServiceClient.Endpoint.Binding欄位的值,建立System.ServiceModel.BasicHttpBinding對象。 將返回值轉換為BasicHttpBinding

    • System.ServiceModel.BasicHttpBinding物件的MessageEncoding欄位設為WSMessageEncoding.Mtom。 此值可確保使用MTOM。

    • 執行下列工作以啟用基本HTTP驗證:

      • 將表AEM單用戶名分配給欄位SignatureServiceClient.ClientCredentials.UserName.UserName
      • 將相應的口令值分配給欄位SignatureServiceClient.ClientCredentials.UserName.Password
      • 將常數值HttpClientCredentialType.Basic分配給欄位BasicHttpBindingSecurity.Transport.ClientCredentialType
      • 將常數值BasicHttpSecurityMode.TransportCredentialOnly分配給欄位BasicHttpBindingSecurity.Security.Mode
  3. 取得PDF檔案以取得認證

    • 使用其建構子建立BLOB對象。 BLOB物件用來儲存已認證的PDF檔案。
    • 通過調用其建構子並傳遞一個字串值來建立System.IO.FileStream對象,該字串值表示要認證的PDF文檔的檔案位置以及開啟檔案的模式。
    • 建立儲存System.IO.FileStream對象內容的位元組陣列。 您可以取得System.IO.FileStream物件的Length屬性,以判斷位元組陣列的大小。
    • 調用System.IO.FileStream物件的Read方法,並傳遞要讀取的位元組陣列、開始位置和串流長度,以串流資料填入位元組陣列。
    • 通過將MTOM資料成員的位元組陣列內容分配給BLOB對象,以填充對象。
  4. 認證PDF檔案

    叫用SignatureServiceClient物件的certify方法並傳遞下列值,以認證PDF檔案:

    • 代表要認證的PDF檔案的BLOB物件。
    • 一個字串值,它表示將包含簽名的簽名欄位的名稱。
    • Credential物件,代表用來認證PDF檔案的憑證。 使用其建構函式建立Credential物件,並指定別名,方法是為Credential物件的alias屬性指定值。
    • HashAlgorithm物件,指定代表用於摘要PDF檔案之雜湊演算法的靜態資料成員。 例如,您可以指定HashAlgorithm.SHA1來使用SHA1演算法。
    • 一個布爾值,它指定是否使用散列算法。
    • 一個字串值,代表PDF檔案獲得認證的原因。
    • 代表簽署者位置的字串值。
    • 代表簽署者聯絡資訊的字串值。
    • MDPPermissions物件的靜態資料成員,指定可對PDF檔案執行使簽名無效的動作。
    • 一個布爾值,它指定是否使用作為前一個參數值傳遞的MDPPermissions對象。
    • 一個字串值,它解釋哪些操作使簽名無效。
    • 控制已認證簽名外觀的PDFSignatureAppearanceOptions物件。 使用其建構子建立PDFSignatureAppearanceOptions對象。 您可以通過設定簽名的一個資料成員來修改簽名的外觀。
    • System.Boolean物件,指定是否對簽署者的憑證執行撤銷檢查。 如果完成此撤銷檢查,則會將其嵌入簽名中。 預設值為false
    • 一個System.Boolean對象,它指定是否鎖定要認證的簽名欄位。 如果欄位已鎖定,則簽名欄位會標示為唯讀,其屬性無法修改,而且沒有必要權限的任何人也無法清除。 預設值為false
    • System.Boolean物件,指定簽名欄位是否已鎖定。 也就是說,如果將true傳遞至上一個參數,則將true傳遞至此參數。
    • OCSPPreferences物件,儲存線上認證狀態通訊協定(OCSP)支援的偏好設定,提供用於認證PDF檔案之憑證狀態的相關資訊。 如果未完成撤銷檢查,則不使用此參數,您可以指定null
    • CRLPreferences物件,可儲存憑證撤銷清單(CRL)偏好設定。 如果未完成撤銷檢查,則不使用此參數,您可以指定null
    • TSPPreferences物件,可儲存時間戳記提供者(TSP)支援的偏好設定。 例如,在建立TSPPreferences物件後,您可以設定TSPPreferences物件的tspServerURL資料成員,以設定TSP的URL。 此參數為可選參數,可以是null

    certify方法會傳回代表已認證PDF檔案的BLOB物件。

  5. 將認證的PDF檔案儲存為PDF檔案

    • 通過調用其建構子並傳遞一個字串值來建立System.IO.FileStream對象,該字串值表示將包含已認證PDF文檔的PDF文檔的檔案位置以及開啟檔案的模式。
    • 建立一個位元組陣列,用於儲存certify方法返回的BLOB對象的內容。 獲取BLOB對象binaryData資料成員的值,以填充位元組陣列。
    • 調用System.IO.BinaryWriter對象的建構子並傳遞System.IO.FileStream對象,以建立對象。
    • 調用System.IO.BinaryWriter物件的Write方法並傳遞位元組陣列,將位元組陣列的內容寫入PDF檔案。

另請參閱

認證PDF檔案

使用MTOM叫用AEM Forms

使用SwaRef叫用AEM Forms

驗證數字簽名

數位簽章可進行驗證,以確保已簽署的PDF檔案未修改,且數位簽章有效。 在驗證數位簽章時,您可以檢查簽名的狀態和簽名的屬性,例如簽章者的身分。 在信任數位簽名之前,建議您先進行驗證。 在驗證數位簽名時,請參考包含數位簽名的PDF檔案。

假設簽章者的身分不明。 當您在Acrobat開啟PDF檔案時,會出現警告訊息指出簽署者的身分不明,如下圖所示。

vd_vd_verifisig

同樣地,當您以程式設計方式驗證數位簽章時,您也可以決定簽署者身分的狀態。 例如,如果您驗證上圖所示檔案中的數位簽名,結果會是簽章者的身分不明。

注意

如需簽名服務和驗證數位簽名的詳細資訊,請參閱AEM Forms的服務參考

步驟摘要

若要驗證數位簽名,請執行下列工作:

  1. 包含專案檔案。
  2. 建立簽名用戶端。
  3. 取得包含要驗證之簽名的PDF檔案。
  4. 設定PKI執行時期選項。
  5. 驗證數位簽名。
  6. 確定簽名的狀態。
  7. 決定簽署者的身分。

包含專案檔案

在您的開發專案中加入必要的檔案。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用web services,請加入proxy檔案。

必須將以下JAR檔案添加到項目的類路徑中:

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-utilities.jar(如果AEM Forms部署在JBoss上,則為必要)
  • jbossall-client.jar(如果AEM Forms部署在JBoss上,則為必需)

有關這些JAR檔案位置的資訊,請參見包括AEM FormsJava庫檔案

建立簽名用戶端

在您以程式設計方式執行簽名服務操作之前,請先建立簽名服務用戶端。

取得包含簽章的PDF檔案以驗證

若要驗證用於數位簽署或認證PDF檔案的簽名,請取得包含簽名的PDF檔案。

設定PKI執行時期選項

在PDF檔案中驗證簽名時,請設定簽名服務使用的這些PKI執行時期選項:

  • 驗證時間
  • 撤銷檢查
  • 時間戳記值

在設定這些選項時,您可以指定驗證時間。 例如,您可以選取目前時間(驗證器電腦上的時間),指出使用目前時間。 有關不同時間值的資訊,請參見AEM FormsAPI參考中的VerificationTime枚舉值。

您也可以指定是否在驗證程式中執行撤銷檢查。 例如,您可以執行撤銷檢查,以判斷憑證是否已撤銷。 有關撤銷檢查選項的資訊,請參見AEM FormsAPI參考中的RevocationCheckStyle枚舉值。

要對證書執行撤銷檢查,請使用CRLOptionSpec對象指定證書撤銷清單(CRL)伺服器的URL。 但是,如果您未指定CRL伺服器的URL,則簽名服務會從憑證取得URL。

執行撤銷檢查時,您可以使用線上認證狀態通訊協定(OCSP)伺服器,而不是使用CRL伺服器。 通常,與CRL伺服器相比,使用OCSP伺服器時,撤銷檢查的執行速度更快。 (請參閱線上證書狀態協定。)

您可以使用「簽名應用程式與服務」來設定簽名服務所使用的CRL和OCSP伺服器順序。 例如,如果OCSP伺服器是在「Adobe應用程式和服務」中首先設定的,則檢查OCSP伺服器,然後檢查CRL伺服器。

如果您未執行撤銷檢查,「簽名服務」不會檢查憑證是否已撤銷。 即,忽略CRL和OCSP伺服器資訊。

注意

您可以使用CRLOptionSpecOCSPOptionSpec物件來覆寫憑證中指定的URL。 例如,若要覆寫CRL伺服器,您可以叫用CRLOptionSpec物件的setLocalURI方法。

時間戳記是追蹤已簽署或已認證檔案修改時間的程式。 簽署檔案後,任何人都無法修改它。 時間戳記有助於強制簽署或認證檔案的有效性。 可以使用TSPOptionSpec對象設定時間戳選項。 例如,您可以指定時間戳記提供者(TSP)伺服器的URL。

注意

在Java和web服務快速啟動中,驗證時間被設定為VerificationTime.CURRENT_TIME,撤銷檢查被設定為RevocationCheckStyle.BestEffort。 由於未指定CRL或OCSP伺服器資訊,因此從證書中獲取伺服器資訊。

驗證數位簽名

要成功驗證簽名,請指定包含簽名的簽名欄位的完全限定名稱,例如form1[0].#subform[1].SignatureField3[3]。 使用XFA表單欄位時,您也可以使用簽名欄位的部分名稱:SignatureField3

依預設,簽章服務會將檔案在驗證後可簽署的時間限制為65分鐘。 如果使用者嘗試在目前時間驗證簽名,而簽署時間晚於目前時間且在65分鐘內,則簽名服務不會建立驗證錯誤。

注意

有關驗證簽名時需要的其他值,請參閱AEM FormsAPI參考

確定簽名的狀態

在驗證數位簽名時,您可以檢查簽名的狀態。

決定簽署者的身分

您可以決定簽章者的身分,這可以是下列其中一個值:

  • 未知:此簽署者未知,因為無法執行簽署者驗證。
  • 受信任:此簽署者是受信任的。
  • 不受信任:此簽署者不受信任。

另請參閱

使用Java API驗證數位簽名

使用web service API驗證數位簽名

包含AEM FormsJava庫檔案

設定連接屬性

使用Java API驗證數位簽名

使用簽名服務API(Java)驗證數位簽名:

  1. 包含專案檔案

    在Java專案的類路徑中包含用戶端JAR檔案,例如adobe-signatures-client.jar。

  2. 建立簽名用戶端

    • 建立包含連接屬性的ServiceClientFactory對象。
    • 使用其建構子並傳遞ServiceClientFactory對象,建立SignatureServiceClient對象。
  3. 取得包含簽章的PDF檔案以驗證

    • 建立java.io.FileInputStream物件,代表包含要使用其建構函式驗證之簽名的PDF檔案。 傳遞指定PDF檔案位置的字串值。
    • 使用其建構子並傳遞java.io.FileInputStream對象,建立com.adobe.idp.Document對象。
  4. 設定PKI執行時期選項

    • 使用其建構子建立PKIOptions對象。
    • 調用PKIOptions物件的setVerificationTime方法並傳遞指定驗證時間的VerificationTime列舉值,以設定驗證時間。
    • 通過調用PKIOptions對象的setRevocationCheckStyle方法並傳遞指定是否執行撤銷檢查的RevocationCheckStyle枚舉值來設定撤銷檢查選項。
  5. 驗證數位簽名

    調用SignatureServiceClient物件的verify2方法並傳遞下列值,以驗證簽名:

    • com.adobe.idp.Document物件,包含數位簽章或認證的PDF檔案。
    • 一個字串值,代表包含要驗證之簽名的簽名欄位名稱。
    • 包含PKI運行時選項的PKIOptions對象。
    • 包含SPI資訊的VerifySPIOptions實例。 您可以指定此參數的null

    verify2方法返回PDFSignatureVerificationInfo對象,該對象包含可用於驗證數字簽名的資訊。

  6. 確定簽名的狀態

    • 叫用PDFSignatureVerificationInfo物件的getStatus方法,以判斷簽名的狀態。 此方法返回指定簽名狀態的SignatureStatus對象。 例如,如果未修改已簽署的PDF檔案,此方法會傳回SignatureStatus.DocumentSigNoChanges
  7. 決定簽署者的身分

    • 叫用PDFSignatureVerificationInfo物件的getSigner方法,以決定簽署者的身分。 此方法返回IdentityInformation對象。
    • 叫用IdentityInformation物件的getStatus方法,以判斷簽署者的身分。 此方法返回一個IdentityStatus枚舉值,該值指定標識。 例如,如果簽署者受信任,此方法會傳回IdentityStatus.TRUSTED

另請參閱

驗證數位簽名

快速入門(SOAP模式):使用Java API驗證數位簽名

包含AEM FormsJava庫檔案

設定連接屬性

使用web service API驗證數位簽名

使用簽名服務API(web service)驗證數位簽名:

  1. 包含專案檔案

    建立使用MTOM的Microsoft .NET專案。 請確定您使用下列WSDL定義:http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1

    注意

    localhost取代為代管AEM Forms的伺服器的IP位址。

  2. 建立簽名用戶端

    • 使用其預設建構子建立SignatureServiceClient對象。

    • 使用System.ServiceModel.EndpointAddress建構函式建立SignatureServiceClient.Endpoint.Address物件。 將指定WSDL的字串值傳遞給AEM Forms服務(例如http://localhost:8080/soap/services/SignatureService?WSDL)。 您不需要使用lc_version屬性。 建立服務參考時,將使用此屬性。)

    • 獲取SignatureServiceClient.Endpoint.Binding欄位的值,建立System.ServiceModel.BasicHttpBinding對象。 將返回值轉換為BasicHttpBinding

    • System.ServiceModel.BasicHttpBinding物件的MessageEncoding欄位設為WSMessageEncoding.Mtom。 此值可確保使用MTOM。

    • 執行下列工作以啟用基本HTTP驗證:

      • 將表AEM單用戶名分配給欄位SignatureServiceClient.ClientCredentials.UserName.UserName
      • 將相應的口令值分配給欄位SignatureServiceClient.ClientCredentials.UserName.Password
      • 將常數值HttpClientCredentialType.Basic分配給欄位BasicHttpBindingSecurity.Transport.ClientCredentialType
      • 將常數值BasicHttpSecurityMode.TransportCredentialOnly分配給欄位BasicHttpBindingSecurity.Security.Mode
  3. 取得包含簽章的PDF檔案以驗證

    • 使用其建構子建立BLOB對象。 BLOB物件用來儲存包含數位或認證簽名以進行驗證的PDF檔案。
    • 通過調用System.IO.FileStream對象的建構子建立對象。 傳遞一個字串值,代表已簽署PDF檔案的檔案位置以及開啟檔案的模式。
    • 建立儲存System.IO.FileStream對象內容的位元組陣列。 您可以取得System.IO.FileStream物件的Length屬性,以判斷位元組陣列的大小。
    • 呼叫System.IO.FileStream物件的Read方法,以串流資料填入位元組陣列。 傳遞要讀取的位元組陣列、起始位置和串流長度。
    • 通過為MTOM屬性指定位元組陣列的內容來填充BLOB對象。
  4. 設定PKI執行時期選項

    • 使用其建構子建立PKIOptions對象。
    • 通過為PKIOptions對象的verificationTime資料成員分配指定驗證時間的VerificationTime枚舉值來設定驗證時間。
    • 通過為PKIOptions對象的revocationCheckStyle資料成員分配指定是否執行撤銷檢查的RevocationCheckStyle枚舉值來設定撤銷檢查選項。
  5. 驗證數位簽名

    調用SignatureServiceClient物件的verify2方法並傳遞下列值,以驗證簽名:

    • BLOB物件包含數位簽章或認證的PDF檔案。
    • 一個字串值,代表包含要驗證之簽名的簽名欄位名稱。
    • 包含PKI運行時選項的PKIOptions對象。
    • 包含SPI資訊的VerifySPIOptions實例。 您可以指定此參數的null

    verify2方法返回PDFSignatureVerificationInfo對象,該對象包含可用於驗證數字簽名的資訊。

  6. 確定簽名的狀態

    取得PDFSignatureVerificationInfo物件status資料成員的值,以判斷簽章的狀態。 此資料成員儲存一個SignatureStatus對象,該對象指定簽名的狀態。 例如,如果修改了已簽名的PDF文檔,status資料成員將儲存值SignatureStatus.DocumentSigNoChanges

  7. 決定簽署者的身分

    • 擷取PDFSignatureVerificationInfo物件signer資料成員的值,以判斷簽署者的身分。 此成員返回IdentityInformation對象。
    • 擷取IdentityInformation物件的status資料成員,以判斷簽章者的身分。 此資料成員返回一個IdentityStatus枚舉值,該枚舉值指定標識。 例如,如果簽署者受信任,此成員會傳回IdentityStatus.TRUSTED

另請參閱

驗證數位簽名

使用MTOM叫用AEM Forms

使用SwaRef叫用AEM Forms

驗證多個數字簽名

AEM Forms提供驗證PDF檔案中所有數位簽名的方法。 假設PDF檔案包含多個數位簽名,因為業務流程需要多個簽署者的簽名。 例如,請考慮要求貸款主管和經理簽名的財務交易。 您可以使用簽名服務Java API或web service API來驗證PDF檔案中的所有簽名。 驗證多個數位簽名時,您可以檢查每個簽名的狀態和屬性。 在您信任數位簽名之前,建議您先進行驗證。 建議您熟悉驗證單一數位簽名。

注意

如需簽名服務和驗證數位簽名的詳細資訊,請參閱AEM Forms的服務參考

步驟摘要

若要驗證多個數位簽名,請執行下列工作:

  1. 包含專案檔案。
  2. 建立簽名用戶端。
  3. 取得包含要驗證之簽名的PDF檔案。
  4. 設定PKI執行時期選項。
  5. 擷取所有數位簽名。
  6. 重複所有簽名。

包含專案檔案

在您的開發專案中加入必要的檔案。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用web services,請加入proxy檔案。

必須將以下JAR檔案添加到項目的類路徑中:

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-utilities.jar(如果AEM Forms部署在JBoss上,則為必要)
  • jbossall-client.jar(如果AEM Forms部署在JBoss上,則為必需)

有關這些JAR檔案位置的資訊,請參見包括AEM FormsJava庫檔案

建立簽名用戶端

在您以程式設計方式執行簽名服務操作之前,請先建立簽名服務用戶端。

取得包含簽名的PDF檔案,以驗證

若要驗證用於數位簽署或認證PDF檔案的簽名,請取得包含簽名的PDF檔案。

設定PKI執行時期選項

設定簽章服務在驗證PDF檔案中所有簽名時使用的這些PKI執行時期選項:

  • 驗證時間
  • 撤銷檢查
  • 時間戳記值

在設定這些選項時,您可以指定驗證時間。 例如,您可以選取目前時間(驗證器電腦上的時間),指出使用目前時間。 有關不同時間值的資訊,請參見AEM FormsAPI參考中的VerificationTime枚舉值。

您也可以指定是否在驗證程式中執行撤銷檢查。 例如,您可以執行撤銷檢查,以判斷憑證是否已撤銷。 有關撤銷檢查選項的資訊,請參見AEM FormsAPI參考中的RevocationCheckStyle枚舉值。

要對證書執行撤銷檢查,請使用CRLOptionSpec對象指定證書撤銷清單(CRL)伺服器的URL。 但是,如果您未指定CRL伺服器的URL,則簽名服務會從憑證取得URL。

執行撤銷檢查時,您可以使用線上認證狀態通訊協定(OCSP)伺服器,而不是使用CRL伺服器。 通常,使用OCSP伺服器而非CRL伺服器時,撤銷檢查的執行速度會更快。 (請參閱線上證書狀態協定。)

您可以使用「簽名應用程式與服務」來設定簽名服務所使用的CRL和OCSP伺服器順序。 例如,如果OCSP伺服器在「Adobe應用程式和服務」中是第一個設定,則檢查OCSP伺服器,然後檢查CRL伺服器。

如果您未執行撤銷檢查,「簽名服務」不會檢查憑證是否已撤銷。 即,忽略CRL和OCSP伺服器資訊。

注意

您可以使用CRLOptionSpecOCSPOptionSpec物件來覆寫憑證中指定的URL。 例如,若要覆寫CRL伺服器,您可以叫用CRLOptionSpec物件的setLocalURI方法。

時間戳記是追蹤已簽署或已認證檔案修改時間的程式。 簽署檔案後,任何人都無法修改它。 時間戳記有助於強制簽署或認證檔案的有效性。 您可以使用TSPOptionSpec物件來設定時間戳記選項。 例如,您可以指定時間戳記提供者(TSP)伺服器的URL。

注意

在Java和web服務快速啟動中,驗證時間被設定為VerificationTime.CURRENT_TIME,撤銷檢查被設定為RevocationCheckStyle.BestEffort。 由於未指定CRL或OCSP伺服器資訊,因此從證書中獲取伺服器資訊。

擷取所有數位簽名

若要確認PDF檔案中的所有數位簽名,請從PDF檔案擷取數位簽名。 所有簽名都會在清單中傳回。 在驗證數位簽名時,請檢查簽名的狀態。

注意

與驗證單一數位簽名不同,當您驗證多個簽名時,不需要指定簽名欄位名稱。

重複所有簽名

逐一重複每個簽名。 也就是說,對於每個簽名,請驗證數位簽名,並檢查簽章者的身分和每個簽名的狀態。 (請參閱驗證數位簽名)。

注意

如果要求是整份檔案,則不需要重複所有簽名。

另請參閱

使用Java API驗證多個數位簽名

使用web service API驗證多個數位簽名

包含AEM FormsJava庫檔案

設定連接屬性

使用Java API驗證多個數位簽名

使用簽名服務API(Java)驗證多個數位簽名:

  1. 包含專案檔案

    在Java專案的類路徑中包含用戶端JAR檔案,例如adobe-signatures-client.jar。

  2. 建立簽名用戶端

    • 建立包含連接屬性的ServiceClientFactory對象。
    • 使用其建構子並傳遞ServiceClientFactory對象,建立SignatureServiceClient對象。
  3. 取得包含簽名的PDF檔案,以驗證

    • 建立java.io.FileInputStream物件,代表包含多個數位簽章的PDF檔案,以使用其建構函式進行驗證。 傳遞指定PDF檔案位置的字串值。
    • 使用其建構子並傳遞java.io.FileInputStream對象,建立com.adobe.idp.Document對象。
  4. 設定PKI執行時期選項

    • 使用其建構子建立PKIOptions對象。
    • 調用PKIOptions物件的setVerificationTime方法並傳遞指定驗證時間的VerificationTime列舉值,以設定驗證時間。
    • 通過調用PKIOptions對象的setRevocationCheckStyle方法並傳遞指定是否執行撤銷檢查的RevocationCheckStyle枚舉值來設定撤銷檢查選項。
  5. 擷取所有數位簽名

    叫用SignatureServiceClient物件的verifyPDFDocument方法並傳遞下列值:

    • com.adobe.idp.Document物件,包含包含多個數位簽名的PDF檔案。
    • 包含PKI運行時選項的PKIOptions對象。
    • 包含SPI資訊的VerifySPIOptions實例。 您可以指定此參數的null

    verifyPDFDocument方法會傳回PDFDocumentVerificationInfo物件,其中包含PDF檔案中所有數位簽名的相關資訊。

  6. 重複所有簽名

    • 叫用PDFDocumentVerificationInfo物件的getVerificationInfos方法,以重複所有簽名。 此方法返回java.util.List對象,其中每個元素都是PDFSignatureVerificationInfo對象。 使用java.util.Iterator物件來重複簽名清單。
    • 使用PDFSignatureVerificationInfo物件,您可以呼叫PDFSignatureVerificationInfo物件的getStatus方法,以執行例如判斷簽章狀態等工作。 此方法返回SignatureStatus對象,其靜態資料成員會通知您有關簽名的狀態。 例如,如果簽名未知,此方法會傳回SignatureStatus.DocumentSignatureUnknown

另請參閱

驗證多個數位簽名

快速入門(SOAP模式):使用Java API驗證多個數位簽名

包含AEM FormsJava庫檔案

驗證數位簽名

設定連接屬性

使用web service API驗證多個數位簽名

使用簽名服務API(web service)驗證多個數位簽名:

  1. 包含專案檔案

    建立使用MTOM的Microsoft .NET專案。 請確定您使用下列WSDL定義:http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1

    注意

    localhost取代為代管AEM Forms的伺服器的IP位址。

  2. 建立簽名用戶端

    • 使用其預設建構子建立SignatureServiceClient對象。

    • 使用System.ServiceModel.EndpointAddress建構函式建立SignatureServiceClient.Endpoint.Address物件。 將指定WSDL的字串值傳遞給AEM Forms服務(例如http://localhost:8080/soap/services/SignatureService?WSDL)。 您不需要使用lc_version屬性。 建立服務參考時,將使用此屬性。)

    • 獲取SignatureServiceClient.Endpoint.Binding欄位的值,建立System.ServiceModel.BasicHttpBinding對象。 將返回值轉換為BasicHttpBinding

    • System.ServiceModel.BasicHttpBinding物件的MessageEncoding欄位設為WSMessageEncoding.Mtom。 此值可確保使用MTOM。

    • 執行下列工作以啟用基本HTTP驗證:

      • 將表AEM單用戶名分配給欄位SignatureServiceClient.ClientCredentials.UserName.UserName
      • 將相應的口令值分配給欄位SignatureServiceClient.ClientCredentials.UserName.Password
      • 將常數值HttpClientCredentialType.Basic分配給欄位BasicHttpBindingSecurity.Transport.ClientCredentialType
      • 將常數值BasicHttpSecurityMode.TransportCredentialOnly分配給欄位BasicHttpBindingSecurity.Security.Mode
  3. 取得包含簽名的PDF檔案,以驗證

    • 使用其建構子建立BLOB對象。 BLOB物件會儲存包含多個數位簽章以進行驗證的PDF檔案。
    • 通過調用System.IO.FileStream對象的建構子建立對象。 傳遞一個字串值,代表PDF檔案的檔案位置和開啟檔案的模式。
    • 建立儲存System.IO.FileStream對象內容的位元組陣列。 您可以取得System.IO.FileStream物件的Length屬性,以判斷位元組陣列的大小。
    • 呼叫System.IO.FileStream物件的Read方法,以串流資料填入位元組陣列。 傳遞要讀取的位元組陣列、起始位置和串流長度。
    • 通過為MTOM屬性指定位元組陣列的內容來填充BLOB對象。
  4. 設定PKI執行時期選項

    • 使用其建構子建立PKIOptions對象。
    • 通過為PKIOptions對象的verificationTime資料成員分配指定驗證時間的VerificationTime枚舉值來設定驗證時間。
    • 通過為PKIOptions對象的revocationCheckStyle資料成員分配RevocationCheckStyle枚舉值來設定撤銷檢查選項,該枚舉值指定是否執行撤銷檢查。
  5. 擷取所有數位簽名

    叫用SignatureServiceClient物件的verifyPDFDocument方法並傳遞下列值:

    • BLOB物件,包含包含多個數位簽名的PDF檔案。
    • 包含PKI運行時選項的PKIOptions對象。
    • 包含SPI資訊的VerifySPIOptions實例。 您可以為此參數指定null。

    verifyPDFDocument方法會傳回PDFDocumentVerificationInfo物件,其中包含PDF檔案中所有數位簽名的相關資訊。

  6. 重複所有簽名

    • 取得PDFDocumentVerificationInfo物件的verificationInfos資料成員,以重複所有簽名。 此資料成員返回Object陣列,其中每個元素都是PDFSignatureVerificationInfo對象。
    • 使用PDFSignatureVerificationInfo物件,您可以取得PDFSignatureVerificationInfo物件的status資料成員,以執行如決定簽名狀態等工作。 此資料成員返回SignatureStatus對象,其靜態資料成員會通知您有關簽名的狀態。 例如,如果簽名未知,此方法會傳回SignatureStatus.DocumentSignatureUnknown

另請參閱

驗證多個數位簽名

使用MTOM叫用AEM Forms

使用SwaRef叫用AEM Forms

刪除數字簽名

必須先從簽名欄位移除數位簽名,才能套用較新的數位簽名。 無法覆寫數位簽名。 如果您嘗試將數位簽名套用至包含簽名的簽名欄位,則會發生例外。

注意

如需簽名服務的詳細資訊,請參閱AEM Forms的服務參考

步驟摘要

若要從簽名欄位移除數位簽名,請執行下列工作:

  1. 包含專案檔案。
  2. 建立簽名用戶端。
  3. 取得包含要移除之簽名的PDF檔案。
  4. 從簽名欄位移除數位簽名。
  5. 將PDF檔案儲存為PDF檔案。

包含專案檔案

將必要的檔案加入您的開發專案中。 如果使用Java建立客戶端應用程式,則包括必要的JAR檔案。 如果您使用web services,請確定您包含proxy檔案。

必須將以下JAR檔案添加到項目的類路徑中:

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-utilities.jar(如果AEM Forms部署在JBoss上,則為必要)
  • jbossall-client.jar(如果AEM Forms部署在JBoss上,則為必需)

有關這些JAR檔案位置的資訊,請參見包括AEM FormsJava庫檔案

建立簽名用戶端

您必須先建立簽名服務用戶端,才能以程式設計方式執行簽名服務作業。

取得包含要移除之簽名的PDF檔案

若要從PDF檔案移除簽名,您必須取得包含簽名的PDF檔案。

從簽名欄位移除數位簽名

若要成功從PDF檔案移除數位簽章,您必須指定包含數位簽章的簽名欄位名稱。 此外,您必須擁有移除數位簽名的權限;否則,會發生例外。

將PDF檔案儲存為PDF檔案

在簽名服務從簽名欄位移除數位簽名後,您可以將PDF檔案儲存為PDF檔案,讓使用者在Acrobat或Adobe Reader開啟它。

另請參閱

使用Java API移除數位簽名

使用web service API移除數位簽名

包含AEM FormsJava庫檔案

設定連接屬性

新增簽名欄位

使用Java API移除數位簽名

使用簽名API(Java)移除數位簽名:

  1. 包含專案檔案

    在Java專案的類別路徑中包含用戶端JAR檔案,例如adobe-signatures-client.jar。

  2. 建立簽名用戶端。

    • 建立包含連接屬性的ServiceClientFactory對象。
    • 使用其建構子並傳遞ServiceClientFactory對象,建立SignatureServiceClient對象。
  3. 取得包含要移除之簽名的PDF檔案

    • 建立java.io.FileInputStream物件,以代表包含要移除之簽名的PDF檔案,方法是使用其建構函式並傳遞指定PDF檔案位置的字串值。
    • 使用其建構子並傳遞java.io.FileInputStream對象,建立com.adobe.idp.Document對象。
  4. 從簽名欄位移除數位簽名

    叫用SignatureServiceClient物件的clearSignatureField方法並傳遞下列值,從簽名欄位移除數位簽名:

    • com.adobe.idp.Document物件,代表包含要移除之簽名的PDF檔案。
    • 一個字串值,它指定包含數字簽名的簽名欄位的名稱。

    clearSignatureField方法會傳回com.adobe.idp.Document物件,代表移除數位簽名的PDF檔案。

  5. 將PDF檔案儲存為PDF檔案

    • 建立java.io.File物件,並確定副檔名為。pdf。
    • 叫用com.adobe.idp.Document物件的copyToFile方法。 傳遞java.io.File物件,將com.adobe.idp.Document物件的內容複製至檔案。 請確定您使用clearSignatureField方法傳回的Document物件。

另請參閱

移除數位簽名

快速入門(SOAP模式):使用Java API移除數位簽名

包含AEM FormsJava庫檔案

設定連接屬性

使用web service API移除數位簽名

使用簽名API(web service)移除數位簽名:

  1. 包含專案檔案

    建立使用MTOM的Microsoft .NET專案。 請確定您使用下列WSDL定義:http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1

    注意

    localhost取代為代管AEM Forms的伺服器的IP位址。

  2. 建立簽名用戶端

    • 使用其預設建構子建立SignatureServiceClient對象。

    • 使用System.ServiceModel.EndpointAddress建構函式建立SignatureServiceClient.Endpoint.Address物件。 將指定WSDL的字串值傳遞給AEM Forms服務(例如http://localhost:8080/soap/services/SignatureService?WSDL)。 您不需要使用lc_version屬性。 建立服務參考時,將使用此屬性。)

    • 獲取SignatureServiceClient.Endpoint.Binding欄位的值,建立System.ServiceModel.BasicHttpBinding對象。 將返回值轉換為BasicHttpBinding

    • System.ServiceModel.BasicHttpBinding物件的MessageEncoding欄位設為WSMessageEncoding.Mtom。 此值可確保使用MTOM。

    • 執行下列工作以啟用基本HTTP驗證:

      • 將表AEM單用戶名分配給欄位SignatureServiceClient.ClientCredentials.UserName.UserName
      • 將相應的口令值分配給欄位SignatureServiceClient.ClientCredentials.UserName.Password
      • 將常數值HttpClientCredentialType.Basic分配給欄位BasicHttpBindingSecurity.Transport.ClientCredentialType
      • 將常數值BasicHttpSecurityMode.TransportCredentialOnly分配給欄位BasicHttpBindingSecurity.Security.Mode
  3. 取得包含要移除之簽名的PDF檔案

    • 使用其建構子建立BLOB對象。 BLOB物件用來儲存包含要移除之數位簽名的PDF檔案。
    • 通過調用其建構子並傳遞一個字串值來建立System.IO.FileStream對象,該字串值表示已簽名PDF文檔的檔案位置以及開啟檔案的模式。
    • 建立儲存System.IO.FileStream對象內容的位元組陣列。 您可以取得System.IO.FileStream物件的Length屬性,以判斷位元組陣列的大小。
    • 呼叫System.IO.FileStream物件的Read方法,以串流資料填入位元組陣列。 傳遞要讀取的位元組陣列、起始位置和串流長度。
    • 通過為MTOM對象的屬性指定位元組陣列的內容來填充BLOB對象。
  4. 從簽名欄位移除數位簽名

    叫用SignatureServiceClient物件的clearSignatureField方法並傳遞下列值,以移除數位簽章:

    • BLOB物件,其中包含已簽署的PDF檔案。
    • 一個字串值,代表包含要移除之數位簽名之簽名欄位的名稱。

    clearSignatureField方法會傳回BLOB物件,代表移除數位簽名的PDF檔案。

  5. 將PDF檔案儲存為PDF檔案

    • 通過調用其建構子並傳遞一個字串值來建立System.IO.FileStream對象,該字串值表示包含空簽名欄位的PDF文檔的檔案位置以及開啟檔案的模式。
    • 建立一個位元組陣列,用於儲存sign方法返回的BLOB對象的內容。 獲取BLOB對象MTOM資料成員的值,以填充位元組陣列。
    • 調用System.IO.BinaryWriter對象的建構子並傳遞System.IO.FileStream對象,以建立對象。
    • 調用System.IO.BinaryWriter物件的Write方法並傳遞位元組陣列,將位元組陣列的內容寫入PDF檔案。

另請參閱

移除數位簽名

使用MTOM叫用AEM Forms

使用SwaRef叫用AEM Forms

本頁內容

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now