動態建立DDX檔案 dynamically-creating-ddx-documents

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

您可以動態建立可用來執行Assembler作業的DDX檔案。 動態建立DDX檔案可讓您使用在執行階段取得的DDX檔案中的值。 若要動態建立DDX檔案,請使用屬於您使用之程式語言的類別。 例如,如果您使用Java開發使用者端應用程式,請使用屬於 org.w3c.dom.*封裝。 同樣地,如果您使用Microsoft .NET,請使用屬於 System.Xml 名稱空間。

在您將DDX檔案傳遞至組合器服務之前,請先將XML從 org.w3c.dom.Document 執行個體變更為一個 com.adobe.idp.Document 執行個體。 如果您使用Web服務,請轉換用來建立XML的資料型別(例如, XmlDocument)至 BLOB 執行個體。

對於此討論,假設已動態建立下列DDX檔案。

 <?xml version="1.0" encoding="UTF-8"?>
 <DDX xmlns="https://ns.adobe.com/DDX/1.0/">
      <PDFsFromBookmarks prefix="stmt">
     <PDF source="AssemblerResultPDF.pdf"/>
 </PDFsFromBookmarks>
 </DDX>

此DDX檔案會拆解PDF檔案。 建議您熟悉PDF檔案的解譯作業。

NOTE
如需有關組合器服務的詳細資訊,請參閱 AEM Forms服務參考.
NOTE
如需有關DDX檔案的詳細資訊,請參閱 組合器服務和DDX參考.

步驟摘要 summary-of-steps

若要使用動態建立的DDX檔案來分解PDF檔案,請執行下列工作:

  1. 包含專案檔案。
  2. 建立PDF組合器使用者端。
  3. 建立DDX檔案。
  4. 轉換DDX檔案。
  5. 設定執行階段選項。
  6. 拆解PDF檔案。
  7. 儲存已拆解的PDF檔案。

包含專案檔案

在您的開發專案中包含必要的檔案。 如果您使用Java建立使用者端應用程式,請包含必要的JAR檔案。 如果您使用Web服務,請確定您包含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上,則為必要)

建立PDF組合器使用者端

在您以程式設計方式執行組合器作業之前,請先建立組合器服務使用者端。

建立DDX檔案

使用您使用的程式語言建立DDX檔案。 若要建立可拆卸PDF檔案的DDX檔案,請確保該檔案包含 PDFsFromBookmarks 元素。 將用於建立DDX檔案的資料型別轉換為 com.adobe.idp.Document 例項。 如果您使用網站服務,請將資料型別轉換為 BLOB 執行個體。

轉換DDX檔案

使用建立的DDX檔案 org.w3c.dom 類別必須轉換為 com.adobe.idp.Document 物件。 若要在使用Java API時執行此工作,請使用Java XML轉換類別。 如果您使用Web服務,請將DDX檔案轉換為 BLOB 物件。

參照PDF檔案以分解

若要拆解PDF檔案,請參照代表要拆解PDF檔案的PDF檔案。 當傳遞至Assembler服務時,會針對檔案中的每個1級書籤傳回個別的PDF檔案。

設定執行階段選項

您可以設定執行階段選項,控制Assembler服務執行工作時的行為。 例如,您可以設定一個選項,在遇到錯誤時指示Assembler服務繼續處理工作。 若要設定執行階段選項,請使用 AssemblerOptionSpec 物件。

拆解PDF檔案

透過叫用拆卸PDF檔案 invokeDDX 作業。 傳遞動態建立的DDX檔案。 Assembler服務會傳回集合物件中已拆解的PDF檔案。

儲存已拆解的PDF檔案

所有已拆解的PDF檔案都會在集合物件中傳回。 逐一檢視集合物件,並將每個PDF檔案儲存為PDF檔案。

另請參閱

使用Java API動態建立DDX檔案

使用網站服務API動態建立DDX檔案

包含AEM Forms Java程式庫檔案

設定連線屬性

以程式分解的PDF檔案

使用Java API動態建立DDX檔案 dynamically-create-a-ddx-document-using-the-java-api

