數字簽名和認證文檔

本檔案中的範例和範例僅適用於JEE環境上的AEM Forms。

關於簽名服務

簽章服務可讓您的組織保護其所發送及接收之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或簽名Web服務API,以寫程式方式添加簽名欄位。 您可以在PDF檔案中新增多個簽名欄位;但是,每個簽名欄位名稱必須是唯一的。

注意

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

步驟的摘要

要將簽名欄位添加到PDF文檔,請執行以下任務:

  1. 包含專案檔案。
  2. 建立簽名客戶端。
  3. 取得已新增簽名欄位的PDF檔案。
  4. 添加簽名欄位。
  5. 將PDF文檔另存為PDF檔案。

包含項目檔案

在您的開發專案中加入必要的檔案。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用Web服務,請確定您包含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 Forms Java程式庫檔案

設定連接屬性

數位簽署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. 添加簽名欄位

    • 建立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服務API添加簽名欄位

要使用簽名API(Web服務)添加簽名欄位:

  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.FileStream對象來建立System.IO.BinaryWriter對象。
    • 調用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服務,請確定您包含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 Forms Java庫檔案

建立簽名客戶端

在以寫程式方式執行簽名服務操作之前,必須建立簽名服務客戶端。

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

檢索包含簽名欄位的PDF文檔。

檢索簽名欄位名稱

檢索包含一個或多個簽名欄位的PDF文檔後,可以檢索簽名欄位名稱。

另請參閱

使用Java API檢索簽名欄位名稱

使用Web服務API檢索簽名欄位

包含AEM Forms Java程式庫檔案

設定連接屬性

添加簽名欄位

使用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對象的getSignatureFieldList方法並傳遞包含簽名欄位的PDF文檔的com.adobe.idp.Document對象,以檢索簽名欄位名稱。 此方法會傳回java.util.List物件,其中每個元素都包含PDFSignatureField物件。 使用此對象,可以獲取有關簽名欄位的其他資訊,如簽名欄位是否可見。
    • 逐一查看java.util.List對象,以確定是否存在簽名欄位名稱。 對於PDF文檔中的每個簽名欄位,可以獲得單獨的PDFSignatureField對象。 要獲取簽名欄位的名稱,請調用PDFSignatureField對象的getName方法。 此方法會傳回指定簽名欄位名稱的字串值。

另請參閱

檢索簽名欄位名稱

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

包含AEM Forms Java程式庫檔案

設定連接屬性

使用Web服務API檢索簽名欄位

使用簽名API(Web服務)檢索簽名欄位名稱:

  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服務API修改PDF檔案中的簽名欄位。 修改簽名欄位涉及操作其簽名欄位鎖定字典值或種子值字典值。

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

通過修改現有簽名欄位,您可以對PDF文檔進行更改以反映不斷變化的業務需求。 例如,新業務要求可能需要在文檔簽名後鎖定所有文檔欄位。

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

注意

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

步驟的摘要

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

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

包含項目檔案

在您的開發專案中加入必要的檔案。 如果您是使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用Web服務,請確定您包含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 Forms Java程式庫檔案

設定連接屬性

簽名服務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 Forms API參考。)

  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服務API修改簽名欄位

使用簽名API(Web服務)修改簽名欄位:

  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 Forms API參考)。

  5. 修改簽名欄位

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

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

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

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

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

另請參閱

使用MTOM叫用AEM Forms

使用SwaRef叫用AEM Forms

以數字方式簽署PDF文檔

數位簽名可套用至PDF檔案,以提供一定的安全性。 數字簽名(如手寫簽名)提供了一種手段,使簽名者能夠識別自己,並對文檔進行聲明。 用於數字簽名文檔的技術有助於確保簽名者和接收者都清楚簽名的內容,並確信文檔自簽名後沒有更改。

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

注意

您必須確定將憑證新增至AEM Forms,才能數位簽署PDF檔案。 使用管理控制台或使用信任管理器API以程式設計方式新增憑證。 (請參閱使用信任管理器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實用程式。)

密碼nShield HSM憑據

使用nCipher nShield HSM憑據來簽名或認證PDF文檔時,必須重新啟動部署了AEM Forms的J2EE應用程式伺服器,才能使用新憑據。 但是,您可以設定配置值,從而使簽名或認證操作正常工作,而不重新啟動J2EE應用程式伺服器。

