本檔案中的範例和範例僅適用於JEE環境上的AEM Forms。
讓使用者能夠填寫互動式表單的網頁型應用程式,需要將資料提交回伺服器。 使用Forms服務,您可以擷取使用者在互動式表單中輸入的資料。 擷取資料後,您就可以處理資料以符合您的業務需求。 例如,您可以將資料儲存在資料庫中、將資料發送到其他應用程式、將資料發送到其他服務、將資料合併到表單設計中、在Web瀏覽器中顯示資料等。
表單資料會以XML或PDF資料的形式提交至Forms服務,此選項可在Designer中設定。 以XML提交的表單可讓您擷取個別欄位資料值。 也就是說,您可以擷取使用者在表單中輸入之每個表單欄位的值。 以PDF資料提交的表單是二進位資料,而非XML資料。 您可以將表單儲存為PDF檔案,或將表單傳送至其他服務。 如果要從以XML提交的表單中擷取資料,然後使用表單資料建立PDF檔案,請叫用其他AEM Forms操作。 (請參閱使用已提交的XML資料建立PDF文檔)
下圖顯示從Web瀏覽器中顯示的互動式表單提交到名為HandleData
的Java Servlet的資料。
下表說明圖表中的步驟。
步驟 |
說明 |
---|---|
1 |
使用者填入互動式表單,並按一下表單的「提交」按鈕。 |
2 |
資料以XML資料的形式提交到 |
3 |
|
表單資料以XML形式提交時,您可以擷取代表已提交資料的XML資料。 所有表單欄位在XML架構中都顯示為節點。 節點值與使用者填入的值對應。 請考慮使用貸款表單,表單中的每個欄位在XML資料中都顯示為節點。 每個節點的值都與使用者填入的值對應。 假設使用者填入貸款表單,其中顯示以下表單的資料。
下圖顯示使用Forms服務用戶端API擷取的對應XML資料。
貸款表單中的欄位。 可擷取這些值
使用Java XML類。
表單設計必須在設計工具中正確設定,才能以XML資料提交資料。 要正確配置表單設計以提交XML資料,請確保將表單設計上的「提交」按鈕設定為提交XML資料。 有關設定「提交」按鈕以提交XML資料的資訊,請參閱AEM Forms Designer。
請考慮叫用Forms服務的Web應用程式。 Forms服務將互動式PDF表單轉譯給用戶端網頁瀏覽器後,使用者會填入表單,並以PDF資料形式提交回。 Forms服務收到PDF資料時,可將PDF資料傳送至其他服務或儲存為PDF檔案。 下圖顯示應用程式的邏輯流程。
下表說明此圖中的步驟。
步驟 |
說明 |
---|---|
3 |
網頁包含存取叫用Forms服務的Java Servlet的連結。 |
2 |
Forms服務會為用戶端網頁瀏覽器轉譯互動式PDF表單。 |
3 |
使用者填入互動式表單,然後按一下提交按鈕。 表單會以PDF資料形式提交回Forms服務。 此選項在Designer中設定。 |
4 |
Forms服務會將PDF資料儲存為PDF檔案。 |
如果表單資料以URL UTF-16資料提交,用戶端電腦需要Adobe Reader或Acrobat 8.1或更新版本。 此外,如果表單設計包含具有URL編碼資料(HTTP Post)的提交按鈕,且資料編碼選項為UTF-16,則必須在文字編輯器(如記事本)中修改表單設計。 您可以為提交按鈕將編碼選項設定為UTF-16LE
或UTF-16BE
。 Designer不提供此功能。
如需Forms服務的詳細資訊,請參閱AEM Forms的服務參考。
要處理已提交的表單,請執行以下任務:
包含項目檔案
在您的開發專案中加入必要的檔案。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用Web服務,請確定您包含Proxy檔案。
建立Forms用戶端API物件
您必須先建立Forms服務用戶端,才能以程式設計方式執行Forms服務用戶端API作業。 如果您使用Java API,請建立FormsServiceClient
物件。 如果您使用Forms Web服務API,請建立FormsService
物件。
擷取表單資料
若要擷取已提交的表單資料,請叫用FormsServiceClient
物件的processFormSubmission
方法。 叫用此方法時,您必須指定已提交表單的內容類型。 從用戶端網頁瀏覽器提交資料至Forms服務時,可以以XML或PDF資料的形式提交資料。 若要擷取輸入表單欄位中的資料,可以以XML資料提交資料。
您也可以設定下列執行階段選項,從以PDF資料提交的表單中擷取表單欄位:
processFormSubmission
方法:CONTENT_TYPE=application/pdf
。RenderOptionsSpec
物件的PDFToXDP
值設為true
RenderOptionsSpec
物件的ExportDataFormat
值設為XMLData
調用processFormSubmission
方法時,可指定已提交表單的內容類型。 以下清單指定了適用的內容類型值:
您會發現,有三個對應的快速入門與處理已提交的Forms區段相關聯。 使用Java API快速入門處理以PDF提交的PDF forms,示範如何處理已提交的PDF資料。 此快速入門中指定的內容類型為application/pdf
。 使用Java API快速入門處理以XML提交的PDF forms示範如何處理以PDF表單提交的已提交XML資料。 此快速入門中指定的內容類型為text/xml
。 同樣地,使用Java API快速入門處理以XML提交的HTML表單,會示範如何處理從HTML表單提交的已提交XML資料。 此快速入門中指定的內容類型為application/x-www-form-urlencoded。
您會擷取張貼至Forms服務的表單資料,並判斷其處理狀態。 也就是說,將資料提交至Forms服務時,並不代表Forms服務已完成資料處理,且資料已準備好處理。 例如,資料可提交至Forms服務,以便執行計算。 計算完成後,表單將呈現給用戶並顯示計算結果。 處理提交的資料之前,建議您判斷Forms服務是否已完成資料處理。
Forms服務會傳回下列值,指出其是否已完成資料處理:
計算和驗證必須返回給用戶。 (請參閱計算表單資料。
確定表單提交是否包含檔案附件
提交至Forms服務的Forms可包含檔案附件。 例如,使用Acrobat的內建附件窗格,使用者可以選取要連同表單一併提交的檔案附件。 此外,用戶還可以使用HTML工具欄(以HTML檔案呈現)選擇檔案附件。
在您確定表單是否包含檔案附件後,您就可以處理資料。 例如,您可以將檔案附件保存到本地檔案系統。
表單必須以PDF資料提交,才能擷取檔案附件。 如果表單以XML資料提交,則不會提交檔案附件。
處理提交的資料
您可以根據已提交資料的內容類型,從已提交的XML資料中擷取個別表單欄位值,或將已提交的PDF資料儲存為PDF檔案(或將其傳送至其他服務)。 要提取單個表單欄位,請將提交的XML資料轉換為XML資料源,然後使用org.w3c.dom
類檢索XML資料源值。
另請參閱
使用Forms API(Java)處理已提交的表單:
包含項目檔案
在Java專案的類別路徑中加入用戶端JAR檔案,例如adobe-forms-client.jar。
建立Forms用戶端API物件
ServiceClientFactory
對象。ServiceClientFactory
物件,以建立FormsServiceClient
物件。擷取表單資料
javax.servlet.http.HttpServletResponse
對象的getInputStream
方法,建立com.adobe.idp.Document
對象。RenderOptionsSpec
物件。 通過調用RenderOptionsSpec
對象的setLocale
方法並傳遞指定區域設定值的字串值來設定區域設定值。您可以叫用RenderOptionsSpec
物件的setPDF2XDP
方法並傳遞true
,以及呼叫setXMLData
並傳遞true
,指示Forms服務從已提交的PDF內容建立XDP或XML資料。 然後,可以調用FormsResult
對象的getOutputXML
方法以檢索與XDP/XML資料對應的XML資料。 (FormsResult
物件由processFormSubmission
方法傳回,將於下一個子步驟說明。)
調用FormsServiceClient
對象的processFormSubmission
方法並傳遞以下值:
com.adobe.idp.Document
物件。CONTENT_TYPE=text/xml
。 若要處理PDF資料,請為此參數指定下列字串值:CONTENT_TYPE=application/pdf
。HTTP_USER_AGENT
標題值的字串值,例如。 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
. 此參數值為選用值。RenderOptionsSpec
對象。processFormSubmission
方法會傳回包含表單提交結果的FormsResult
物件。
叫用FormsResult
物件的getAction
方法,判斷Forms服務是否已完成表單資料的處理。 如果此方法返回值0
,則資料已準備好進行處理。
確定表單提交是否包含檔案附件
FormsResult
對象的getAttachments
方法。 此方法會傳回java.util.List
物件,其中包含以表單提交的檔案。java.util.List
對象,以確定是否有檔案附件。 如果有檔案附件,則每個元素都是com.adobe.idp.Document
實例。 您可以調用com.adobe.idp.Document
對象的copyToFile
方法並傳遞java.io.File
對象,以保存檔案附件。此步驟僅適用於表單以PDF提交的情況。
處理提交的資料
如果資料內容類型為application/vnd.adobe.xdp+xml
或text/xml
,請建立應用程式邏輯以檢索XML資料值。
FormsResult
對象的getOutputContent
方法,建立com.adobe.idp.Document
對象。java.io.DataInputStream
建構子並傳遞com.adobe.idp.Document
對象來建立java.io.InputStream
對象。org.w3c.dom.DocumentBuilderFactory
物件的newInstance
方法,建立org.w3c.dom.DocumentBuilderFactory
物件。org.w3c.dom.DocumentBuilderFactory
對象的newDocumentBuilder
方法,建立org.w3c.dom.DocumentBuilder
對象。org.w3c.dom.DocumentBuilder
對象的parse
方法並傳遞java.io.InputStream
對象,建立org.w3c.dom.Document
對象。org.w3c.dom.Document
對象以及要檢索其值的節點的名稱。 此方法會傳回代表節點值的字串值。 在此程式後的程式碼範例中,此自訂方法稱為getNodeText
。 此方法的內文如所示。如果資料內容類型為application/pdf
,請建立應用程式邏輯,將提交的PDF資料儲存為PDF檔案。
FormsResult
對象的getOutputContent
方法,建立com.adobe.idp.Document
對象。java.io.File
對象。 請務必指定PDF作為副檔名。com.adobe.idp.Document
物件的copyToFile
方法並傳遞java.io.File
物件,以填入PDF檔案。另請參閱
快速入門(SOAP模式):使用Java API處理以XML提交的PDF forms
快速入門(SOAP模式):使用Java API處理以XML提交的HTML表單
快速入門(SOAP模式):使用Java API處理以PDF提交的PDF forms
使用Forms API(網站服務)處理提交的表單:
包含項目檔案
建立Forms用戶端API物件
建立FormsService
物件並設定驗證值。
擷取表單資料
要檢索發佈到Java Servlet的表單資料,請使用其建構子建立BLOB
對象。
調用javax.servlet.http.HttpServletResponse
對象的getInputStream
方法,建立java.io.InputStream
對象。
使用其建構子並傳遞java.io.InputStream
物件的長度,以建立java.io.ByteArrayOutputStream
物件。
將java.io.InputStream
對象的內容複製到java.io.ByteArrayOutputStream
對象中。
調用java.io.ByteArrayOutputStream
對象的toByteArray
方法,建立位元組陣列。
叫用setBinaryData
方法並將位元組陣列傳遞為引數,以填入BLOB
物件。
使用其建構子建立RenderOptionsSpec
物件。 通過調用RenderOptionsSpec
對象的setLocale
方法並傳遞指定區域設定值的字串值來設定區域設定值。
調用FormsService
對象的processFormSubmission
方法並傳遞以下值:
BLOB
物件。CONTENT_TYPE=text/xml
。 若要處理PDF資料,請為此參數指定下列字串值:CONTENT_TYPE=application/pdf
。HTTP_USER_AGENT
標題值的字串值;例如Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
。RenderOptionsSpec
對象。BLOBHolder
物件。javax.xml.rpc.holders.StringHolder
物件。BLOBHolder
物件。BLOBHolder
物件。javax.xml.rpc.holders.ShortHolder
物件。MyArrayOf_xsd_anyTypeHolder
物件。 此參數用於儲存隨表單提交的檔案附件。FormsResultHolder
物件,其表單為已提交。processFormSubmission
方法會以表單提交的結果填入FormsResultHolder
參數。
叫用FormsResult
物件的getAction
方法,判斷Forms服務是否已完成表單資料的處理。 如果此方法傳回值0
,表單資料便已可供處理。 通過獲取FormsResultHolder
對象的value
資料成員的值,可以獲取FormsResult
對象。
確定表單提交是否包含檔案附件
獲取MyArrayOf_xsd_anyTypeHolder
對象的value
資料成員的值(將MyArrayOf_xsd_anyTypeHolder
對象傳遞到processFormSubmission
方法)。 此資料成員返回Objects
陣列。 Object
陣列中的每個元素都是Object
,與隨表單提交的檔案相對應。 您可以取得陣列內的每個元素,並將其轉換為BLOB
物件。
處理提交的資料
如果資料內容類型為application/vnd.adobe.xdp+xml
或text/xml
,請建立應用程式邏輯以檢索XML資料值。
FormsResult
對象的getOutputContent
方法,建立BLOB
對象。BLOB
對象的getBinaryData
方法,建立位元組陣列。java.io.ByteArrayInputStream
建構子並傳遞位元組陣列,建立java.io.InputStream
物件。org.w3c.dom.DocumentBuilderFactory
物件的newInstance
方法,建立org.w3c.dom.DocumentBuilderFactory
物件。org.w3c.dom.DocumentBuilderFactory
對象的newDocumentBuilder
方法,建立org.w3c.dom.DocumentBuilder
對象。org.w3c.dom.DocumentBuilder
對象的parse
方法並傳遞java.io.InputStream
對象,建立org.w3c.dom.Document
對象。org.w3c.dom.Document
對象以及要檢索其值的節點的名稱。 此方法會傳回代表節點值的字串值。 在此程式後的程式碼範例中,此自訂方法稱為getNodeText
。 此方法的內文如所示。如果資料內容類型為application/pdf
,請建立應用程式邏輯,將提交的PDF資料儲存為PDF檔案。
FormsResult
對象的getOutputContent
方法,建立BLOB
對象。BLOB
對象的getBinaryData
方法,建立位元組陣列。java.io.File
對象。 請務必指定PDF作為副檔名。java.io.File
物件,以建立java.io.FileOutputStream
物件。java.io.FileOutputStream
物件的write
方法並傳遞位元組陣列,以填入PDF檔案。另請參閱