您可以動態建立DDX文檔,該文檔可用於執行組合器操作。 動態建立DDX文檔使您能夠使用在運行時獲取的DDX文檔中的值。 要動態建立DDX文檔,請使用屬於您所使用的寫程式語言的類。 例如,如果您使用Java開發客戶端應用程式,請使用屬於org.w3c.dom.*
包的類。 同樣,如果使用Microsoft .NET,請使用屬於System.Xml
命名空間的類。
在將DDX文檔傳遞到組合器服務之前,請將XML從org.w3c.dom.Document
實例轉換為com.adobe.idp.Document
實例。 如果您使用Web服務,請將XML從用於建立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檔案的解體。
有關組合器服務的詳細資訊,請參閱AEM Forms的服務參考。
有關DDX文檔的詳細資訊,請參閱組合器服務和DDX引用。
要使用動態建立的DDX文檔來拆解PDF文檔,請執行以下任務:
包含項目檔案
在您的開發專案中加入必要的檔案。 如果您是使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用Web服務,請確定您包含Proxy檔案。
必須將以下JAR檔案添加到項目的類路徑中:
建立PDF組合器客戶端
在以寫程式方式執行組合器操作之前,請建立組合器服務客戶端。
建立DDX文檔
使用您使用的寫程式語言建立DDX文檔。 要建立分解PDF文檔的DDX文檔,請確保它包含PDFsFromBookmarks
元素。 如果您使用Java API,請將用於建立DDX文檔的資料類型轉換為com.adobe.idp.Document
實例。 如果您使用Web服務,請將資料類型轉換為BLOB
實例。
轉換DDX文檔
使用org.w3c.dom
類建立的DDX文檔必須轉換為com.adobe.idp.Document
對象。 要在使用Java API時執行此任務,請使用Java XML轉換類。 如果您使用Web服務,請將DDX文檔轉換為BLOB
對象。
參考要拆卸的PDF文檔
要拆解PDF文檔,請參照表示要拆解的PDF文檔的PDF檔案。 當傳遞到組合器服務時,將為文檔中的每個級別1書籤返回一個單獨的PDF文檔。
設定運行時選項
您可以設定運行時選項,以控制組合器服務在執行作業時的行為。 例如,您可以設定一個選項,指示組合器服務在遇到錯誤時繼續處理作業。 要設定運行時選項,請使用AssemblerOptionSpec
對象。
反匯編PDF文檔
叫用invokeDDX
操作,拆解PDF文檔。 傳遞動態建立的DDX檔案。 組合器服務返回集合對象內已拆解的PDF文檔。
儲存已拆解的PDF檔案
所有已拆解的PDF文檔都在收集對象中返回。 逐一查看集合物件,並將每個PDF檔案儲存為PDF檔案。
另請參閱
使用組合器服務API(Java)動態建立DDX文檔和拆解PDF文檔:
包含專案檔案。
在Java項目的類路徑中包含客戶端JAR檔案,如adobe-assembler-client.jar。
建立PDF組合器客戶端。
ServiceClientFactory
對象。ServiceClientFactory
物件,以建立AssemblerServiceClient
物件。建立DDX文檔。
通過調用DocumentBuilderFactory
類newInstance
方法建立Java DocumentBuilderFactory
對象。
通過調用DocumentBuilderFactory
對象的newDocumentBuilder
方法建立Java DocumentBuilder
對象。
呼叫DocumentBuilder
物件的newDocument
方法以實例化org.w3c.dom.Document
物件。
調用org.w3c.dom.Document
對象的createElement
方法,建立DDX文檔的根元素。 此方法會建立代表根元素的Element
物件。 將代表元素名稱的字串值傳遞至createElement
方法。 將傳回值轉換為Element
。 接下來,通過調用其setAttribute
方法來設定子元素的值。 最後,呼叫標頭元素的appendChild
方法,將元素附加至標頭元素,並將子元素物件作為引數傳遞。 下列幾行程式碼會顯示此應用程式邏輯:
Element root = (Element)document.createElement("DDX"); root.setAttribute("xmlns","https://ns.adobe.com/DDX/1.0/"); document.appendChild(root);
呼叫Document
物件的createElement
方法,以建立PDFsFromBookmarks
元素。 將代表元素名稱的字串值傳遞至createElement
方法。 將傳回值轉換為Element
。 呼叫setAttribute
方法,以設定PDFsFromBookmarks
元素的值。 呼叫DDX元素的appendChild
方法,將PDFsFromBookmarks
元素附加至DDX
元素。 將PDFsFromBookmarks
元素物件作為引數傳遞。 下列幾行程式碼會顯示此應用程式邏輯:
Element PDFsFromBookmarks = (Element)document.createElement("PDFsFromBookmarks"); PDFsFromBookmarks.setAttribute("prefix","stmt"); root.appendChild(PDFsFromBookmarks);
呼叫Document
物件的createElement
方法,以建立PDF
元素。 傳遞代表元素名稱的字串值。 將傳回值轉換為Element
。 呼叫setAttribute
方法,以設定PDF
元素的值。 呼叫PDFsFromBookmarks
元素的appendChild
方法,將PDF
元素附加至PDFsFromBookmarks
元素。 將PDF
元素物件作為引數傳遞。 以下幾行代碼顯示此應用程式邏輯:
Element PDF = (Element)document.createElement("PDF"); PDF.setAttribute("source","AssemblerResultPDF.pdf"); PDFsFromBookmarks.appendChild(PDF);
轉換DDX文檔。
javax.xml.transform.Transformer
對象的靜態newInstance
方法,建立javax.xml.transform.Transformer
對象。TransformerFactory
對象的newTransformer
方法,建立Transformer
對象。ByteArrayOutputStream
物件。javax.xml.transform.dom.DOMSource
物件。 傳遞代表DDX文檔的org.w3c.dom.Document
對象。ByteArrayOutputStream
物件,以建立javax.xml.transform.dom.DOMSource
物件。javax.xml.transform.Transformer
物件的transform
方法,填入Java ByteArrayOutputStream
物件。 傳遞javax.xml.transform.dom.DOMSource
和javax.xml.transform.stream.StreamResult
物件。ByteArrayOutputStream
對象的大小分配給位元組陣列。ByteArrayOutputStream
物件的toByteArray
方法,填入位元組陣列。com.adobe.idp.Document
物件。參考要拆卸的PDF文檔。
使用HashMap
建構子建立用於儲存輸入PDF文檔的java.util.Map
對象。
使用其建構子並將PDF檔案的位置傳遞至反匯編,以建立java.io.FileInputStream
物件。
建立com.adobe.idp.Document
物件。 將包含PDF文檔的java.io.FileInputStream
對象傳遞至反匯編。
調用put
方法並傳遞以下參數,將條目添加到java.util.Map
對象中:
AssemblerResultPDF.pdf
。)com.adobe.idp.Document
物件,包含要拆解的PDF檔案。設定運行時選項。
AssemblerOptionSpec
物件,以儲存執行時選項。AssemblerOptionSpec
對象的方法來設定運行時選項以滿足您的業務要求。 例如,要指示組合器服務在發生錯誤時繼續處理作業,請調用AssemblerOptionSpec
對象的setFailOnError
方法並傳遞false
。反匯編PDF文檔。
調用AssemblerServiceClient
對象的invokeDDX
方法並傳遞以下值:
com.adobe.idp.Document
對象,表示動態建立的DDX文檔java.util.Map
對象com.adobe.livecycle.assembler.client.AssemblerOptionSpec
對象,它指定運行時選項,包括預設字型和作業日誌級別invokeDDX
方法返回一個com.adobe.livecycle.assembler.client.AssemblerResult
對象,該對象包含已拆解的PDF文檔以及發生的任何異常。
儲存已拆解的PDF檔案。
要獲取已拆解的PDF文檔,請執行以下操作:
AssemblerResult
對象的getDocuments
方法。 此方法會傳回java.util.Map
物件。java.util.Map
對象進行迭代,直到找到結果com.adobe.idp.Document
對象。com.adobe.idp.Document
對象的copyToFile
方法以提取PDF文檔。另請參閱
快速入門(SOAP模式):使用Java API動態建立DDX檔案
使用組合器服務API(Web服務)動態建立DDX文檔並拆解PDF文檔:
包含專案檔案。
建立使用MTOM的Microsoft .NET項目。 在設定服務引用時,請確保使用以下WSDL定義:http://localhost:8080/soap/services/AssemblerService?WSDL&lc_version=9.0.1
。
將localhost
取代為托管AEM Forms之伺服器的IP位址。
建立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身份驗證:
AssemblerServiceClient.ClientCredentials.UserName.UserName
。AssemblerServiceClient.ClientCredentials.UserName.Password
。HttpClientCredentialType.Basic
指派給欄位BasicHttpBindingSecurity.Transport.ClientCredentialType
。BasicHttpSecurityMode.TransportCredentialOnly
指派給欄位BasicHttpBindingSecurity.Security.Mode
。建立DDX文檔。
使用其建構子建立System.Xml.XmlElement
物件。
調用XmlElement
對象的CreateElement
方法,建立DDX文檔的根元素。 此方法會建立代表根元素的Element
物件。 將代表元素名稱的字串值傳遞至CreateElement
方法。 通過調用其SetAttribute
方法來設定DDX元素的值。 最後,通過調用XmlElement
對象的AppendChild
方法將元素附加到DDX文檔。 將DDX物件作為引數傳遞。 下列幾行程式碼會顯示此應用程式邏輯:
System.Xml.XmlElement root = ddx.CreateElement("DDX"); root.SetAttribute("xmlns", "https://ns.adobe.com/DDX/1.0/"); ddx.AppendChild(root);
通過調用XmlElement
對象的CreateElement
方法,建立DDX文檔的PDFsFromBookmarks
元素。 將代表元素名稱的字串值傳遞至CreateElement
方法。 接下來,呼叫元素的SetAttribute
方法,以設定元素的值。 呼叫DDX
元素的AppendChild
方法,將PDFsFromBookmarks
元素附加至根元素。 將PDFsFromBookmarks
元素物件作為引數傳遞。 下列幾行程式碼會顯示此應用程式邏輯:
XmlElement PDFsFromBookmarks = ddx.CreateElement("PDFsFromBookmarks"); PDFsFromBookmarks.SetAttribute("prefix", "stmt"); root.AppendChild(PDFsFromBookmarks);
通過調用XmlElement
對象的CreateElement
方法,建立DDX文檔的PDF
元素。 將代表元素名稱的字串值傳遞至CreateElement
方法。 接下來,通過調用其SetAttribute
方法來設定子元素的值。 呼叫PDFsFromBookmarks
元素的AppendChild
方法,將PDF
元素附加至PDFsFromBookmarks
元素。 將PDF
元素物件作為引數傳遞。 以下幾行代碼顯示此應用程式邏輯:
XmlElement PDF = ddx.CreateElement("PDF"); PDF.SetAttribute("source", "AssemblerResultPDF.pdf"); PDFsFromBookmarks.AppendChild(PDF);
轉換DDX文檔。
使用其建構子建立System.IO.MemoryStream
物件。
使用代表DDX文檔的XmlElement
對象,用DDX文檔填充MemoryStream
對象。 調用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
欄位。
參考要拆卸的PDF文檔。
BLOB
物件。 BLOB
對象用於儲存輸入的PDF文檔。 此BLOB
物件會以引數的形式傳遞至invokeOneDocument
。System.IO.FileStream
對象的建構子以建立對象。 傳遞一個字串值,該字串值表示輸入PDF文檔的檔案位置以及開啟檔案的模式。System.IO.FileStream
對象內容的位元組陣列。 通過獲取System.IO.FileStream
對象的Length
屬性,可以確定位元組陣列的大小。System.IO.FileStream
對象的Read
方法並傳遞要讀取的位元組陣列、啟動位置和流長度,以流資料填充位元組陣列。MTOM
屬性,以填入BLOB
物件。設定運行時選項。
AssemblerOptionSpec
物件,以儲存執行時選項。AssemblerOptionSpec
對象的資料成員分配值,以設定運行時選項以滿足您的業務要求。 例如,要指示組合器服務在發生錯誤時繼續處理作業,請將false
分配給AssemblerOptionSpec
對象的failOnError
資料成員。反匯編PDF文檔。
調用AssemblerServiceClient
對象的invokeDDX
方法並傳遞以下值:
BLOB
對象,表示動態建立的DDX文檔mapItem
陣列AssemblerOptionSpec
對象invokeDDX
方法返回一個AssemblerResult
對象,該對象包含作業的結果和發生的任何異常。
儲存已拆解的PDF檔案。
要獲取新建立的PDF文檔,請執行以下操作:
AssemblerResult
對象的documents
欄位,該欄位是包含已拆解的PDF文檔的Map
對象。Map
對象,以獲取每個結果文檔。 然後,將該陣列成員的value
轉換為BLOB
。BLOB
對象的MTOM
屬性來提取表示PDF文檔的二進位資料。 這會傳回可寫出為PDF檔案的位元組陣列。另請參閱