使用組合器服務API (Java)動態建立DDX檔案並分解PDF檔案:

  1. 包含專案檔案。

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

  2. 建立PDF組合器使用者端。

    • 建立 ServiceClientFactory 包含連線屬性的物件。
    • 建立 AssemblerServiceClient 物件,使用它的建構函式並傳遞 ServiceClientFactory 物件。
  3. 建立DDX檔案。

    • 建立Java DocumentBuilderFactory 物件,方法是呼叫 DocumentBuilderFactory 類別' newInstance 方法。

    • 建立Java DocumentBuilder 物件,方法是呼叫 DocumentBuilderFactory 物件的 newDocumentBuilder 方法。

    • 呼叫 DocumentBuilder 物件的 newDocument 具現化的方法 org.w3c.dom.Document 物件。

    • 透過叫用 org.w3c.dom.Document 物件的 createElement 方法。 此方法會建立 Element 代表根元素的物件。 將代表元素名稱的字串值傳遞至 createElement 方法。 將傳回值轉換為 Element. 接著,呼叫其子元素以設定其值 setAttribute 方法。 最後,呼叫標題元素的 appendChild 方法,並將子元素物件作為引數傳遞。 下列幾行程式碼會顯示此應用程式邏輯:

       Element root = (Element)document.createElement("DDX");  root.setAttribute("xmlns","https://ns.adobe.com/DDX/1.0/");  document.appendChild(root);

    • 建立 PDFsFromBookmarks 元素,方法是呼叫 Document 物件的 createElement 方法。 將代表元素名稱的字串值傳遞至 createElement 方法。 將傳回值轉換為 Element. 設定值 PDFsFromBookmarks 元素(透過呼叫其 setAttribute 方法。 附加 PDFsFromBookmarks 元素至 DDX 元素,方法是呼叫DDX元素的 appendChild 方法。 傳遞 PDFsFromBookmarks 元素物件做為引數。 下列幾行程式碼會顯示此應用程式邏輯:

       Element PDFsFromBookmarks = (Element)document.createElement("PDFsFromBookmarks");  PDFsFromBookmarks.setAttribute("prefix","stmt");  root.appendChild(PDFsFromBookmarks);

    • 建立 PDF 元素,方法是呼叫 Document 物件的 createElement 方法。 傳遞代表元素名稱的字串值。 將傳回值轉換為 Element. 設定值 PDF 元素(透過呼叫其 setAttribute 方法。 附加 PDF 元素至 PDFsFromBookmarks 元素,方法是呼叫 PDFsFromBookmarks 元素的 appendChild 方法。 傳遞 PDF 元素物件做為引數。 下列幾行程式碼會顯示此應用程式邏輯:

       Element PDF = (Element)document.createElement("PDF");  PDF.setAttribute("source","AssemblerResultPDF.pdf");  PDFsFromBookmarks.appendChild(PDF);

  4. 轉換DDX檔案。

    • 建立 javax.xml.transform.Transformer 物件(透過叫用 javax.xml.transform.Transformer 物件的靜態 newInstance 方法。
    • 建立 Transformer 物件(透過叫用 TransformerFactory 物件的 newTransformer 方法。
    • 建立 ByteArrayOutputStream 物件(使用其建構函式)。
    • 建立 javax.xml.transform.dom.DOMSource 物件(使用其建構函式)。 傳遞 org.w3c.dom.Document 代表DDX檔案的物件。
    • 建立 javax.xml.transform.dom.DOMSource 物件,使用它的建構函式並傳遞 ByteArrayOutputStream 物件。
    • 填入Java ByteArrayOutputStream 物件(透過叫用 javax.xml.transform.Transformer 物件的 transform 方法。 傳遞 javax.xml.transform.dom.DOMSourcejavax.xml.transform.stream.StreamResult 物件。
    • 建立位元組陣列並配置的大小 ByteArrayOutputStream 物件至位元組陣列。
    • 透過叫用「 」填入位元組陣列 ByteArrayOutputStream 物件的 toByteArray 方法。
    • 建立 com.adobe.idp.Document 物件,使用它的建構函式並傳遞位元組陣列。
  5. 參照要拆解的PDF檔案。

    • 建立 java.util.Map 使用儲存輸入PDF檔案的物件 HashMap 建構函式。

    • 建立 java.io.FileInputStream 物件,使用它的建構函式並傳遞PDF檔案的位置以進行拆解。

    • 建立 com.adobe.idp.Document 物件。 傳遞 java.io.FileInputStream 包含要拆解之PDF檔案的物件。

    • 將專案新增至 java.util.Map 物件(透過叫用其 put 方法並傳遞下列引數:

      • 代表索引鍵名稱的字串值。 此值必須符合DDX檔案中指定的PDF來源元素的值。 (在動態建立的DDX檔案中,值為 AssemblerResultPDF.pdf.)
      • A com.adobe.idp.Document 包含要拆解之PDF檔案的物件。
  6. 設定執行階段選項。

    • 建立 AssemblerOptionSpec 使用建構函式來儲存執行階段選項的物件。
    • 透過叫用屬於下列專案的方法,設定執行階段選項以符合您的業務需求 AssemblerOptionSpec 物件。 例如,若要指示Assembler服務在發生錯誤時繼續處理工作,請叫用 AssemblerOptionSpec 物件的 setFailOnError 方法與傳遞 false.
  7. 拆解PDF檔案。

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

    • A com.adobe.idp.Document 代表動態建立DDX檔案的物件
    • A java.util.Map 包含PDF檔案的物件進行拆解
    • A com.adobe.livecycle.assembler.client.AssemblerOptionSpec 指定執行階段選項的物件,包括預設字型和作業記錄層級

    invokeDDX 方法傳回 com.adobe.livecycle.assembler.client.AssemblerResult 物件,其中包含已解譯的PDF檔案以及發生的任何例外狀況。

  8. 儲存已拆解的PDF檔案。

    若要取得已拆解的PDF檔案,請執行下列動作:

    • 叫用 AssemblerResult 物件的 getDocuments 方法。 此方法會傳回 java.util.Map 物件。
    • 逐一檢視 java.util.Map 物件,直到您找到結果為止 com.adobe.idp.Document 物件。
    • 叫用 com.adobe.idp.Document 物件的 copyToFile 用於擷取PDF檔案的方法。

另請參閱

快速入門(SOAP模式):使用Java API動態建立DDX檔案

包含AEM Forms Java程式庫檔案

設定連線屬性

使用網站服務API動態建立DDX檔案 dynamically-create-a-ddx-document-using-the-web-service-api

使用Assembler Service API (Web服務)動態建立DDX檔案並分解PDF檔案:

  1. 包含專案檔案。

    建立使用MTOM的Microsoft .NET專案。 設定服務參考時,請務必使用下列WSDL定義: http://localhost:8080/soap/services/AssemblerService?WSDL&lc_version=9.0.1.

    note note
    NOTE
    取代 localhost 搭配託管AEM Forms之伺服器的IP位址。
  2. 建立PDF組合器使用者端。

    • 建立 AssemblerServiceClient 物件,使用它的預設建構函式。

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

    • 建立 System.ServiceModel.BasicHttpBinding 物件,方法是取得 AssemblerServiceClient.Endpoint.Binding 欄位。 將傳回值轉換為 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檔案。

    • 建立 System.Xml.XmlElement 物件(使用其建構函式)。

    • 透過叫用 XmlElement 物件的 CreateElement 方法。 此方法會建立 Element 代表根元素的物件。 將代表元素名稱的字串值傳遞至 CreateElement 方法。 呼叫DDX元素的 SetAttribute 方法。 最後,透過呼叫 XmlElement 物件的 AppendChild 方法。 傳遞DDX物件作為引數。 下列幾行程式碼會顯示此應用程式邏輯:

       System.Xml.XmlElement root = ddx.CreateElement("DDX");  root.SetAttribute("xmlns", "https://ns.adobe.com/DDX/1.0/");  ddx.AppendChild(root);

    • 建立DDX檔案的 PDFsFromBookmarks 元素,方法是呼叫 XmlElement 物件的 CreateElement 方法。 將代表元素名稱的字串值傳遞至 CreateElement 方法。 接著,呼叫元素的 SetAttribute 方法。 附加 PDFsFromBookmarks 元素至根元素,方法是呼叫 DDX 元素的 AppendChild 方法。 傳遞 PDFsFromBookmarks 元素物件做為引數。 下列幾行程式碼會顯示此應用程式邏輯:

       XmlElement PDFsFromBookmarks = ddx.CreateElement("PDFsFromBookmarks");  PDFsFromBookmarks.SetAttribute("prefix", "stmt");  root.AppendChild(PDFsFromBookmarks);

    • 建立DDX檔案的 PDF 元素,方法是呼叫 XmlElement 物件的 CreateElement 方法。 將代表元素名稱的字串值傳遞至 CreateElement 方法。 接著,呼叫其子元素以設定其值 SetAttribute 方法。 附加 PDF 元素至 PDFsFromBookmarks 元素,方法是呼叫 PDFsFromBookmarks 元素的 AppendChild 方法。 傳遞 PDF 元素物件做為引數。 下列幾行程式碼會顯示此應用程式邏輯:

       XmlElement PDF = ddx.CreateElement("PDF");  PDF.SetAttribute("source", "AssemblerResultPDF.pdf");  PDFsFromBookmarks.AppendChild(PDF);

  4. 轉換DDX檔案。

    • 建立 System.IO.MemoryStream 物件(使用其建構函式)。

    • 填入 MemoryStream 物件與DDX檔案,請使用 XmlElement 代表DDX檔案的物件。 叫用 XmlElement 物件的 Save 方法並傳遞 MemoryStream 物件。

    • 建立位元組陣列,並在其中填入資料 MemoryStream 物件。 下列程式碼顯示此應用程式邏輯:

       int bufLen = Convert.ToInt32(stream.Length);  byte[] byteArray = new byte[bufLen];  stream.Position = 0;  int count = stream.Read(byteArray, 0, bufLen);

    • 建立 BLOB 物件。 將位元組陣列指派給 BLOB 物件的 MTOM 欄位。

  5. 參照要拆解的PDF檔案。

    • 建立 BLOB 物件(使用其建構函式)。 此 BLOB 物件是用來儲存輸入PDF檔案。 這個 BLOB 物件傳遞至 invokeOneDocument 作為引數。
    • 建立 System.IO.FileStream 物件,透過叫用它的建構函式。 傳遞代表輸入PDF檔案的檔案位置以及開啟檔案的模式的字串值。
    • 建立位元組陣列,儲存 System.IO.FileStream 物件。 您可以取得 System.IO.FileStream 物件的 Length 屬性。
    • 透過叫用 System.IO.FileStream 物件的 Read 方法,並傳遞位元組陣列、起始位置以及要讀取的資料流長度。
    • 填入 BLOB 物件,透過指派其 MTOM 屬性位元組陣列的內容。
  6. 設定執行階段選項。

    • 建立 AssemblerOptionSpec 使用建構函式來儲存執行階段選項的物件。
    • 將值指派給屬於下列專案的資料成員,以設定執行階段選項以符合您的業務需求 AssemblerOptionSpec 物件。 例如,若要指示Assembler服務在發生錯誤時繼續處理工作,請指派 falseAssemblerOptionSpec 物件的 failOnError 資料成員。
  7. 拆解PDF檔案。

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

    • A BLOB 代表動態建立DDX檔案的物件
    • mapItem 包含輸入PDF檔案的陣列
    • 一個 AssemblerOptionSpec 指定執行階段選項的物件

    invokeDDX 方法傳回 AssemblerResult 包含工作結果和發生之任何例外狀況的物件。

  8. 儲存已拆解的PDF檔案。

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

    • 存取 AssemblerResult 物件的 documents 欄位,即 Map 包含已拆解PDF檔案的物件。
    • 逐一檢視 Map 物件以取得每個產生的檔案。 然後,轉換該陣列成員的 valueBLOB.
    • 存取代表PDF檔案的二進位資料 BLOB 物件的 MTOM 屬性。 這會傳回您可以寫出至PDF檔案的位元組陣列。

另請參閱

使用MTOM叫用AEM Forms

使用SwaRef叫用AEM Forms

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2