依值呈現Forms rendering-forms-by-value
本檔案中的範例和範例僅適用於JEE環境上的AEM Forms 。
通常,在Designer中建立的表單設計會參考Forms服務來傳遞。 表單設計可能很大,因此參考傳遞它們會更有效率,不必依值封送表單設計位元組。 Forms服務也可以快取表單設計,以便在快取時不需要持續讀取表單設計。
如果表單設計包含UUID屬性,則會快取該屬性。 UUID值在所有表單設計中都是獨一無二的,可用來唯一識別表單。 依值呈現表單時,只有在表單重複使用時才應快取表單。 不過,如果表單未重複使用且必須是唯一的,您可以避免使用使用AEM Forms API設定的快取選項來快取表單。
Forms服務也可以解析表單設計內連結內容的位置。 例如,從表單設計內參照的連結影像是相對URL。 系統會一律假設連結內容與表單設計位置相關。 因此,解決連結內容的問題在於透過將相對路徑套用至絕對表單設計位置來決定其位置。
您可以按值傳遞表單設計,而不是以參考傳遞表單設計。 以值傳遞表單設計在動態建立表單設計時很有效;也就是說,當使用者端應用程式在執行階段產生建立表單設計的XML時。 在此情況下,表單設計不會儲存在實體存放庫中,因為它儲存在記憶體中。 在執行階段動態建立表單設計並按值傳遞時,您可以快取表單並改善Forms服務的效能。
依值傳遞表單的限制
當表單設計以值傳遞時,以下限制適用:
- 表單設計內沒有相對連結的內容。 所有影像和片段都必須嵌入表單設計內,或絕對參照。
- 轉譯表單後無法執行伺服器端計算。 如果表單提交回Forms服務,系統就會擷取並傳回資料,而不會進行任何伺服器端計算。
- 由於HTML只能在執行階段使用連結的影像,因此無法產生含有內嵌影像的HTML。 這是因為Forms服務可透過從參照的表單設計擷取影像,支援具有HTML的內嵌影像。 由於以值傳遞的表單設計沒有參考位置,因此在顯示HTML頁面時無法擷取內嵌影像。 因此,影像參照必須是絕對路徑,才能以HTML呈現。
步驟摘要 summary-of-steps
若要依值呈現表單,請執行下列步驟:
- 包含專案檔案。
- 建立Forms使用者端API物件。
- 參考表單設計。
- 依值轉譯表單。
- 將表單資料流寫入使用者端網頁瀏覽器。
包含專案檔案
將必要的檔案納入您的開發專案中。 如果您使用Java建立使用者端應用程式,則請包含必要的JAR檔案。 如果您使用Web服務,請務必包含Proxy檔案。
建立Forms使用者端API物件
您必須先建立資料整合服務使用者端,才能以程式設計方式將資料從使用者端API匯入PDF。 建立服務使用者端時,您可以定義呼叫服務所需的連線設定。
參考表單設計
依值呈現表單時,您必須建立 com.adobe.idp.Document
包含要呈現的表單設計的物件。 您可以參照現有的XDP檔案,也可以在執行階段動態建立表單設計並填入 com.adobe.idp.Document
並保留該資料。
依值演算表單
若要依值呈現表單,請傳遞 com.adobe.idp.Document
包含表單設計到轉譯方法的 inDataDoc
引數(可以是任何 FormsServiceClient
物件的演算方法,例如 renderPDFForm
, (Deprecated) renderHTMLForm
、等等)。 此引數值通常會保留給合併至表單的資料。 同樣地,將空字串值傳遞至 formQuery
引數。 通常,此引數需要字串值,用以指定表單設計的名稱。
xfa:datasets
元素。 如需XFA架構的相關資訊,請前往 https://www.pdfa.org/norm-refs/XFA-3_3.pdf.將表單資料流寫入使用者端網頁瀏覽器
當Forms服務依值轉譯表單時,會傳回您必須寫入使用者端網頁瀏覽器的表單資料流。 寫入使用者端網頁瀏覽器時,使用者可看見表單。
另請參閱
使用Java API依值轉譯表單 render-a-form-by-value-using-the-java-api
使用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
方法並傳遞下列值:- 空字串值。 (此引數通常需要字串值,用以指定表單設計的名稱。)
- A
com.adobe.idp.Document
包含表單設計的物件。 通常,此引數值會保留給合併至表單的資料。 - A
PDFFormRenderSpec
儲存執行階段選項的物件。 此為選用引數,您可以指定null
如果您不想指定執行階段選項。 - A
URLSpec
包含Forms服務所需URI值的物件。 - A
java.util.HashMap
儲存檔案附件的物件。 此為選用引數,您可以指定null
如果您不想將檔案附加至表單。
此
renderPDFForm
方法傳回FormsResult
包含可寫入使用者端網頁瀏覽器的表單資料流的物件。 -
將表單資料流寫入使用者端網頁瀏覽器
- 建立
com.adobe.idp.Document
物件(透過叫用FormsResult
物件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
將表單資料流傳送至使用者端web瀏覽器的方法。 將位元組陣列傳遞至write
方法。
- 建立
另請參閱
使用網站服務API依值轉譯表單 render-a-form-by-value-using-the-web-service-api
使用Forms API (Web服務)依值轉譯表單:
-
包含專案檔案
- 建立使用Forms服務WSDL的Java Proxy類別。
- 將Java Proxy類別納入您的類別路徑中。
-
建立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
方法並傳遞下列值:- 空字串值。 (此引數通常需要字串值,用以指定表單設計的名稱。)
- A
BLOB
包含表單設計的物件。 通常,此引數值會保留給合併至表單的資料。 - A
PDFFormRenderSpec
儲存執行階段選項的物件。 此為選用引數,您可以指定null
如果您不想指定執行階段選項。 - A
URLSpec
包含Forms服務所需URI值的物件。 - A
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
將表單資料流傳送至使用者端web瀏覽器的方法。 將位元組陣列傳遞至write
方法。
- 建立
另請參閱