通常,在設計器中建立的表單設計會參照Forms服務來傳遞。 表單設計可以很大,因此,參照傳遞表單設計會更有效率,以避免需要依值來調整表單設計位元組。 Forms服務也可以快取表格設計,如此在快取時,就不需要持續讀取表格設計。
如果表單設計包含UUID屬性,則會快取它。 UUID值對於所有表單設計都是唯一的,用於唯一標識表單。 在依值呈現表格時,只有在重複使用表格時,才應快取表格。 不過,如果表單未重複使用,且必須是唯一的,您可以使用使用AEM Forms API設定的快取選項來避免快取表單。
Forms服務也可以解決連結內容在表單設計中的位置。 例如,從表單設計中參考的連結影像是相對URL。 連結的內容一律假設是與表單設計位置相關。 因此,解析連結內容是透過將相對路徑套用至絕對表單設計位置來決定其位置的問題。
您可以按值傳遞表單設計,而不是參照傳遞表單設計。 當動態建立表單設計時,以值傳遞表單設計是有效率的;也就是說,當用戶端應用程式產生XML,並在執行時期建立表單設計時。 在這種情況下,表單設計不會儲存在物理儲存庫中,因為它儲存在記憶體中。 在執行時期動態建立表單設計並依值傳遞時,您可以快取表單並改善Forms服務的效能。
依值傳遞表格的限制
以下限制適用於依值傳遞表單設計時:
雖然您可以依值來轉換不同類型的表單(例如,包含使用權限的HTML表單或表單),但本節將討論轉換互動式PDF表單。
如需Forms服務的詳細資訊,請參閱AEM Forms的服務參考。
要按值呈現表單,請執行以下步驟:
包含專案檔案
將必要的檔案加入您的開發專案中。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用web services,請確定您包含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://partners.adobe.com/public/developer/xml/index_arch.html。
將表單資料串流寫入用戶端網頁瀏覽器
當Forms服務根據值轉換表單時,它會傳回您必須寫入用戶端網頁瀏覽器的表單資料流。 當寫入用戶端網頁瀏覽器時,使用者會看到表單。
另請參閱
使用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瀏覽器的表單資料流。
將表單資料串流寫入用戶端網頁瀏覽器
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
方法,建立javax.servlet.ServletOutputStream
物件,用來將表單資料串流寫入用戶端Web瀏覽器。com.adobe.idp.Document
物件的getInputStream
方法,以建立java.io.InputStream
物件。InputStream
對象的大小。 調用InputStream
物件的available
方法,以取得InputStream
物件的大小。InputStream
物件的read
方法,並將位元組陣列傳入為引數,以表格資料流填入位元組陣列。javax.servlet.ServletOutputStream
物件的write
方法,將表單資料串流傳送至用戶端網頁瀏覽器。 將位元組陣列傳遞到write
方法。另請參閱
使用Forms API(web service),依值演算表格:
包含專案檔案
建立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
物件。
將表單資料串流寫入用戶端網頁瀏覽器
com.adobe.idp.services.holders.FormsResultHolder
對象value
資料成員的值,建立FormResult
對象。FormsResult
物件的getOutputContent
方法,建立包含表單資料的BLOB
物件。getContentType
方法獲取BLOB
對象的內容類型。setContentType
方法並傳遞BLOB
物件的內容類型,以設定javax.servlet.http.HttpServletResponse
物件的內容類型。javax.servlet.http.HttpServletResponse
物件的getOutputStream
方法,建立javax.servlet.ServletOutputStream
物件,用來將表單資料串流寫入用戶端Web瀏覽器。BLOB
物件的getBinaryData
方法以填入它。 此任務將FormsResult
對象的內容分配給位元組陣列。javax.servlet.http.HttpServletResponse
物件的write
方法,將表單資料串流傳送至用戶端網頁瀏覽器。 將位元組陣列傳遞到write
方法。另請參閱