您可以在位於/opt/nfast/cknfastrc(或c:\nfast\cknfastrc)的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服務,請確定您包含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文檔不包含簽名欄位,則無法簽名。 簽名欄位可通過使用Designer或以寫程式方式添加。

簽署PDF檔案

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

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

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

您也可以指定是否執行吊銷檢查,以確定用於數字簽署PDF文檔的證書是否已被吊銷。 要執行吊銷檢查,可以指定以下值之一:

  • 無檢查:不執行吊銷檢查。
  • BestEffort:始終嘗試檢查是否吊銷鏈中的所有證書。如果檢查中出現任何問題,則假定吊銷有效。 如果發生任何失敗,請假設憑證未撤銷。
  • CheckIfAvailable: 如果可取消資訊,則檢查是否吊銷鏈中的所有證書。如果檢查中出現任何問題,則假定吊銷無效。 如果發生任何失敗,假設憑證已撤銷且無效。 (這是預設值。)
  • AlwaysCheck:檢查是否撤銷鏈中的所有證書。如果任何證書中沒有吊銷資訊,則假定吊銷無效。

要對證書執行吊銷檢查,可以使用CRLOptionSpec對象指定證書吊銷清單(CRL)伺服器的URL。 但是,如果要執行吊銷檢查,並且您沒有為CRL伺服器指定URL,則簽名服務將從證書中獲取該URL。

