通常,在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
包含連接屬性的對象。FormsServiceClient
對象,使用其建構子並傳遞 ServiceClientFactory
物件。參考表單設計
java.io.FileInputStream
表示要呈現的表單設計的物件,方法是使用其建構子並傳遞指定XDP檔案位置的字串值。com.adobe.idp.Document
對象,使用其建構子並傳遞 java.io.FileInputStream
物件。按值呈現表單
叫用 FormsServiceClient
物件 renderPDFForm
方法,並傳遞下列值:
com.adobe.idp.Document
包含表單設計的物件。 通常,此參數值會保留給與表單合併的資料。PDFFormRenderSpec
儲存運行時選項的對象。 這是選用參數,您可以指定 null
如果您不想指定執行時選項。URLSpec
包含Forms服務所需URI值的物件。java.util.HashMap
儲存檔案附件的物件。 這是選用參數,您可以指定 null
如果您不想將檔案附加到表單。此 renderPDFForm
方法傳回 FormsResult
包含可寫入客戶端web瀏覽器的表單資料流的對象。
將表單資料流寫入客戶端Web瀏覽器
com.adobe.idp.Document
對象,方法是調用 FormsResult
物件s getOutputContent
方法。com.adobe.idp.Document
對象 getContentType
方法。javax.servlet.http.HttpServletResponse
對象的內容類型,方法是調用 setContentType
方法,並傳遞 com.adobe.idp.Document
物件。javax.servlet.ServletOutputStream
用於通過調用 javax.servlet.http.HttpServletResponse
物件 getOutputStream
方法。java.io.InputStream
對象,方法是調用 com.adobe.idp.Document
物件 getInputStream
方法。InputStream
物件。 叫用 InputStream
物件 available
取得 InputStream
物件。InputStream
物件 read
方法,並將位元組陣列傳遞為引數。javax.servlet.ServletOutputStream
物件 write
將表單資料流傳送至用戶端網頁瀏覽器的方法。 將位元組陣列傳遞至 write
方法。另請參閱
使用Forms API(網站服務),依值轉譯表單:
包含項目檔案
建立Forms用戶端API物件
建立 FormsService
對象和設定驗證值。
參考表單設計
java.io.FileInputStream
物件,使用其建構子。 傳遞指定XDP檔案位置的字串值。BLOB
物件,使用其建構子。 此 BLOB
對象用於儲存使用密碼加密的PDF文檔。java.io.FileInputStream
物件。 您可以取得 java.io.FileInputStream
對象的大小(使用 available
方法。java.io.FileInputStream
物件 read
方法,並傳遞位元組陣列。BLOB
對象 setBinaryData
方法,並傳遞位元組陣列。按值呈現表單
叫用 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瀏覽器
FormResult
物件,方法是取得 com.adobe.idp.services.holders.FormsResultHolder
物件 value
資料成員。BLOB
包含表單資料的物件,方法是叫用 FormsResult
物件 getOutputContent
方法。BLOB
對象 getContentType
方法。javax.servlet.http.HttpServletResponse
對象的內容類型,方法是調用 setContentType
方法,並傳遞 BLOB
物件。javax.servlet.ServletOutputStream
用於通過調用 javax.servlet.http.HttpServletResponse
物件 getOutputStream
方法。BLOB
物件 getBinaryData
方法。 此任務分配 FormsResult
位元組陣列的物件。javax.servlet.http.HttpServletResponse
物件 write
將表單資料流傳送至用戶端網頁瀏覽器的方法。 將位元組陣列傳遞至 write
方法。另請參閱