您可以將多個XDP片段組合為單一XDP檔案。 例如,假設有XDP片段,其中每個XDP檔案包含一或多個用來建立健全狀態表單的子表單。 下圖顯示大綱視圖(表示組裝多個XDP片段快速啟動中使用的tuc018_template_gled.xdp檔案):
下圖顯示患者區段(代表組裝多個XDP片段快速啟動中使用的tuc018_contact.xdp檔案):
下圖顯示患者健康部分(代表組合多個XDP片段快速啟動中使用的tuc018_patient.xdp檔案):
此片段包含名為subPatientPhysical和subPatientHealth的兩個子表單。 這兩個子表單都在傳遞到組合器服務的DDX文檔中引用。 使用組合器服務,您可以將所有這些XDP片段合併為單一XDP檔案,如下圖所示。
以下DDX文檔將多個XDP片段組合到XDP文檔中。
<?xml version="1.0" encoding="UTF-8"?>
<DDX xmlns="https://ns.adobe.com/DDX/1.0/">
<XDP result="tuc018result.xdp">
<XDP source="tuc018_template_flowed.xdp">
<XDPContent insertionPoint="ddx_fragment" source="tuc018_contact.xdp" fragment="subPatientContact" required="false"/>
<XDPContent insertionPoint="ddx_fragment" source="tuc018_patient.xdp" fragment="subPatientPhysical" required="false"/>
<XDPContent insertionPoint="ddx_fragment" source="tuc018_patient.xdp" fragment="subPatientHealth" required="false"/>
</XDP>
</XDP>
</DDX>
DDX文檔包含XDP result
標籤,該標籤指定結果的名稱。 在此情況下,值為tuc018result.xdp
。 在組合器服務返回結果後,在用於檢索XDP文檔的應用程式邏輯中引用了此值。 例如,請考量下列用於擷取已組合XDP檔案的Java應用程式邏輯(請注意,值會以粗體顯示):
//Iterate through the map object to retrieve the result XDP document
for (Iterator i = allDocs.entrySet().iterator(); i.hasNext();) {
// Retrieve the Map object’s value
Map.Entry e = (Map.Entry)i.next();
//Get the key name as specified in the
//DDX document
String keyName = (String)e.getKey();
if (keyName.equalsIgnoreCase("tuc018result.xdp"))
{
Object o = e.getValue();
outDoc = (Document)o;
//Save the result PDF file
File myOutFile = new File("C:\\AssemblerResultXDP.xdp");
outDoc.copyToFile(myOutFile);
}
}
XDP source
標籤指定表示完整XDP文檔的XDP檔案,該文檔可用作添加XDP片段的容器,或作為按順序附加在一起的多個文檔之一。 在此情況下,XDP文檔僅用作容器(組裝多個XDP片段中所示的第一個圖)。 也就是說,其他XDP檔案會放在XDP容器中。
您可以對每個子表單新增XDPContent
元素(此元素為選用元素)。 在上述範例中,請注意有三個子表單:subPatientContact
、subPatientPhysical
和subPatientHealth
。 subPatientPhysical
子表單和subPatientHealth
子表單都位於相同的XDP檔案tuc018_patient.xdp中。 片段元素指定子表單的名稱,如設計器中定義。
有關組合器服務的詳細資訊,請參閱AEM Forms的服務參考。
有關DDX文檔的詳細資訊,請參閱組合器服務和DDX引用。
若要組合多個XDP片段,請執行下列工作:
包含項目檔案
在您的開發專案中加入必要的檔案。 如果您是使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用Web服務,請確定您包含Proxy檔案。
必須將以下JAR檔案添加到項目的類路徑中:
建立PDF組合器客戶端
在以寫程式方式執行組合器操作之前,請建立組合器服務客戶端。
參考現有的DDX文檔
必須參考DDX檔案才能組合多個XDP檔案。 此DDX文檔必須包含XDP result
、XDP source
和XDPContent
元素。
參考XDP檔案
要組合多個XDP文檔,請參考用於組合結果XDP文檔的所有XDP檔案。 確保在fragment
屬性中指定source
屬性引用的XDP文檔中包含的子表單的名稱。 子表單在設計器中定義。 例如,請考慮下列XML。
<XDPContent insertionPoint="ddx_fragment" source="tuc018_contact.xdp" fragment="subPatientContact" required="false"/>
名為subPatientContact的子表單必須位於名為tuc018_contact.xdp的XDP檔案中。
設定運行時選項
您可以設定運行時選項,以控制組合器服務在執行作業時的行為。 例如,您可以設定一個選項,指示組合器服務在遇到錯誤時繼續處理作業。
組合多個XDP檔案
要組合多個XDP檔案,請調用invokeDDX
操作。 組合器服務返回集合對象中已裝配的XDP文檔。
檢索已裝配的XDP文檔
集合對象內返回組合的XDP文檔。 逐一查看收集物件,並將XDP檔案儲存為XDP檔案。 您也可以將XDP檔案傳遞至其他AEM Forms服務,例如Output。
另請參閱
使用組合器服務API(Java)組合多個XDP片段:
包含專案檔案。
在Java項目的類路徑中包含客戶端JAR檔案,如adobe-assembler-client.jar。
建立PDF組合器客戶端。
ServiceClientFactory
對象。ServiceClientFactory
物件,以建立AssemblerServiceClient
物件。參考現有的DDX文檔。
java.io.FileInputStream
對象。java.io.FileInputStream
物件,以建立com.adobe.idp.Document
物件。參考XDP檔案。
使用HashMap
建構子建立用於儲存輸入XDP文檔的java.util.Map
對象。
建立com.adobe.idp.Document
物件並傳遞包含輸入XDP檔案的java.io.FileInputStream
物件(對每個XDP檔案重複此工作)。
調用put
方法並傳遞以下參數,將條目添加到java.util.Map
對象中:
source
元素值匹配(對每個XDP檔案重複此任務)。source
元素對應的XDP文檔的com.adobe.idp.Document
對象(對每個XDP檔案重複此任務)。設定執行時間選項。
AssemblerOptionSpec
物件,以儲存執行時選項。AssemblerOptionSpec
對象的方法來設定運行時選項以滿足您的業務要求。 例如,要指示組合器服務在發生錯誤時繼續處理作業,請調用AssemblerOptionSpec
對象的setFailOnError
方法並傳遞false
。組合多個XDP檔案。
調用AssemblerServiceClient
對象的invokeDDX
方法並傳遞以下必需值:
com.adobe.idp.Document
對象java.util.Map
對象com.adobe.livecycle.assembler.client.AssemblerOptionSpec
對象,它指定運行時選項,包括預設字型和作業日誌級別invokeDDX
方法返回包含已裝配XDP文檔的com.adobe.livecycle.assembler.client.AssemblerResult
對象。
檢索已裝配的XDP文檔。
要獲取已裝配的XDP文檔,請執行以下操作:
AssemblerResult
對象的getDocuments
方法。 此方法會傳回java.util.Map
物件。java.util.Map
對象進行迭代,直到找到結果com.adobe.idp.Document
對象。com.adobe.idp.Document
對象的copyToFile
方法以提取已裝配的XDP文檔。另請參閱
快速入門(SOAP模式):使用Java API組裝多個XDP片段
使用組合器服務API(Web服務)組合多個XDP片段:
包含專案檔案。
建立使用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文檔。
BLOB
物件。 BLOB
對象用於儲存DDX文檔。System.IO.FileStream
對象,該字串值表示DDX文檔的檔案位置以及開啟檔案的模式。System.IO.FileStream
對象內容的位元組陣列。 通過獲取System.IO.FileStream
對象的Length
屬性,可以確定位元組陣列的大小。System.IO.FileStream
物件的Read
方法,以串流資料填入位元組陣列。 傳遞位元組陣列、起始位置和資料流長度以讀取。MTOM
物件指派包含位元組陣列內容的屬性,以填入BLOB
物件。參考XDP檔案。
BLOB
對象。 BLOB
對象用於儲存輸入檔案。System.IO.FileStream
對象,該字串值表示輸入檔案的檔案位置以及開啟檔案的模式。System.IO.FileStream
對象內容的位元組陣列。 通過獲取System.IO.FileStream
對象的Length
屬性,可以確定位元組陣列的大小。System.IO.FileStream
物件的Read
方法,以串流資料填入位元組陣列。 傳遞位元組陣列、起始位置和資料流長度以讀取。MTOM
欄位指定位元組陣列的內容,以填入BLOB
物件。MyMapOf_xsd_string_To_xsd_anyType
物件。 此收集對象用於儲存建立組合XDP文檔所需的輸入檔案。MyMapOf_xsd_string_To_xsd_anyType_Item
對象。MyMapOf_xsd_string_To_xsd_anyType_Item
對象的key
欄位分配表示鍵名的字串值。 此值必須與DDX文檔中指定的元素的值匹配。 (對每個輸入XDP檔案執行此任務。)BLOB
物件指派至MyMapOf_xsd_string_To_xsd_anyType_Item
物件的value
欄位。 (對每個輸入XDP檔案執行此任務。)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
對象。 (對每個輸入的XDP文檔執行此任務。)設定運行時選項。
AssemblerOptionSpec
物件,以儲存執行時選項。AssemblerOptionSpec
對象的資料成員分配值,以設定運行時選項以滿足您的業務要求。 例如,要指示組合器服務在發生錯誤時繼續處理作業,請將false
分配給AssemblerOptionSpec
對象的failOnError
資料成員。組合多個XDP檔案。
調用AssemblerServiceClient
對象的invokeDDX
方法並傳遞以下值:
BLOB
對象MyMapOf_xsd_string_To_xsd_anyType
對象AssemblerOptionSpec
對象invokeDDX
方法返回一個AssemblerResult
對象,該對象包含作業的結果和發生的任何異常。
檢索已裝配的XDP文檔。
要獲取新建立的XDP文檔,請執行以下操作:
AssemblerResult
對象的documents
欄位,該欄位是包含結果PDF文檔的Map
對象。Map
對象,以獲取每個結果文檔。 然後,將該陣列成員的value
轉換為BLOB
。BLOB
對象的MTOM
屬性來提取表示PDF文檔的二進位資料。 這會傳回一個位元組陣列,您可將其寫出至XDP檔案。另請參閱