處理已提交的Forms

本文中的範例和範例僅適用於AEM Forms的JEE環境。

讓使用者能夠填寫互動式表單的網路應用程式,需要將資料送回伺服器。 使用Forms服務,您可以擷取使用者在互動式表單中輸入的資料。 擷取資料後,您可以處理資料以符合您的業務需求。 例如,您可以將資料儲存在資料庫中、將資料傳送至其他應用程式、將資料傳送至其他服務、將資料合併為表單設計、在網頁瀏覽器中顯示資料等。

表單資料會以XML或PDF資料的形式提交至Forms服務,此選項是在設計人員中設定的。 以XML形式提交的表單可讓您擷取個別欄位資料值。 也就是說,您可以擷取使用者在表單中輸入之每個表單欄位的值。 提交為PDF資料的表單是二進位資料,而非XML資料。 您可將表單儲存為PDF檔案,或將表單傳送至其他服務。 如果您想從提交為XML的表單擷取資料,然後使用表單資料建立PDF檔案,請叫用另一個AEM Forms作業。 (請參閱使用已提交的XML資料建立PDF檔案

下圖顯示從Web瀏覽器中顯示的互動式表單提交到名為HandleData的Java Servlet的資料。

hs_hs_handlesubmit

下表說明了圖中的步驟。

步驟

說明

1

使用者填寫互動式表單,然後按一下表單的「提交」按鈕。

2

資料會以XML資料的形式提交至HandleData Java Servlet。

3

HandleData Java Servlet包含用於檢索資料的應用程式邏輯。

處理提交的XML資料

當表單資料以XML形式提交時,您可以擷取代表已提交資料的XML資料。 所有表單欄位都會以節點的形式出現在XML架構中。 節點值對應於用戶填入的值。 請考慮使用貸款表單,表單中每個欄位都會以節點的形式出現在XML資料中。 每個節點的值對應於用戶填入的值。 假設使用者填入貸款表單時,會顯示下清單單中的資料。

hs_hs_loanformdata

下圖顯示使用Forms服務客戶端API檢索的對應XML資料。

hs_hs_loandata

貸款表單中的欄位。 可以檢索這些值
使用Java XML類。

注意

表單設計必須在設計工具中正確設定,才能將資料提交為XML資料。 要正確配置表單設計以提交XML資料,請確保將表單設計上的「提交」按鈕設定為提交XML資料。 有關設定「提交」按鈕以提交XML資料的資訊,請參閱AEM Forms設計師

處理提交的PDF資料

考慮調用Forms服務的Web應用程式。 在Forms服務將互動式PDF表單轉譯至用戶端網頁瀏覽器後,使用者會填入表單並將其提交回PDF資料。 當Forms服務收到PDF資料時,可將PDF資料傳送至其他服務或儲存為PDF檔案。 下圖顯示應用程式的邏輯流程。

hs_hs_savingforms

下表說明此圖中的步驟。

步驟

說明

1

網頁包含訪問調用Forms服務的Java Servlet的連結。

2

Forms服務會將互動式PDF表單轉譯至用戶端網頁瀏覽器。

1

使用者填入互動式表單,然後按一下提交按鈕。 表單會以PDF資料形式提交回Forms服務。 此選項在設計器中設定。

4

Forms服務會將PDF資料儲存為PDF檔案。

處理已提交的URL UTF-16資料

如果表單資料是以URL UTF-16資料提交,用戶端電腦需要Adobe Reader或Acrobat 8.1或更新版本。 此外,如果表單設計包含具有URL編碼資料(HTTP貼文)的提交按鈕,且資料編碼選項為UTF-16,表單設計必須在文字編輯器(例如記事本)中修改。 您可以為提交按鈕將編碼選項設為UTF-16LEUTF-16BE。 設計人員不提供此功能。

注意

有關Forms服務的詳細資訊,請參閱AEM Forms服務參考

步驟摘要

要處理提交的表單,請執行以下任務:

  1. 包含專案檔案。
  2. 建立Forms用戶端API物件。
  3. 擷取表單資料。
  4. 確定表單提交是否包含檔案附件。
  5. 處理提交的資料。

包含專案檔案

將必要的檔案加入您的開發專案中。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用web services,請確定您包含proxy檔案。

建立Forms用戶端API物件

在以寫程式方式執行Forms服務客戶端API操作之前,必須建立Forms服務客戶端。 如果您使用Java API,請建立FormsServiceClient物件。 如果您使用Forms網站服務API,請建立FormsService物件。

擷取表單資料

若要擷取已提交的表單資料,請叫用FormsServiceClient物件的processFormSubmission方法。 在叫用此方法時,您必須指定已提交表單的內容類型。 當資料從用戶端網頁瀏覽器提交至Forms服務時,可以以XML或PDF資料的形式提交。 若要擷取輸入表單欄位的資料,可以將資料以XML資料提交。

您也可以設定下列執行時期選項,從提交為PDF資料的表單擷取表單欄位:

  • 將下列值傳遞至processFormSubmission方法,作為內容類型參數:CONTENT_TYPE=application/pdf
  • RenderOptionsSpec物件的PDFToXDP值設定為true
  • RenderOptionsSpec物件的ExportDataFormat值設定為XMLData

在調用processFormSubmission方法時,可以指定提交表單的內容類型。 下列清單指定適用的內容類型值:

  • text/xml:表示當PDF表單以XML形式提交表單資料時要使用的內容類型。
  • application/x-www-form-urlencoded:表示當HTML表單以XML形式提交資料時要使用的內容類型。
  • application/pdf:表示PDF表單以PDF格式提交資料時要使用的內容類型。
注意

您會注意到,「處理已提交的Forms」區段有3個對應的快速開始。 使用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服務返回以下值,以指示它是否已完成資料處理:

  • 0(提交):已 提交的資料已準備好處理。
  • 1(計算): Forms服務對資料執行計算操作,結果必須向用戶呈現。
  • 2(驗證):Forms 服務已驗證表單資料,結果必須轉譯回使用者。
  • 3(下一步): 目前頁面已變更,結果必須寫入用戶端應用程式。
  • 4(舊版):目前頁面已變更,結果必須寫入用戶端應用程式。
注意

必須將計算和驗證轉譯回用戶。 (請參閱計算表單資料

確定表單提交是否包含檔案附件

Forms提交到Forms服務可以包含檔案附件。 例如,使用Acrobat的內建附件窗格,使用者可以選擇要連同表單一起提交的檔案附件。 此外,使用者也可以使用HTML工具列來選取檔案附件,該工具列會以HTML檔案呈現。

確定表單是否包含檔案附件後,您可以處理資料。 例如,可以將檔案附件保存到本地檔案系統。

注意

表單必須提交為PDF資料,才能擷取檔案附件。 如果表單以XML資料形式提交,則不會提交檔案附件。

處理提交的資料

視已提交資料的內容類型而定,您可以從已提交的XML資料擷取個別的表單欄位值,或將已提交的PDF資料儲存為PDF檔案(或將它傳送至其他服務)。 若要擷取個別表單欄位,請將提交的XML資料轉換為XML資料來源,然後使用org.w3c.dom類別來擷取XML資料來源值。

另請參閱

包含AEM FormsJava庫檔案

設定連接屬性

Forms服務API快速入門

將檔案傳遞至Forms

建立轉譯Forms的Web應用程式

使用Java API處理提交的表單

使用FormsAPI(Java)處理提交的表單:

  1. 包含專案檔案

    在Java專案的類別路徑中包含用戶端JAR檔案,例如adobe-forms-client.jar。

  2. 建立Forms用戶端API物件

    • 建立包含連接屬性的ServiceClientFactory對象。
    • 使用其建構子並傳遞ServiceClientFactory對象,建立FormsServiceClient對象。
  3. 擷取表單資料

    • 若要擷取張貼至Java Servlet的表單資料,請使用其建構函式建立com.adobe.idp.Document物件,並從建構函式中叫用javax.servlet.http.HttpServletResponse物件的getInputStream方法。
    • 使用其建構子建立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物件。
      • 一個字串值,它指定包括所有相關HTTP標題的環境變數。 指定要處理的內容類型。 要處理XML資料,請為此參數指定以下字串值: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,則資料已準備就緒可供處理。

  4. 確定表單提交是否包含檔案附件

    • 叫用FormsResult物件的getAttachments方法。 此方法傳回java.util.List物件,其中包含隨表單提交的檔案。
    • 重複java.util.List對象以確定是否存在檔案附件。 如果存在檔案附件,則每個元素都是com.adobe.idp.Document實例。 您可以叫用com.adobe.idp.Document物件的copyToFile方法並傳遞java.io.File物件,以儲存檔案附件。
    注意

    此步驟僅適用於表單以PDF格式提交的情況。

  5. 處理提交的資料

    • 如果資料內容類型為application/vnd.adobe.xdp+xmltext/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對象。
      • 檢索XML文檔中每個節點的值。 完成此任務的一種方法是建立接受兩個參數的自定義方法: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

包含AEM FormsJava庫檔案

設定連接屬性

使用web service API處理提交的PDF資料

使用FormsAPI(web service)處理提交的表單:

  1. 包含專案檔案

    • 建立使用Forms服務WSDL的Java代理類。
    • 將Java代理類包含到類路徑中。
  2. 建立Forms用戶端API物件

    建立FormsService對象並設定驗證值。

  3. 擷取表單資料

    • 要檢索張貼到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物件。
      • 一個字串值,它指定包括所有相關HTTP標題的環境變數。 指定要處理的內容類型。 要處理XML資料,請為此參數指定以下字串值: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物件。

  4. 確定表單提交是否包含檔案附件

    獲取MyArrayOf_xsd_anyTypeHolder對象的value資料成員的值(MyArrayOf_xsd_anyTypeHolder對象已傳遞到processFormSubmission方法)。 此資料成員返回Objects的陣列。 Object陣列中的每個元素都是Object,與隨表單一起提交的檔案相對應。 您可以取得陣列中的每個元素,並將其轉換為BLOB物件。

  5. 處理提交的資料

    • 如果資料內容類型為application/vnd.adobe.xdp+xmltext/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對象。
      • 檢索XML文檔中每個節點的值。 完成此任務的一種方法是建立接受兩個參數的自定義方法: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檔案。

另請參閱

使用Base64編碼叫用AEM Forms

本頁內容