呈現互動式PDF forms

Forms服務會將互動式PDF forms轉譯給用戶端裝置(通常是網頁瀏覽器),以收集使用者的資訊。 轉譯互動式表單後,使用者可以在表單欄位中輸入資料,然後按一下表單上的提交按鈕,將資訊傳回Forms服務。 Adobe Reader或Acrobat必須安裝在托管用戶端網頁瀏覽器的電腦上,才能顯示互動式PDF表單。

注意

使用Forms服務演算表單之前,請先建立表單設計。 通常,表單設計會在設計工具中建立,並儲存為XDP檔案。 如需建立表單設計的相關資訊,請參閱Forms Designer

貸款申請示例

推出了範例貸款應用程式,以示範Forms服務如何使用互動式表單來收集使用者的資訊。 此應用程式可讓使用者填寫表單,其中含有確保貸款安全所需的資料,然後將資料提交至Forms服務。 下圖顯示貸款應用程式的邏輯流程。

ri_ri_finsrv_loanapp_v1

下表說明此圖中的步驟。

步驟

說明

1

從HTML頁面叫用GetLoanForm Java Servlet。

2

GetLoanForm Java Servlet使用Forms服務客戶端API來向客戶端Web瀏覽器呈現貸款表單。 (請參閱使用Java API轉譯互動式PDF表單。)

3

用戶填寫貸款表並按一下提交按鈕後,資料將提交到HandleData Java Servlet。 (請參閱"貸款表"。)

4

HandleData Java Servlet使用Forms服務用戶端API來處理表單提交和擷取表單資料。 然後,將資料儲存在企業資料庫中。 (請參閱處理已提交的Forms。)

5

確認表格會呈現回網頁瀏覽器。 使用者的名字和姓氏等資料在轉譯前會與表單合併。 (請參閱使用可流動配置預填Forms。)

貸款表

此互動式貸款表單由範例貸款應用程式的GetLoanForm Java Servlet轉譯。

ri_ri_loanform

確認表

此表單由範例貸款應用程式的HandleData Java Servlet呈現。

ri_ri_confirm

HandleData Java Servlet會以使用者的名字和姓氏以及金額預先填入此表單。 預先填入表單後,表單會傳送至用戶端網頁瀏覽器。 (請參閱使用可流動配置預填Forms)

Java Servlet

範例貸款應用程式是以Java Servlet存在的Forms服務應用程式的範例。 Java Servlet是在J2EE應用程式伺服器(如WebSphere)上運行的Java程式,包含Forms服務客戶端API代碼。

