通常,在Designer中建立的表單設計會參照Forms服務而傳遞。 表單設計可能很大,因此,參照傳遞這些設計會更有效率,以避免必須依值匯整表單設計位元組。 Forms服務也可以快取表單設計,這樣在快取時,就不需要持續讀取表單設計。
如果表單設計包含UUID屬性,則會快取該屬性。 UUID值對於所有表單設計都是唯一的,可用來唯一識別表單。 依值轉譯表單時,只有在重複使用表單時,才應快取該表單。 不過,如果表單未重複使用且必須是唯一的,則可使用使用AEM Forms API設定的快取選項,來避免快取表單。
Forms服務也可以解析連結內容在表單設計中的位置。 例如,從表單設計內參照的連結影像為相對URL。 連結的內容一律視為相對於表單設計位置。 因此,通過將相對路徑應用於絕對表單設計位置來確定連結內容的位置是一個問題。
您可以按值傳遞表單設計,而不是通過參照傳遞表單設計。 動態建立表單設計時,依值傳遞表單設計會很有效率;也就是說,當客戶端應用程式生成在運行時建立表單設計的XML時。 在這種情況下,表單設計不會儲存在物理儲存庫中,因為它儲存在記憶體中。 在執行階段以動態方式建立表單設計並依值傳遞時,您可以快取表單並改善Forms服務的效能。
依值傳遞表單的限制
表單設計依值傳遞時,會套用下列限制:
雖然您可以依值呈現不同類型的表單(例如,包含使用權限的HTML表單或表單),但本節會討論轉譯互動式PDF forms。
如需Forms服務的詳細資訊,請參閱AEM Forms的服務參考。
要按值呈現表單,請執行以下步驟:
包含項目檔案
在您的開發專案中加入必要的檔案。 如果您使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用Web服務,請確定您包含Proxy檔案。
建立Forms用戶端API物件
您必須先建立資料整合服務用戶端,才能以程式設計方式將資料匯入PDF表單用戶端API。 建立服務客戶端時,您定義調用服務所需的連接設定。
參考表單設計
按值呈現表單時,必須建立com.adobe.idp.Document
對象,該對象包含要呈現的表單設計。 您可以參考現有的XDP檔案,或在執行階段以動態方式建立表單設計,並將該資料填入com.adobe.idp.Document
。
本節和對應的快速入門參考現有的XDP檔案。
按值呈現表單
要按值呈現表單,請將包含表單設計的com.adobe.idp.Document
實例傳遞至呈現方法的inDataDoc
參數(可以是FormsServiceClient
對象的任何呈現方法,如renderPDFForm
、(Deprecated) renderHTMLForm
等)。 此參數值通常會為與表單合併的資料保留。 同樣地,將空字串值傳遞至formQuery
參數。 通常,此參數需要一個字串值,該字串值指定表單設計的名稱。
如果要在表單內顯示資料,必須在xfa:datasets
元素內指定資料。 如需XFA架構的相關資訊,請前往https://www.pdfa.org/norm-refs/XFA-3_3.pdf。
將表單資料流寫入客戶端Web瀏覽器
Forms服務依值轉譯表單時,會傳回您必須寫入用戶端網頁瀏覽器的表單資料流。 寫入客戶端Web瀏覽器時,用戶可以看到該表單。
另請參閱
使用Forms API(Java)依值轉譯表單:
包含項目檔案
在Java專案的類別路徑中加入用戶端JAR檔案,例如adobe-forms-client.jar。
建立Forms用戶端API物件
ServiceClientFactory
對象。ServiceClientFactory
物件,以建立FormsServiceClient
物件。參考表單設計
java.io.FileInputStream
物件,透過使用其建構函式並傳遞指定XDP檔案位置的字串值,代表要呈現的表單設計。java.io.FileInputStream
物件,以建立com.adobe.idp.Document
物件。按值呈現表單
調用FormsServiceClient
對象的renderPDFForm
方法並傳遞以下值:
com.adobe.idp.Document
物件。 通常,此參數值會保留給與表單合併的資料。PDFFormRenderSpec
對象。 這是可選參數,如果您不想指定運行時選項,可以指定null
。URLSpec
物件,包含Forms服務所需的URI值。java.util.HashMap
對象。 這是可選參數,如果不想將檔案附加到表單,可以指定null
。renderPDFForm
方法返回一個FormsResult
對象,該對象包含可寫入客戶端Web瀏覽器的表單資料流。
將表單資料流寫入客戶端Web瀏覽器
FormsResult
對象s getOutputContent
方法,建立com.adobe.idp.Document
對象。getContentType
方法,獲取com.adobe.idp.Document
對象的內容類型。setContentType
方法並傳遞com.adobe.idp.Document
對象的內容類型來設定javax.servlet.http.HttpServletResponse
對象的內容類型。javax.servlet.http.HttpServletResponse
對象的getOutputStream
方法,建立用於將表單資料流寫入客戶端Web瀏覽器的javax.servlet.ServletOutputStream
對象。com.adobe.idp.Document
對象的getInputStream
方法,建立java.io.InputStream
對象。InputStream
對象的大小。 調用InputStream
對象的available
方法以獲取InputStream
對象的大小。InputStream
物件的read
方法並將位元組陣列傳遞為引數,以表單資料流填入位元組陣列。javax.servlet.ServletOutputStream
對象的write
方法,將表單資料流發送到客戶端Web瀏覽器。 將位元組陣列傳遞至write
方法。另請參閱
使用Forms API(網站服務),依值轉譯表單:
包含項目檔案
建立Forms用戶端API物件
建立FormsService
物件並設定驗證值。
參考表單設計
java.io.FileInputStream
物件。 傳遞指定XDP檔案位置的字串值。BLOB
物件。 BLOB
對象用於儲存使用密碼加密的PDF文檔。java.io.FileInputStream
對象內容的位元組陣列。 您可以使用available
方法獲取java.io.FileInputStream
對象的大小,以確定位元組陣列的大小。java.io.FileInputStream
物件的read
方法並傳遞位元組陣列,以資料流資料填入位元組陣列。setBinaryData
方法並傳遞位元組陣列,以填入BLOB
物件。按值呈現表單
調用FormsService
對象的renderPDFForm
方法並傳遞以下值:
BLOB
物件。 通常,此參數值會保留給與表單合併的資料。PDFFormRenderSpec
對象。 這是可選參數,如果您不想指定運行時選項,可以指定null
。URLSpec
物件,包含Forms服務所需的URI值。java.util.HashMap
對象。 這是可選參數,如果不想將檔案附加到表單,可以指定null
。com.adobe.idp.services.holders.BLOBHolder
物件。 這可用來儲存轉譯的PDF表單。javax.xml.rpc.holders.LongHolder
物件。 (此引數會儲存表單中的頁數。)javax.xml.rpc.holders.StringHolder
物件。 (此參數儲存地區設定值。)com.adobe.idp.services.holders.FormsResultHolder
對象。renderPDFForm
方法會以必須寫入用戶端網頁瀏覽器的表單資料流填入作為最後一個引數值傳遞的com.adobe.idp.services.holders.FormsResultHolder
物件。
將表單資料流寫入客戶端Web瀏覽器
com.adobe.idp.services.holders.FormsResultHolder
對象的value
資料成員的值,以建立FormResult
對象。FormsResult
對象的getOutputContent
方法,建立包含表單資料的BLOB
對象。getContentType
方法,獲取BLOB
對象的內容類型。setContentType
方法並傳遞BLOB
對象的內容類型來設定javax.servlet.http.HttpServletResponse
對象的內容類型。javax.servlet.http.HttpServletResponse
對象的getOutputStream
方法,建立用於將表單資料流寫入客戶端Web瀏覽器的javax.servlet.ServletOutputStream
對象。BLOB
對象的getBinaryData
方法來填入。 此任務將FormsResult
對象的內容分配給位元組陣列。javax.servlet.http.HttpServletResponse
對象的write
方法,將表單資料流發送到客戶端Web瀏覽器。 將位元組陣列傳遞至write
方法。另請參閱