在執行吊銷檢查時,可以使用聯機證書狀態協定(OCSP)伺服器,而不使用CRL伺服器。 通常,當使用OCSP伺服器而不是CRL伺服器時,執行吊銷檢查的速度會更快。 (請參閱https://tools.ietf.org/html/rfc2560上的「線上證書狀態協定」。)

您可以使用Adobe應用程式和服務來設定簽名服務使用的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檔案

使用網站服務API數位簽署PDF檔案

包含AEM Forms Java程式庫檔案

設定連接屬性

添加簽名欄位

檢索簽名欄位名稱

使用Java API數位簽署PDF檔案

使用簽章API(Java)以數位方式簽署PDF檔案:

  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. 簽署PDF檔案

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

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

    sign方法返回一個com.adobe.idp.Document對象,該對象表示已簽名的PDF文檔。

  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 Forms Java程式庫檔案

設定連接屬性

使用Web服務API以數位方式簽署PDF檔案

若要使用簽名API(網站服務)以數位方式簽署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檔案:

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

    sign方法返回一個BLOB對象,該對象表示已簽名的PDF文檔。

  5. 儲存已簽署的PDF檔案

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

另請參閱

數位簽署PDF檔案

使用MTOM叫用AEM Forms

使用SwaRef叫用AEM Forms

以數位方式簽署互動式Forms

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

  • 您可以合併使用Designer建立的基於XFA的PDF表單,以及使用Forms服務在XML文檔中找到的表單資料。 Forms伺服器會轉譯互動式表單。
  • 您使用簽名服務API簽署互動式表單。

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

注意

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

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

注意

閱讀數位簽署互動式Forms前,建議您先熟悉簽署PDF檔案的方式。 (請參閱數位簽署PDF檔案。)

步驟的摘要

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

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

包含項目檔案

在您的開發專案中加入必要的檔案。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用Web服務,請確定您包含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 Forms Java庫檔案

建立Forms和簽名客戶端

因為此工作流同時調用Forms和簽名服務,請同時建立Forms服務客戶端和簽名服務客戶端。

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

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

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

注意

與「數字簽名互動式Forms」部分關聯的快速啟動調用renderPDFForm2方法。

簽署互動式表單

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

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

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

儲存已簽署的PDF檔案

簽名服務對PDF文檔進行數字簽名後,您可以將其另存為PDF檔案。 可在Acrobat或Adobe Reader中開啟PDF檔案。

另請參閱

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

使用網站服務API數位簽署互動式表單

包含AEM Forms Java程式庫檔案

設定連接屬性

數位簽署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物件,透過其建構函式,代表要傳遞至Forms服務的PDF檔案。 傳遞指定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檔案:

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

    sign方法返回一個com.adobe.idp.Document對象,該對象表示已簽名的PDF文檔。

  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 Forms Java程式庫檔案

設定連接屬性

使用網站服務API數位簽署互動式表單

使用Forms和簽名API(網站服務)數位簽署互動式表單:

  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檔案:

    • 代表要簽署的PDF文檔的BLOB對象。 使用Forms服務傳回的BLOB例項。
    • 表示簽名欄位名稱的字串值。
    • Credential物件,代表用於數位簽署PDF檔案的憑證。 使用其建構子建立Credential對象,並通過為Credential對象的alias屬性指定值來指定別名。
    • HashAlgorithm物件,指定代表要用於摘要PDF檔案的雜湊演算法的靜態資料成員。 例如,您可以指定HashAlgorithm.SHA1來使用SHA1演算法。
    • 一個布林值,指定是否使用哈希算法。
    • 代表PDF檔案因數位簽署的字串值。
    • 代表簽署者位置的字串值。
    • 表示簽名者聯繫資訊的字串值。
    • 控制數字簽名外觀的PDFSignatureAppearanceOptions對象。 例如,您可以使用此物件將自訂標誌新增至數位簽名。
    • System.Boolean對象,指定是否對簽名者的證書執行吊銷檢查。 如果完成了此吊銷檢查,則它嵌入到簽名中。 預設值為false
    • OCSPPreferences物件,可儲存線上憑證狀態通訊協定(OCSP)支援的偏好設定。 如果未完成吊銷檢查,則不使用此參數,您可以指定null。 如需此物件的相關資訊,請參閱AEM Forms API參考
    • 儲存證書吊銷清單(CRL)首選項的CRLPreferences對象。 如果未完成吊銷檢查,則不使用此參數,您可以指定null
    • TSPPreferences物件,用於儲存時間戳提供程式(TSP)支援的偏好設定。 此參數為選用參數,可以是null

    sign方法返回一個BLOB對象,該對象表示已簽名的PDF文檔。

  5. 儲存已簽署的PDF檔案

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

另請參閱

數位簽署互動式Forms

使用MTOM叫用AEM Forms

認證PDF文檔

您可以使用稱為認證簽名的特定簽名類型對PDF文檔進行認證,以保護該文檔的安全。 經認證的簽名與數字簽名在以下方面有區別:

  • 必須是套用至PDF檔案的第一個簽名;也就是說,在應用經認證的簽名時,文檔中的任何其他簽名欄位必須未簽名。 PDF文檔中僅允許一個經認證的簽名。 如果您想要簽署和認證PDF檔案,則必須在簽署前進行認證。 認證PDF檔案後,您可以數位簽署其他簽名欄位。
  • 文檔的作者或創作者可以指定文檔可以以某些方式修改,而不使經認證的簽名失效。 例如,該文檔可允許填寫表單或注釋。 如果作者指定不允許進行特定修改,Acrobat會限制使用者以此方式修改檔案。 如果進行了此類修改(例如使用其他應用程式),則經認證的簽名無效,並且Acrobat在用戶開啟文檔時發出警告。 (使用未經認證的簽名時,不會阻止修改,且正常的編輯操作不會使原始簽名無效。)
  • 在簽名時,將掃描文檔以查找可能使文檔內容模糊或具有誤導性的特定內容類型。 例如,注釋可能會遮蔽頁面上對於了解正在認證的內容非常重要的文字。 可以提供關於此類內容的說明(法律證明)。

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

注意

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

注意

使用nCipher nShield HSM憑據來簽名或認證PDF文檔時,必須重新啟動部署了AEM Forms的J2EE應用程式伺服器,才能使用新憑據。 但是,您可以設定配置值,從而使簽名或認證操作正常工作,而不重新啟動J2EE應用程式伺服器。

您可以在位於/opt/nfast/cknfastrc(或c:\nfast\cknfastrc)的cknfastrc檔案中添加以下配置值:

    CKNFAST_ASSUME_SINGLE_PROCESS=0

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

注意

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

步驟的摘要

要認證PDF文檔,請執行以下任務:

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

包含項目檔案

在您的開發專案中加入必要的檔案。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用Web服務,請確定您包含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 Forms Java庫檔案

建立簽名客戶端

在以寫程式方式執行簽名操作之前,必須建立簽名客戶端。

取得PDF檔案以進行認證

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

認證PDF檔案

要成功認證PDF文檔,您需要以下由簽名服務使用的輸入值來認證PDF文檔:

  • PDF文檔:包含簽名欄位的PDF文檔,該表單欄位包含經認證簽名的圖形表示。PDF檔案必須包含簽名欄位,才能獲得認證。 簽名欄位可通過使用Designer或以寫程式方式添加。 (請參閱添加簽名欄位。)
  • 簽名欄位名稱:經認證的簽名欄位的完全限定名稱。以下是範例值: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,該URL提供有關用於登錄PDF文檔的憑據的資訊。
  • CRL設定:完成吊銷檢查時,證書吊銷清單(CRL)首選項的設定。例如,您可以指定始終檢查憑據是否被吊銷。
  • 時間戳記:定義應用於認證簽名的時間戳資訊的設定。時間戳表示特定資料是在某個時間之前建立的。 此知識有助於在簽署者與驗證者之間建立信任關係。

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

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

另請參閱

使用Java API認證PDF檔案

使用Web服務API認證PDF檔案

包含AEM Forms Java程式庫檔案

設定連接屬性

添加簽名欄位

使用Java API認證PDF文檔

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

  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. 認證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 Forms API參考
    • 儲存證書吊銷清單(CRL)首選項的CRLPreferences對象。 如果未完成吊銷檢查,則不使用此參數,您可以指定null
    • TSPPreferences物件,用於儲存時間戳提供程式(TSP)支援的偏好設定。 例如,建立TSPPreferences物件後,您可以叫用TSPPreferences物件的setTspServerURL方法,以設定TSP伺服器的URL。 此參數為選用參數,可以是null。 如需詳細資訊,請參閱AEM Forms的服務參考

    certify方法返回一個com.adobe.idp.Document對象,該對象表示經認證的PDF文檔。

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

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

另請參閱

認證PDF檔案

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

包含AEM Forms Java程式庫檔案

設定連接屬性

使用Web服務API認證PDF文檔

使用簽名API(Web服務)認證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
    • 儲存證書吊銷清單(CRL)首選項的CRLPreferences對象。 如果未完成吊銷檢查,則不使用此參數,您可以指定null
    • TSPPreferences物件,用於儲存時間戳提供程式(TSP)支援的偏好設定。 例如,建立TSPPreferences對象後,可以通過設定TSPPreferences對象的tspServerURL資料成員來設定TSP的URL。 此參數為選用參數,可以是null

    certify方法返回一個BLOB對象,該對象表示經認證的PDF文檔。

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

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

另請參閱

認證PDF檔案

使用MTOM叫用AEM Forms

使用SwaRef叫用AEM Forms

驗證數字簽名

數字簽名可以驗證,以確保已簽名的PDF文檔未被修改,並且數字簽名有效。 驗證數字簽名時,您可以檢查簽名的狀態和簽名的屬性,如簽名者的身份。 信任數字簽名之前,建議您驗證它。 驗證數字簽名時,請參考包含數字簽名的PDF文檔。

假設簽名者的身份未知。 在Acrobat中開啟PDF檔案時,警告訊息會指出簽署者的身分不明,如下圖所示。

vd_vd_verifsig

同樣,當以寫程式方式驗證數字簽名時,可以確定簽名者的身份狀態。 例如,如果您驗證上圖所示檔案中的數位簽名,結果會是簽名者的身份未知。

注意

有關簽名服務和驗證數字簽名的詳細資訊,請參閱AEM Forms服務參考

步驟的摘要

要驗證數字簽名,請執行以下任務:

  1. 包含專案檔案。
  2. 建立簽名客戶端。
  3. 取得包含要驗證之簽名的PDF檔案。
  4. 設定PKI運行時選項。
  5. 驗證數字簽名。
  6. 確定簽名的狀態。
  7. 確定簽名者的身份。

包含項目檔案

在您的開發專案中加入必要的檔案。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用Web服務,請包含代理檔案。

必須將以下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 Forms Java庫檔案

建立簽名客戶端

在以寫程式方式執行簽名服務操作之前,請建立簽名服務客戶端。

取得包含要驗證之簽名的PDF檔案

要驗證用於數字簽名或認證PDF文檔的簽名,請獲取包含簽名的PDF文檔。

設定PKI運行時選項

設定簽名服務在驗證PDF文檔中的簽名時使用的以下PKI運行時選項:

  • 驗證時間
  • 吊銷檢查
  • 時間戳值

作為設定這些選項的一部分,您可以指定驗證時間。 例如,您可以選取目前時間(驗證器電腦上的時間),以指出要使用目前時間。 如需不同時間值的相關資訊,請參閱AEM Forms API參考中的VerificationTime列舉值。

您還可以指定是否在驗證過程中執行吊銷檢查。 例如,您可以執行吊銷檢查以確定證書是否被吊銷。 有關吊銷檢查選項的資訊,請參閱AEM Forms API Reference中的RevocationCheckStyle枚舉值。

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

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

您可以通過使用Adobe應用程式和服務來設定簽名服務使用的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 Forms API參考

確定簽名的狀態

作為驗證數字簽名的一部分,您可以檢查簽名的狀態。

確定簽名者的身份

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

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

另請參閱

使用Java API驗證數位簽名

使用Web服務API驗證數字簽名

包含AEM Forms Java程式庫檔案

設定連接屬性

使用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 Forms Java程式庫檔案

設定連接屬性

使用Web服務API驗證數字簽名

使用簽名服務API(Web服務)驗證數字簽名:

  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服務API來驗證PDF文檔中的所有簽名。 驗證多個數字簽名時,您可以檢查每個簽名的狀態和屬性。 信任數字簽名之前,建議您驗證它。 建議您熟悉驗證單一數位簽名。

注意

有關簽名服務和驗證數字簽名的詳細資訊,請參閱AEM Forms服務參考

步驟的摘要

要驗證多個數字簽名,請執行以下任務:

  1. 包含專案檔案。
  2. 建立簽名客戶端。
  3. 取得包含要驗證之簽名的PDF檔案。
  4. 設定PKI運行時選項。
  5. 檢索所有數字簽名。
  6. 逐一查看所有簽名。

包含項目檔案

在您的開發專案中加入必要的檔案。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用Web服務,請包含代理檔案。

必須將以下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 Forms Java庫檔案

建立簽名客戶端

在以寫程式方式執行簽名服務操作之前,請建立簽名服務客戶端。

獲取包含要驗證的簽名的PDF文檔

要驗證用於數字簽名或認證PDF文檔的簽名,請獲取包含簽名的PDF文檔。

設定PKI運行時選項

設定簽名服務在驗證PDF文檔中的所有簽名時使用的以下PKI運行時選項:

  • 驗證時間
  • 吊銷檢查
  • 時間戳值

作為設定這些選項的一部分,您可以指定驗證時間。 例如,您可以選取目前時間(驗證器電腦上的時間),以指出要使用目前時間。 如需不同時間值的相關資訊,請參閱AEM Forms API參考中的VerificationTime列舉值。

您還可以指定是否在驗證過程中執行吊銷檢查。 例如,您可以執行吊銷檢查以確定證書是否被吊銷。 有關吊銷檢查選項的資訊,請參閱AEM Forms API Reference中的RevocationCheckStyle枚舉值。

要對證書執行吊銷檢查,請使用CRLOptionSpec對象指定證書吊銷清單(CRL)伺服器的URL。 但是,如果您沒有為CRL伺服器指定URL,則簽名服務將從證書中獲取該URL。

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

您可以通過使用Adobe應用程式和服務來設定簽名服務使用的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服務API驗證多個數字簽名

包含AEM Forms Java程式庫檔案

設定連接屬性

使用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 Forms Java程式庫檔案

驗證數字簽名

設定連接屬性

使用Web服務API驗證多個數字簽名

使用簽名服務API(Web服務)驗證多個數字簽名:

  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服務,請確定您包含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 Forms Java庫檔案

建立簽名客戶端

在以寫程式方式執行簽名服務操作之前,必須建立簽名服務客戶端。

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

要從PDF文檔中刪除簽名,必須獲取包含簽名的PDF文檔。

從簽名欄位中刪除數字簽名

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

將PDF檔案另存為PDF檔案

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

另請參閱

使用Java API移除數位簽名

使用Web服務API刪除數字簽名

包含AEM Forms Java程式庫檔案

設定連接屬性

添加簽名欄位

使用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 Forms Java程式庫檔案

設定連接屬性

使用Web服務API刪除數字簽名

使用簽名API(Web服務)刪除數字簽名:

  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.FileStream對象來建立System.IO.BinaryWriter對象。
    • 調用System.IO.BinaryWriter對象的Write方法並傳遞位元組陣列,將位元組陣列的內容寫入PDF檔案。

另請參閱

移除數位簽名

使用MTOM叫用AEM Forms

使用SwaRef叫用AEM Forms

本頁內容