本文中的範例和範例僅適用於AEM Forms的JEE環境。
Forms服務可以根據您使用Designer建立的片段來轉換表單。 fragment是表單中可重複使用的部分,並儲存為可插入多個表單設計的個別XDP檔案。 例如,片段可以包含地址塊或合法文字。
使用片段可簡化並加速建立和維護大量表單。 建立新表單時,插入對所需片段的引用,該片段將出現在表單中。 片段參考包含指向物理XDP檔案的子表單。 如需建立以片段為基礎的表單設計的詳細資訊,請參閱Forms設計人員
片段可以包括多個子表單,這些子表單被包裝在選擇子表單集中。 選擇子表單集基於來自資料連接的資料流來控制子表單的顯示。 您使用條件陳述式來判斷傳送的表單中會出現該集合中的哪些子表單。 例如,集合中的每個子表單可以包括特定地理位置的資訊,而顯示的子表單可以基於用戶的位置來確定。
指令碼片段包含可重複使用的JavaScript函式或值,這些函式或值與任何特定物件(例如日期剖析器或web service呼叫)分開儲存。 這些片段包含單一指令碼物件,在「階層」浮動視窗中會顯示為變數的子系。 無法從屬於其他物件屬性的指令碼建立片段,例如驗證、計算或初始化等事件指令碼。
以下是使用片段的優點:
您可以組合表單設計,以根據多個片段傳遞至Forms服務。 要組合多個片段,請使用Assembler服務。 如要查看使用Assemble服務建立由其他Forms服務(Output服務)使用的表單設計的示例,請參閱使用片段建立PDF文檔。 您可以使用Forms服務來執行相同的工作流程,而不是使用輸出服務。
使用Assembler服務時,將傳遞使用片段組合的表單設計。 建立的表單設計不會參照其他片段。 相反地,本主題討論將參照其他片段的表單設計傳遞至Forms服務。 但是,表單設計並非由Assembler裝配。 它是在Designer中建立的。
有關Forms服務的詳細資訊,請參閱AEM Forms服務參考。
如需建立以Web為基礎的應用程式,並根據片段轉譯表單的詳細資訊,請參閱建立轉譯Forms的Web應用程式。
若要根據片段來轉換表單,請執行下列工作:
包含專案檔案
將必要的檔案加入您的開發專案中。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用web services,請確定您包含proxy檔案。
建立Forms用戶端API物件
在以寫程式方式執行Forms服務客戶端API操作之前,必須建立Forms服務客戶端。
指定URI值
要成功地基於片段來呈現表單,您必須確保Forms服務能夠找到表單設計參考的表單和片段(XDP檔案)。 例如,假設表單名為PO.xdp,且此表單使用兩個名為FooterUS.xdp和FooterCanada.xdp的片段。 在這種情況下,Forms服務必須能夠找到所有三個XDP檔案。
您可以將表單放在某個位置,將片段放在另一個位置,以組織表單及其片段,或將所有XDP檔案放在同一位置。 就本節而言,假設所有XDP檔案都位於AEM Forms儲存庫中。 有關將XDP檔案放在AEM Forms儲存庫中的資訊,請參見寫入資源。
在根據片段呈現表格時,您只能參考表格本身,而不參考片段。 例如,您必須參考PO.xdp,而非FooterUS.xdp或FooterCanada.xdp。 請確定您將片段放置在Forms服務可以找到的位置。
轉譯表單
基於片段的表單可以與非碎片表單相同的方式呈現。 也就是說,您可以將表單轉譯為PDF、HTML或表單參考線(已過時)。 本節中的範例會根據片段將表單轉譯為互動式PDF表單。 (請參閱演算互動式PDF forms。)
將表單資料串流寫入用戶端網頁瀏覽器
當Forms服務轉換表單時,它會傳回您必須寫入用戶端網頁瀏覽器的表單資料流。 當寫入用戶端網頁瀏覽器時,使用者會看到表單。
另請參閱
使用FormsAPI(Java),根據片段來轉換表單:
包含專案檔案
在Java專案的類別路徑中包含用戶端JAR檔案,例如adobe-forms-client.jar。
建立Forms用戶端API物件
ServiceClientFactory
對象。ServiceClientFactory
對象,建立FormsServiceClient
對象。指定URI值
URLSpec
的建構函式建立儲存URI值的物件。URLSpec
物件的setApplicationWebRoot
方法,並傳遞代表應用程式Web根目錄的字串值。URLSpec
物件的setContentRootURI
方法,並傳遞指定內容根URI值的字串值。 請確定表單設計和片段位於內容根URI中。 如果沒有,Forms服務會提出例外。 要引用儲存庫,請指定repository://
。URLSpec
物件的setTargetURL
方法,並傳遞字串值,指定表單資料張貼到的目標URL值。 如果您在表單設計中定義目標URL,則可以傳遞空字串。 您也可以指定表單傳送至的URL,以便執行計算。轉譯表單
叫用FormsServiceClient
物件的renderPDFForm
方法並傳遞下列值:
Applications/FormsApplication/1.0/FormsFolder/Loan.xdp
。com.adobe.idp.Document
物件,包含要與表單合併的資料。 如果您不想合併資料,請傳遞空白的com.adobe.idp.Document
物件。PDFFormRenderSpec
對象。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
對象的read
方法並將位元組陣列作為引數傳遞,建立以表單資料流填充的位元組陣列。javax.servlet.ServletOutputStream
物件的write
方法,將表單資料串流傳送至用戶端網頁瀏覽器。 將位元組陣列傳遞到write
方法。另請參閱
快速入門(SOAP模式):使用Java API根據片段轉譯表單
使用FormsAPI(web service),根據片段來轉換表單:
包含專案檔案
建立Forms用戶端API物件
建立FormsService
對象並設定驗證值。
指定URI值
URLSpec
對象。URLSpec
物件的setApplicationWebRoot
方法,並傳遞代表應用程式Web根目錄的字串值。URLSpec
物件的setContentRootURI
方法,並傳遞指定內容根URI值的字串值。 請確定表單設計位於內容根URI中。 如果沒有,Forms服務會提出例外。 要引用儲存庫,請指定repository://
。URLSpec
物件的setTargetURL
方法,並傳遞字串值,指定表單資料張貼到的目標URL值。 如果您在表單設計中定義目標URL,則可以傳遞空字串。 您也可以指定表單傳送至的URL,以便執行計算。轉譯表單
叫用FormsService
物件的renderPDFForm
方法並傳遞下列值:
Applications/FormsApplication/1.0/FormsFolder/Loan.xdp
。BLOB
物件,包含要與表單合併的資料。 如果您不想合併資料,請傳遞null
。PDFFormRenderSpec
對象。 請注意,如果輸入檔案是PDF檔案,則無法設定標籤的PDF選項。 如果輸入檔案是XDP檔案,則可以設定標籤的PDF選項。URLSpec
物件,包含Forms服務所需的URI值。java.util.HashMap
對象。 此為可選參數,如果您不想將檔案附加到表單,可以指定null
。com.adobe.idp.services.holders.BLOBHolder
對象。 此參數用於儲存渲染的表單。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
方法。另請參閱