動態建立DDX文檔 dynamically-creating-ddx-documents
您可以動態建立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文檔。
步驟摘要 summary-of-steps
要使用動態建立的DDX文檔來拆解PDF文檔,請執行以下任務:
- 包含專案檔案。
- 建立PDF組合器客戶端。
- 建立DDX文檔。
- 轉換DDX文檔。
- 設定運行時選項。
- 拆解PDF文檔。
- 保存已拆解的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文檔
使用 org.w3c.dom 類別必須轉換為 com.adobe.idp.Document 物件。 要在使用Java API時執行此任務,請使用Java XML轉換類。 如果您使用Web服務,請將DDX文檔轉換為 BLOB 物件。
參考要拆解的PDF文檔
要拆解PDF文檔,請參考表示要拆解的PDF文檔的PDF檔案。 當傳遞到組合器服務時,將為文檔中的每個級別1書籤返回一個單獨的PDF文檔。
設定運行時選項
您可以設定運行時選項,以控制組合器服務在執行作業時的行為。 例如,您可以設定一個選項,指示組合器服務在遇到錯誤時繼續處理作業。 若要設定執行時選項,請使用 AssemblerOptionSpec 物件。
拆解PDF文檔
通過調用 invokeDDX 操作。 傳遞動態建立的DDX檔案。 組合器服務返回集合對象中已拆解的PDF文檔。
保存已拆解的PDF文檔
所有已拆解的PDF文檔都返回在收集對象中。 逐一查看集合物件,並將每個PDF檔案儲存為PDF檔案。
另請參閱
使用Java API動態建立DDX檔案 dynamically-create-a-ddx-document-using-the-java-api
使用組合器服務API(Java)動態建立DDX文檔和拆解PDF文檔:
-
包含專案檔案。
在Java項目的類路徑中包含客戶端JAR檔案,如adobe-assembler-client.jar。
-
建立PDF組合器客戶端。
- 建立
ServiceClientFactory包含連接屬性的對象。 - 建立
AssemblerServiceClient對象,使用其建構子並傳遞ServiceClientFactory物件。
- 建立
-
建立DDX文檔。
-
建立Java
DocumentBuilderFactory物件,方法是呼叫DocumentBuilderFactoryclassnewInstance方法。 -
建立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元素,方法是呼叫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);
-
-
轉換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.DOMSource和javax.xml.transform.stream.StreamResult對象。 - 建立位元組陣列,並分配
ByteArrayOutputStream位元組陣列的物件。 - 叫用
ByteArrayOutputStream物件toByteArray方法。 - 建立
com.adobe.idp.Document物件,方法是使用其建構子並傳遞位元組陣列。
- 建立
-
參考要拆卸的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文檔的對象。
- 代表索引鍵名稱的字串值。 此值必須與DDX文檔中指定的PDF源元素的值匹配。 (在動態建立的DDX檔案中,值為
-
-
設定運行時選項。
- 建立
AssemblerOptionSpec使用其建構子儲存執行時選項的物件。 - 通過調用屬於的方法來設定運行時選項以滿足您的業務需求
AssemblerOptionSpec物件。 例如,要指示組合器服務在發生錯誤時繼續處理作業,請調用AssemblerOptionSpec物件setFailOnError方法和傳遞false.
- 建立
-
拆解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文檔和發生的任何例外的對象。 - A
-
保存已拆解的PDF文檔。
要獲取已拆解的PDF文檔,請執行以下操作:
- 叫用
AssemblerResult物件getDocuments方法。 此方法會傳回java.util.Map物件。 - 重複
java.util.Map對象,直到找到結果com.adobe.idp.Document物件。 - 叫用
com.adobe.idp.Document物件copyToFile方法來擷取PDF檔案。
- 叫用
另請參閱
使用Web服務API動態建立DDX檔案 dynamically-create-a-ddx-document-using-the-web-service-api
使用組合器服務API(Web服務)動態建立DDX文檔並拆解PDF文檔:
-
包含專案檔案。
建立使用MTOM的Microsoft .NET專案。 在設定服務引用時,請確保使用以下WSDL定義:
http://localhost:8080/soap/services/AssemblerService?WSDL&lc_version=9.0.1.note note NOTE 取代 localhost和托管AEM Forms之伺服器的IP位址。 -
建立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.
- 將AEM表單使用者名稱指派給欄位
-
-
建立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);
-
-
轉換DDX文檔。
-
建立
System.IO.MemoryStream物件,使用其建構子。 -
填入
MemoryStream對象,使用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欄位。
-
-
參考要拆卸的PDF文檔。
- 建立
BLOB物件,使用其建構子。 此BLOB對象用於儲存輸入PDF文檔。 此BLOB物件會傳遞至invokeOneDocument作為引數。 - 建立
System.IO.FileStream對象,方法是調用其建構子。 傳遞一個字串值,該字串值表示輸入PDF文檔的檔案位置以及開啟檔案的模式。 - 建立位元組陣列,用於儲存
System.IO.FileStream物件。 您可以取得System.IO.FileStream物件Length屬性。 - 叫用
System.IO.FileStream物件Read方法,並傳遞位元組陣列、起始位置及流長度以讀取。 - 填入
BLOB對象,通過賦值MTOM屬性位元組陣列的內容。
- 建立
-
設定運行時選項。
- 建立
AssemblerOptionSpec使用其建構子儲存執行時選項的物件。 - 為屬於的資料成員指定值,以設定運行時選項以滿足您的業務需求
AssemblerOptionSpec物件。 例如,要指示組合器服務在發生錯誤時繼續處理作業,請分配false到AssemblerOptionSpec物件failOnError資料成員。
- 建立
-
拆解PDF文檔。
叫用
AssemblerServiceClient物件invokeDDX方法,並傳遞下列值:- A
BLOB表示動態建立的DDX文檔的對象 - 此
mapItem包含輸入PDF文檔的陣列 - 安
AssemblerOptionSpec指定運行時選項的對象
此
invokeDDX方法傳回AssemblerResult包含作業結果的對象以及發生的任何例外。 - A
-
保存已拆解的PDF文檔。
要獲取新建立的PDF文檔,請執行以下操作:
- 存取
AssemblerResult物件documents欄位,即Map包含已拆解PDF文檔的對象。 - 重複
Map對象,以獲得每個生成的文檔。 然後,將陣列成員的value到BLOB. - 通過訪問PDF文檔來提取代表文檔的二進位資料
BLOB物件MTOM屬性。 這會傳回一個位元組陣列,您可將其寫出至PDF檔案。
- 存取
另請參閱