使用書籤組合PDF檔案

您可以組合包含書籤的PDF檔案。 例如,假設您的PDF檔案不包含書籤,而您想要透過提供書籤來修改它。 使用Assembler服務,您可以傳遞不含書籤的PDF檔案,並傳回包含書籤的PDF檔案。

書籤包含下列屬性:

  • 在畫面上顯示為文字的標題。
  • 一種動作,指定當使用者點按書籤時會發生什麼。 書籤的典型動作是移至目前檔案中的其他位置,或開啟其他PDF檔案,但可指定其他動作。

在本討論中,假設使用了以下DDX文檔。

 <?xml version="1.0" encoding="UTF-8"?> 
 <DDX xmlns="https://ns.adobe.com/DDX/1.0/"> 
       <PDF result="FinalDoc.pdf"> 
          <PDF source="Loan.pdf"> 
             <Bookmarks source="doc2" /> 
          </PDF> 
       </PDF> 
 </DDX>

在此DDX文檔中,請注意源屬性被分配了值Loan.pdf。 此DDX文檔指定將單個PDF文檔傳遞到Assembler服務。 當將PDF檔案與書籤組合時,您必須指定書籤XML檔案,以說明結果檔案中的書籤。 若要指定書籤XML檔案,請確定Bookmarks元素已在DDX檔案中指定。

在此示例中,Bookmarks元素指定doc2作為值。 此值表示傳遞給Assembler服務的輸入映射包含名為doc2的鍵。 doc2鍵的值是com.adobe.idp.Document值,代表書籤XML檔案。 (請參閱Assembler Service和DDX Reference中的「書籤語言」。)

本主題使用下列XML書籤語言來組合包含書籤的PDF檔案。

 <?xml version="1.0" encoding="UTF-8"?> 
 <Bookmarks xmlns="https://ns.adobe.com/pdf/bookmarks" version="1.0"> 
       <Bookmark> 
          <Action> 
             <Launch NewWindow="true"> 
                <File Name="C:\Adobe\LoanDetails.pdf" /> 
             </Launch> 
          </Action> 
         <Title>Open the Loan document</Title> 
       </Bookmark> 
 <Bookmark> 
          <Action> 
             <Launch> 
                <Win Name="C:\WINDOWS\notepad.exe" /> 
             </Launch> 
          </Action> 
     <Title>Launch NotePad</Title> 
       </Bookmark> 
 </Bookmarks>

在此書籤XML檔案中,請注意「動作」元素,該元素定義當使用者按一下書籤時執行的動作。 在「動作」元素下方是「啟動」元素,可啟動應用程式(例如NotePad)並開啟檔案(例如PDF檔案)。 要開啟PDF檔案,必須使用指定要開啟的檔案的「檔案」元素。 例如,在本節中指定的書籤XML檔案中,開啟的檔案名稱為LoanDetails.pdf。

注意

有關支援操作的完整詳細資訊,請參閱匯編器服務和DDX參考中的「 Action元素」。

給定本節中指定的DDX文檔,並將XML檔案作為書籤輸入,Assembler服務會匯編包含以下書籤的PDF文檔。

aw_aw_bmark

當使用者按一下「開啟貸款詳細資訊​」書籤時,LoanDetails.pdf便會開啟。​同樣地,當使用者按一下​啟動NotePad​書籤時,NotePad就會啟動。

注意

在閱讀本節之前,建議您熟悉使用Assembler服務來組合PDF檔案。 本節不討論概念,例如建立包含輸入檔案的系列物件,或學習如何從傳回的系列物件擷取結果。 (請參閱程式設計匯整PDF檔案。)

注意

有關Assembler服務的詳細資訊,請參見AEM Forms的服務參考

注意

有關DDX文檔的詳細資訊,請參閱匯編器服務和DDX參考

步驟摘要

若要組合包含書籤的PDF檔案,請執行下列工作:

  1. 包含專案檔案。
  2. 建立PDF匯寫程式式用戶端。
  3. 參考現有的DDX檔案。
  4. 參考新增書籤的PDF檔案。
  5. 參考書籤XML檔案。
  6. 將PDF檔案和書籤XML檔案新增至Map系列。
  7. 設定執行時期選項。
  8. 組合PDF檔案。
  9. 儲存包含書籤的PDF檔案。

包含專案檔案

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

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

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

如果AEM Forms部署在JBoss以外的受支援J2EE應用程式伺服器上,則必須將adobe-utilities.jar和jbossall-client.jar檔案替換為AEM Forms部署在的J2EE應用程式伺服器專用的JAR檔案。 有關所有AEM FormsJAR檔案的位置資訊,請參見包括AEM FormsJava庫檔案

