以程式設計方式組合PDF檔案 programmatically-assembling-pdf-documents
本檔案中的範例和範例僅適用於JEE環境上的AEM Forms 。
您可以使用Assembler Service API將多個PDF檔案組合成單一PDF檔案。 下圖顯示三份PDF檔案合併為單一PDF檔案。
若要將兩個或更多PDF檔案組合成單一PDF檔案,您需要DDX檔案。 DDX檔案說明Assembler服務產生的PDF檔案。 也就是說,DDX檔案會指示Assembler服務要執行的動作。
為了進行此討論,假設使用下列DDX檔案。
<?xml version="1.0" encoding="UTF-8"?>
<DDX xmlns="https://ns.adobe.com/DDX/1.0/">
<PDF result="out.pdf">
<PDF source="map.pdf" />
<PDF source="directions.pdf" />
</PDF>
</DDX>
此DDX檔案合併兩個名為的PDF檔案 map.pdf 和 directions.pdf 放入單一PDF檔案中。
使用Web服務叫用Assembler服務時的注意事項 considerations-when-invoking-assembler-service-using-web-services
在組合大型檔案期間新增頁首和頁尾時,您可能會遇到 OutOfMemory
錯誤且無法組裝檔案。 若要減少此問題發生的機率,請新增 DDXProcessorSetting
元素加入您的DDX檔案,如下列範例所示。
<DDXProcessorSetting name="checkpoint" value="2000" />
您可以將此元素新增為 DDX
元素或做為的子項 PDF result
元素。 此設定的預設值為0 (零),這會關閉勾選功能,而DDX的運作方式會如同 DDXProcessorSetting
元素不存在。 如果您遇到 OutOfMemory
錯誤,您可能需要將值設為整數,通常介於500和5000之間。 較小的查核點值會導致更頻繁的檢查點。
步驟摘要 summary-of-steps
若要從多個PDF檔案組合單一PDF檔案,請執行下列工作:
- 包含專案檔案。
- 建立PDF組合器使用者端。
- 參考現有的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上,則為必要)
如果將AEM Forms部署在JBoss以外的受支援J2EE應用程式伺服器上,則必須將adobe-utilities.jar和jbossall-client.jar檔案取代為部署AEM Forms之J2EE應用程式伺服器專屬的JAR檔案。
建立PDF組合器使用者端
您必須先建立「組合器」使用者端,才能以程式設計方式執行「組合器」作業。
參考現有的DDX檔案
必須參考DDX檔案才能組裝PDF檔案。 例如,以本節介紹的DDX檔案為例。 此DDX檔案會指示Assembler服務將兩個PDF檔案合併為單一PDF檔案。
參考輸入PDF檔案
參考您要傳遞至組合器服務的輸入PDF檔案。 例如,如果要傳遞兩個名為「地圖」和「方向」的輸入PDF檔案,則必須傳遞對應的PDF檔案。
map.pdf檔案和directions.pdf檔案都必須放置在集合物件中。 索引鍵的名稱必須符合DDX檔案中PDF來源屬性的值。 如果DDX檔案中的索引鍵和來源屬性相符,則PDF檔案的名稱並不重要。
AssemblerResult
如果叫用,則會傳回包含集合物件的物件 invokeDDX
作業。 將兩個或多個輸入PDF檔案傳遞至組合器服務時,會使用此作業。 不過,如果您只傳遞一個輸入PDF給組合器服務,並且只期望有一個傳回檔案,請叫用 invokeOneDocument
作業。 叫用此作業時,會傳回單一檔案。 如需有關使用此作業的資訊,請參閱 組合加密的PDF檔案.設定執行階段選項
您可以設定執行階段選項,控制Assembler服務執行工作時的行為。 例如,您可以設定一個選項,在遇到錯誤時指示Assembler服務繼續處理工作。 如需您可以設定的執行階段選項相關資訊,請參閱 AssemblerOptionSpec
中的類別參考 AEM Forms API參考.
組合輸入PDF檔案
建立服務使用者端、參考DDX檔案、建立儲存輸入PDF檔案的集合物件,以及設定執行階段選項之後,您可以叫用DDX作業。 使用本節中指定的DDX檔案時,map.pdf和direction.pdf檔案會合併為一個PDF檔案。
擷取結果
組合器服務傳回 java.util.Map
物件,可從 AssemblerResult
物件,且包含作業結果。 傳回的 java.util.Map
物件包含產生的檔案和任何例外狀況。
下表摘要列出可傳回的部分關鍵值和物件型別 java.util.Map
物件。
documentName
com.adobe.idp.Document
documentName
Exception
OutputMapConstants.LOG_NAME
com.adobe.idp.Documen
另請參閱
使用Java API組合PDF檔案 assemble-pdf-documents-using-the-java-api
使用組合器服務API (Java)組合PDF檔案:
-
包含專案檔案。
在您的Java專案的類別路徑中包含使用者端JAR檔案,例如adobe-assembler-client.jar。
-
建立PDF組合器使用者端。
- 建立
ServiceClientFactory
包含連線屬性的物件。 - 建立
AssemblerServiceClient
物件,使用它的建構函式並傳遞ServiceClientFactory
物件。
- 建立
-
參考現有的DDX檔案。
- 建立
java.io.FileInputStream
物件,使用它的建構函式並傳遞字串值(指定DDX檔案的位置)來代表DDX檔案。 - 建立
com.adobe.idp.Document
物件,使用它的建構函式並傳遞java.io.FileInputStream
物件。
- 建立
-
參考輸入PDF檔案。
-
建立
java.util.Map
使用儲存輸入PDF檔案的物件HashMap
建構函式。 -
針對每個輸入PDF檔案,建立
java.io.FileInputStream
物件,使用它的建構函式並傳遞輸入PDF檔案的位置。 -
針對每個輸入PDF檔案,建立
com.adobe.idp.Document
物件並傳遞java.io.FileInputStream
包含PDF檔案的物件。 -
對於每個輸入檔案,新增一個專案到
java.util.Map
物件(透過叫用其put
方法並傳遞下列引數:- 代表索引鍵名稱的字串值。 此值必須符合DDX檔案中指定的PDF來源元素的值。
- A
com.adobe.idp.Document
物件(或java.util.List
物件(指定多個檔案),其中包含來源PDF檔案。
-
-
設定執行階段選項。
- 建立
AssemblerOptionSpec
使用建構函式來儲存執行階段選項的物件。 - 透過叫用屬於下列專案的方法,設定執行階段選項以符合您的業務需求
AssemblerOptionSpec
物件。 例如,若要指示Assembler服務在發生錯誤時繼續處理工作,請叫用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
包含工作結果和發生之任何例外狀況的物件。 - A
-
擷取結果。
若要取得新建立的PDF檔案,請執行下列動作:
- 叫用
AssemblerResult
物件的getDocuments
方法。 這會傳回java.util.Map
物件。 - 逐一檢視
java.util.Map
物件,直到您找到結果為止com.adobe.idp.Document
物件。 (您可以使用DDX檔案中指定的PDF結果元素來取得檔案。) - 叫用
com.adobe.idp.Document
物件的copyToFile
用於擷取PDF檔案的方法。
note note NOTE 如果 LOG_LEVEL
設定為產生記錄檔,您可使用AssemblerResult
物件的getJobLog
方法。 - 叫用
另請參閱
快速入門(SOAP模式):使用Java API組合PDF檔案
使用網站服務API組合PDF檔案 assemble-pdf-documents-using-the-web-service-api
使用組合器服務API (Web服務)組合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檔案。
- 建立
BLOB
物件(使用其建構函式)。 此BLOB
物件可用來儲存DDX檔案。 - 建立
System.IO.FileStream
物件,方法是叫用其建構函式,並傳遞代表DDX檔案檔案位置及開啟檔案的模式的字串值。 - 建立位元組陣列,儲存
System.IO.FileStream
物件。 您可以取得System.IO.FileStream
物件的Length
屬性。 - 透過叫用
System.IO.FileStream
物件的Read
方法,並傳遞位元組陣列、起始位置以及要讀取的資料流長度。 - 填入
BLOB
物件,透過指派其MTOM
包含位元組陣列內容的屬性。
- 建立
-
參考輸入PDF檔案。
- 針對每個輸入PDF檔案,建立
BLOB
物件(使用其建構函式)。 此BLOB
物件是用來儲存輸入PDF檔案。 - 建立
System.IO.FileStream
物件,方法是叫用其建構函式,並傳遞代表輸入PDF檔案的檔案位置以及開啟檔案的模式的字串值。 - 建立位元組陣列,儲存
System.IO.FileStream
物件。 您可以取得System.IO.FileStream
物件的Length
屬性。 - 透過叫用
System.IO.FileStream
物件的Read
方法。 傳遞位元組陣列、起始位置以及要讀取的資料流長度。 - 填入
BLOB
物件,透過指派其MTOM
包含位元組陣列內容的欄位。 - 建立
MyMapOf_xsd_string_To_xsd_anyType
物件。 此集合物件是用來儲存輸入PDF檔案。 - 針對每個輸入PDF檔案,建立
MyMapOf_xsd_string_To_xsd_anyType_Item
物件。 例如,如果使用兩個輸入PDF檔案,則建立兩個MyMapOf_xsd_string_To_xsd_anyType_Item
物件。 - 將代表索引鍵名稱的字串值指派給
MyMapOf_xsd_string_To_xsd_anyType_Item
物件的key
欄位。 此值必須符合DDX檔案中指定的PDF來源元素的值。 (針對每個輸入PDF檔案執行此工作。) - 指派
BLOB
將PDF檔案儲存到的物件MyMapOf_xsd_string_To_xsd_anyType_Item
物件的value
欄位。 (針對每個輸入PDF檔案執行此工作。) - 新增
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檔案執行此工作。)
- 針對每個輸入PDF檔案,建立
-
設定執行階段選項。
- 建立
AssemblerOptionSpec
使用建構函式來儲存執行階段選項的物件。 - 將值指派給屬於下列專案的資料成員,以設定執行階段選項以符合您的業務需求
AssemblerOptionSpec
物件。 例如,若要指示Assembler服務在發生錯誤時繼續處理工作,請指派false
至AssemblerOptionSpec
物件的failOnError
資料成員。
- 建立
-
組合輸入PDF檔案。
叫用
AssemblerServiceClient
物件的invoke
方法並傳遞下列值:- A
BLOB
代表DDX檔案的物件。 - 此
mapItem
包含輸入PDF檔案的陣列。 其索引鍵必須與PDF來源檔案的名稱相符,其值必須是BLOB
對應至這些檔案的物件。 - 一個
AssemblerOptionSpec
指定執行階段選項的物件。
此
invoke
方法傳回AssemblerResult
包含工作結果及可能發生之任何例外狀況的物件。 - A
-
擷取結果。
若要取得新建立的PDF檔案,請執行下列動作:
- 存取
AssemblerResult
物件的documents
欄位,即Map
包含結果PDF檔案的物件。 - 逐一檢視
Map
物件,直到您找到符合結果檔名稱的鍵為止。 然後轉換該陣列成員的value
至BLOB
. - 存取代表PDF檔案的二進位資料
BLOB
物件的MTOM
屬性。 這會傳回您可以寫出至PDF檔案的位元組陣列。
note note NOTE 如果 LOG_LEVEL
設定為產生記錄檔,您可以透過取得AssemblerResult
物件的jobLog
資料成員。 - 存取
另請參閱