以下代碼顯示名為GetLoanForm的Java Servlet的語法:

     public class GetLoanForm extends HttpServlet implements Servlet { 
         public void doGet(HttpServletRequest req, HttpServletResponse resp 
         throws ServletException, IOException { 
          
         } 
         public void doPost(HttpServletRequest req, HttpServletResponse resp 
         throws ServletException, IOException { 
              
             }

通常,您不會將Forms服務用戶端API程式碼放入Java Servlet的doGetdoPost方法中。 將此程式碼放置在個別類別中、從doPost方法(或doGet方法)實例化類別,並呼叫適當方法,是較佳的程式設計實務。 不過,為了簡化程式碼,本區段中的程式碼範例會維持在最小值,且程式碼範例會放置在doPost方法中。

注意

如需Forms服務的詳細資訊,請參閱AEM Forms的服務參考

步驟摘要

要呈現互動式PDF表單,請執行以下任務:

  1. 包含專案檔案。
  2. 建立Forms用戶端API物件。
  3. 指定URI值。
  4. 將檔案附加到表單(可選)。
  5. 轉譯互動式PDF表單。
  6. 將表單資料流寫入客戶端Web瀏覽器。

包含項目檔案

在您的開發專案中加入必要的檔案。 如果要使用Java建立客戶端應用程式,請包括必要的JAR檔案。 如果您使用Web服務,請確定您包含Proxy檔案。

建立Forms用戶端API物件

您必須先建立Forms Client API物件,才能以程式設計方式執行Forms服務用戶端API作業。 如果您使用Java API,請建立FormsServiceClient物件。 如果您使用Forms Web服務API,請建立FormsService物件。

指定URI值

您可以指定Forms服務呈現表單所需的URI值。 儲存為Forms應用程式一部分的表單設計,可使用內容根URI值repository:///來參照。 例如,請考慮以下名為​Loan.xdp​的表單設計,該表單設計位於名為​FormsApplication​的Forms應用程式中:

ri_ri_formrepository

若要存取此表單設計,請指定Applications/FormsApplication/1.0/FormsFolder/Loan.xdp作為表單名稱(傳遞至renderPDFForm方法的第一個參數),指定repository:///作為內容根URI值。

注意

如需使用Workbench建立Forms應用程式的相關資訊,請參閱Workbench說明

位於Forms應用程式中之資源的路徑為:

Applications/Application-name/Application-version/Folder.../Filename

以下值顯示一些URI值的示例:

  • Applications/AppraisalReport/1.0/Forms/FullForm.xdp
  • Applications/AnotherApp/1.1/Assets/picture.jpg
  • Applications/SomeApp/2.0/Resources/Data/XSDs/MyData.xsd

呈現互動式表單時,您可以定義URI值,例如張貼表單資料的目標URL。 目標URL可透過下列其中一種方式定義:

  • 在Designer中設計表單設計時的「提交」按鈕
  • 使用Forms服務用戶端API

如果目標URL是在表單設計中定義,請勿以Forms服務用戶端API覆寫它。 也就是說,使用Forms API設定目標URL會將表單設計中指定的URL重設為使用API指定的URL。 如果要將PDF表單提交到表單設計中指定的目標URL,請以程式設計方式將目標URL設定為空字串。

如果您的表單包含提交按鈕和計算按鈕(具有在伺服器上運行的相應指令碼),則可以以寫程式方式定義表單要發送到的URL以執行指令碼。 使用表單設計上的提交按鈕,指定張貼表單資料的URL。 (請參閱計算表單資料。)

注意

您也可以將com.adobe.idp.Document例項傳遞至Forms服務,而不是指定URL值以參考XDP檔案。 com.adobe.idp.Document實例包含表單設計。 (請參閱將檔案傳遞至Forms服務。)

將檔案附加到表單

您可以將檔案附加到表單。 在您轉譯含有檔案附件的PDF表單時,使用者可以使用檔案附件窗格在Acrobat中擷取檔案附件。 您可以將不同的檔案類型附加到表單(如文本檔案)或二進位檔案(如JPG檔案)。

注意

將檔案附件附加到表單是可選的。

轉譯互動式PDF表單

若要呈現表單,請使用在Designer中建立並儲存為XDP或PDF檔案的表單設計。 您也可以轉譯使用Acrobat建立並儲存為PDF檔案的表單。 要呈現互動式PDF表單,請調用FormsServiceClient對象的renderPDFForm方法或renderPDFForm2方法。

renderPDFForm使用URLSpec物件。 XDP檔案的內容根會使用URLSpec物件的setContentRootURI方法傳遞至Forms服務。 表單設計名稱(formQuery)會以單獨的參數值傳遞。 這兩個值會串連,以取得表單設計的絕對參照。

renderPDFForm2方法接受要呈現的com.adobe.idp.Document實例,該實例包含XDP或PDF文檔。

注意

如果輸入文檔是PDF文檔,則無法設定標籤的PDF運行時選項。 如果輸入檔案是XDP檔案,則可以設定標籤的PDF選項。

使用Java API轉譯互動式PDF表單

使用Forms API(Java)轉譯互動式PDF表單:

  1. 包含項目檔案

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

  2. 建立Forms用戶端API物件

    • 建立包含連接屬性的ServiceClientFactory對象。
    • 使用其建構子並傳遞ServiceClientFactory物件,以建立FormsServiceClient物件。
  3. 指定URI值

    • 建立URLSpec對象,該對象使用其建構子儲存URI值。
    • 叫用URLSpec物件的setApplicationWebRoot方法,並傳遞代表應用程式Web根的字串值。
    • 調用URLSpec對象的setContentRootURI方法並傳遞指定內容根URI值的字串值。 確保表單設計位於內容根URI中。 否則,Forms服務會擲回例外狀況。 要引用儲存庫,請指定repository:///
    • 叫用URLSpec物件的setTargetURL方法,並傳遞字串值,指定將表單資料張貼到的目標URL值。 如果您在表單設計中定義目標URL,則可以傳遞空字串。 您也可以指定表單要傳送到哪個URL,以執行計算。
  4. 將檔案附加到表單

    • 使用java.util.HashMap對象的建構子建立對象以儲存檔案附件。

    • 為每個檔案調用java.util.HashMap對象的put方法,以附加到呈現的表單。 將下列值傳遞至此方法:

      • 指定檔案附件名稱的字串值,包括檔案名副檔名。
    • 包含檔案附件的com.adobe.idp.Document對象。

    注意

    對要附加到表單的每個檔案重複此步驟。 此步驟是可選的,如果不想發送檔案附件,則可以傳遞null

  5. 轉譯互動式PDF表單

    調用FormsServiceClient對象的renderPDFForm方法並傳遞以下值:

    • 指定表單設計名稱的字串值,包括檔案名副檔名。 如果您參考屬於Forms應用程式一部分的表單設計,請務必指定完整路徑,例如Applications/FormsApplication/1.0/FormsFolder/Loan.xdp
    • com.adobe.idp.Document物件,包含要與表單合併的資料。 如果您不想合併資料,請傳遞空白的com.adobe.idp.Document物件。
    • 儲存運行時選項的PDFFormRenderSpec對象。 這是可選參數,如果您不想指定運行時選項,可以指定null
    • URLSpec物件,包含Forms服務所需的URI值。
    • 儲存檔案附件的java.util.HashMap對象。 這是可選參數,如果不想將檔案附加到表單,可以指定null

    renderPDFForm方法返回一個FormsResult對象,該對象包含必須寫入客戶端Web瀏覽器的表單資料流。

  6. 將表單資料流寫入客戶端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方法,建立用於將表單資料流寫入客戶端Web瀏覽器的javax.servlet.ServletOutputStream對象。
    • 調用com.adobe.idp.Document對象的getInputStream方法,建立java.io.InputStream對象。
    • 叫用InputStream物件的read方法,並將位元組陣列傳遞為引數,借此建立位元組陣列,並填入表單資料流。
    • 調用javax.servlet.ServletOutputStream對象的write方法,將表單資料流發送到客戶端Web瀏覽器。 將位元組陣列傳遞至write方法。

使用Web服務API轉譯互動式PDF表單

使用Forms API(網站服務)轉譯互動式PDF表單:

  1. 包含項目檔案

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

    建立FormsService物件並設定驗證值。

  3. 指定URI值

    • 建立URLSpec對象,該對象使用其建構子儲存URI值。
    • 叫用URLSpec物件的setApplicationWebRoot方法,並傳遞代表應用程式Web根的字串值。
    • 調用URLSpec對象的setContentRootURI方法並傳遞指定內容根URI值的字串值。 確保表單設計位於內容根URI中。 否則,Forms服務會擲回例外狀況。 要引用儲存庫,請指定repository:///
    • 叫用URLSpec物件的setTargetURL方法,並傳遞字串值,指定將表單資料張貼到的目標URL值。 如果您在表單設計中定義目標URL,則可以傳遞空字串。 您也可以指定表單要傳送到哪個URL,以執行計算。
  4. 將檔案附加到表單

    • 使用java.util.HashMap對象的建構子建立對象以儲存檔案附件。

    • 為每個檔案調用java.util.HashMap對象的put方法,以附加到呈現的表單。 將下列值傳遞至此方法:

      • 指定檔案附件名稱的字串值,包括檔案名副檔名
    • 包含檔案附件的BLOB對象

    注意

    對要附加到表單的每個檔案重複此步驟。

  5. 轉譯互動式PDF表單

    調用FormsService對象的renderPDFForm方法並傳遞以下值:

    • 指定表單設計名稱的字串值,包括檔案名副檔名。 如果您參考屬於Forms應用程式一部分的表單設計,請務必指定完整路徑,例如Applications/FormsApplication/1.0/FormsFolder/Loan.xdp
    • BLOB物件,包含要與表單合併的資料。 如果您不想合併資料,請傳遞null
    • 儲存運行時選項的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物件。

  6. 將表單資料流寫入客戶端Web瀏覽器

    • 獲取com.adobe.idp.services.holders.FormsResultHolder對象的value資料成員的值,以建立FormResult對象。
    • 調用FormsResult對象的getOutputContent方法,建立包含表單資料的BLOB對象。
    • 調用getContentType方法,獲取BLOB對象的內容類型。
    • 通過調用setContentType方法並傳遞BLOB對象的內容類型來設定javax.servlet.http.HttpServletResponse對象的內容類型。
    • 通過調用javax.servlet.http.HttpServletResponse對象的getOutputStream方法,建立用於將表單資料流寫入客戶端Web瀏覽器的javax.servlet.ServletOutputStream對象。
    • 建立位元組陣列,並調用BLOB對象的getBinaryData方法來填入。 此任務將FormsResult對象的內容分配給位元組陣列。
    • 調用javax.servlet.http.HttpServletResponse對象的write方法,將表單資料流發送到客戶端Web瀏覽器。 將位元組陣列傳遞至write方法。

將表單資料流寫入客戶端Web瀏覽器

Forms服務轉譯表單時,會傳回您必須寫入用戶端網頁瀏覽器的表單資料流。 寫入客戶端Web瀏覽器時,用戶可以看到該表單。

本頁內容