建立PDF匯寫程式式用戶端

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

參考現有的DDX檔案

必須參考DDX檔案才能組合PDF檔案。 此DDX檔案必須包含Bookmarks元素,以指示Assembler服務組合包含書籤的PDF。 (如需範例,請參閱本節稍早說明的DDX檔案)。

參考新增書籤的PDF檔案

參考新增書籤的PDF檔案。 參考的PDF檔案是否已包含書籤並不重要。 如果Bookmarks元素是PDF來源元素的子系,則書籤會取代PDF來源中已存在的元素。 不過,如果您想要保留現有書籤,請確定Bookmarks是PDF來源元素的同級。 例如,請考慮以下範例:

 <PDF result="foo"> 
      <PDF source="inDoc"/> 
      <Bookmarks source="doc2"/> 
 </PDF>

參考書籤XML檔案

若要組合包含新書籤的PDF,您必須參考書籤XML檔案。 書籤XML文檔會傳遞到Map收集對象內的Assembler服務。 (如需範例,請參閱本節稍早說明的書籤XML檔案。)

注意

請參閱Assembler Service和DDX Reference中的「書籤語言」。

將PDF檔案和書籤XML檔案新增至Map系列

您必須同時新增書籤的PDF檔案和書籤XML檔案至Map集合。 因此,Map收集物件包含兩個元素:PDF檔案與書籤XML檔案。

設定執行時期選項

您可以設定運行時選項,以控制Assembler服務在執行作業時的行為。 例如,您可以設定一個選項,指示Assembler服務在遇到錯誤時繼續處理作業。 有關可設定的運行時選項的資訊,請參閱AEM FormsAPI參考中的AssemblerOptionSpec類參考。

組合PDF檔案

若要組合包含新書籤的PDF檔案,請使用Assembler服務的invokeDDX操作。 您必須使用invokeDDX操作而非其他Assembler服務操作(如invokeOneDocument)的原因是,Assembler服務需要在Map收集對象中傳遞的書籤XML文檔。 此對象是invokeDDX操作的參數。

儲存包含書籤的PDF檔案

您必須從傳回的地圖物件擷取結果,並儲存對應的PDF檔案。 (請參閱Programmaly Assembling PDF Documents中的「擷取結果」。)

另請參閱

包含AEM FormsJava庫檔案

設定連接屬性

以程式設計方式組合PDF檔案

使用Java API使用書籤組合PDF檔案

使用Assembler Service API(Java)將PDF檔案與書籤組合:

  1. 包含專案檔案。

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

  2. 建立PDF匯寫程式式用戶端。

    • 建立包含連接屬性的ServiceClientFactory對象。 (請參閱設定連接屬性。)
    • 使用其建構子並傳遞ServiceClientFactory對象,建立AssemblerServiceClient對象。
  3. 參考現有的DDX檔案。

    • 使用DDX文檔的建構子並傳遞指定DDX檔案位置的字串值,建立代表DDX文檔的java.io.FileInputStream對象。
    • 使用其建構子並傳遞java.io.FileInputStream對象,建立com.adobe.idp.Document對象。
  4. 參考新增書籤的PDF檔案。

    • 使用其建構函式並傳遞PDF檔案的位置,以建立java.io.FileInputStream物件。
    • 使用其建構函式建立com.adobe.idp.Document物件,並傳遞包含PDF檔案的java.io.FileInputStream物件。
  5. 參考書籤XML檔案。

    • 使用其建構函式並傳遞代表書籤XML檔案的XML檔案位置,以建立java.io.FileInputStream物件。
    • 建立com.adobe.idp.Document物件並傳遞包含PDF檔案的java.io.FileInputStream物件。
  6. 將PDF檔案和書籤XML檔案新增至Map系列。

    • 建立java.util.Map物件,用來儲存輸入的PDF檔案和書籤的XML檔案。

    • 叫用java.util.Map物件的put方法並傳遞下列引數,以新增輸入的PDF檔案:

      • 代表索引鍵名稱的字串值。 此值必須與DDX檔案中指定之PDF來源元素的值相符。
      • 包含輸入PDF文檔的com.adobe.idp.Document對象。
    • 調用java.util.Map物件的put方法並傳遞下列引數,以新增書籤XML檔案:

      • 代表索引鍵名稱的字串值。 此值必須與DDX檔案中指定之書籤來源元素的值相符。
      • com.adobe.idp.Document物件,其中包含書籤XML檔案。
  7. 設定執行時期選項。

    • 使用其建構子建立一個AssemblerOptionSpec對象,該對象儲存運行時選項。
    • 通過調用屬於AssemblerOptionSpec對象的方法,設定運行時選項以滿足您的業務要求。 例如,若要指示Assembler服務在發生錯誤時繼續處理作業,請叫用AssemblerOptionSpec物件的setFailOnError方法並傳遞false
  8. 組合PDF檔案。

    叫用AssemblerServiceClient物件的invokeDDX方法並傳遞下列必要值:

    • com.adobe.idp.Document物件,代表要使用的DDX檔案
    • java.util.Map物件,其中包含輸入的PDF檔案和書籤的XML檔案。
    • com.adobe.livecycle.assembler.client.AssemblerOptionSpec物件,指定執行時間選項,包括預設字型和工作記錄層級

    invokeDDX方法返回一個com.adobe.livecycle.assembler.client.AssemblerResult對象,該對象包含作業的結果和發生的任何例外。

  9. 儲存包含書籤的PDF檔案。

    若要取得新建立的PDF檔案,請執行下列動作:

    • 叫用AssemblerResult物件的getDocuments方法。 這會傳回java.util.Map物件。
    • 重複java.util.Map物件,直到找到結果com.adobe.idp.Document物件。 (您可以使用DDX檔案中指定的PDF結果元素來取得檔案。)
    • 叫用com.adobe.idp.Document物件的copyToFile方法來擷取PDF檔案。

另請參閱

快速入門(SOAP模式):使用Java API將PDF檔案與書籤組合

包含AEM FormsJava庫檔案

設定連接屬性

使用web service API使用書籤來組合PDF檔案

使用Assembler Service API(web service),使用書籤組合PDF檔案:

  1. 包含專案檔案。

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

    注意

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

  2. 建立PDF匯寫程式式用戶端。

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

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

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

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

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

      • 將表AEM單用戶名分配給欄位AssemblerServiceClient.ClientCredentials.UserName.UserName
      • 將相應的口令值分配給欄位AssemblerServiceClient.ClientCredentials.UserName.Password
      • 將常數值HttpClientCredentialType.Basic分配給欄位BasicHttpBindingSecurity.Transport.ClientCredentialType
      • 將常數值BasicHttpSecurityMode.TransportCredentialOnly分配給欄位BasicHttpBindingSecurity.Security.Mode
  3. 參考現有的DDX檔案。

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

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

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

    • 建立MyMapOf_xsd_string_To_xsd_anyType對象。 此收集物件用來儲存輸入的PDF檔案和書籤的XML檔案。
    • 對於每個輸入的PDF檔案和書籤XML檔案,請建立MyMapOf_xsd_string_To_xsd_anyType_Item物件。
    • MyMapOf_xsd_string_To_xsd_anyType_Item對象的key欄位分配代表鍵名的字串值。 此值必須與DDX檔案中指定之PDF來源元素的值相符。
    • 將儲存PDF文檔的BLOB對象指定給MyMapOf_xsd_string_To_xsd_anyType_Item對象的value欄位。
    • MyMapOf_xsd_string_To_xsd_anyType_Item對象添加到MyMapOf_xsd_string_To_xsd_anyType對象。 調用MyMapOf_xsd_string_To_xsd_anyType對象的Add方法並傳遞MyMapOf_xsd_string_To_xsd_anyType對象。 (請對每個輸入的PDF檔案和書籤XML檔案執行此工作)。
  7. 設定執行時期選項。

    • 使用其建構子建立一個AssemblerOptionSpec對象,該對象儲存運行時選項。
    • 通過為屬於AssemblerOptionSpec對象的資料成員分配值,設定運行時選項以滿足您的業務要求。 例如,要指示Assembler服務在出現錯誤時繼續處理作業,請將false分配給AssemblerOptionSpec對象的failOnError資料成員。
  8. 組合PDF檔案。

    叫用AssemblerServiceClient物件的invokeDDX方法並傳遞下列值:

    • 代表DDX文檔的BLOB對象
    • 包含輸入文檔的MyMapOf_xsd_string_To_xsd_anyType陣列
    • 指定運行時選項的AssemblerOptionSpec對象

    invokeDDX方法返回一個AssemblerResult對象,該對象包含作業的結果和可能發生的任何例外。

  9. 儲存包含書籤的PDF檔案。

    若要取得新建立的PDF檔案,請執行下列動作:

    • 存取AssemblerResult物件的documents欄位,此欄位是包含結果PDF檔案的Map物件。
    • 重複Map物件,直到找到與結果檔案名稱相符的索引鍵。 然後將該陣列成員的value轉換為BLOB
    • 存取PDF檔案的BLOB物件的MTOM欄位,擷取代表PDF檔案的二進位資料。 這會傳回可寫出至PDF檔案的位元組陣列。

另請參閱

使用MTOM叫用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