在客戶端上呈現Forms

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

在客戶端上呈現Forms

您可以使用Acrobat或Adobe Reader的用戶端轉譯功能,最佳化PDF內容的傳送,並改善Forms服務處理網路負載的能力。 此程式稱為在客戶端上呈現表單。 若要在用戶端上轉譯表格,用戶端裝置(通常是網頁瀏覽器)必須使用Acrobat 7.0或Adobe Reader7.0或更新版本。

對伺服器端指令碼執行的表單所做的更改不會反映在客戶端呈現的表單中,除非根子表單包含設定為autorestoreState屬性。 有關此屬性的詳細資訊,請參閱Forms設計師。

注意

有關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物件。

設定客戶端渲染運行時選項

您必須將RenderAtClient運行時選項設定為true,將客戶端渲染運行時選項設定為在客戶端渲染表單。 這會導致表單被傳送至要轉譯的用戶端裝置。 如果RenderAtClientauto(預設值),表單設計會決定表單是否在用戶端呈現。 表單設計必須是具有可流動版面的表單設計。

您可以設定的選用執行時期選項是SeedPDF選項。 SeedPDF選項結合了PDF容器(種子PDF檔案)與表單設計和XML資料。 表單設計和XML資料都會傳送至Acrobat或Adobe Reader,以便轉換表單。 SeedPDF選項可在用戶端電腦沒有表單中使用的字型時使用,例如當使用者未取得授權使用表單擁有者有權使用的字型時。

您可以使用Designer建立簡單的動態PDF檔案,做為種子PDF檔案。 執行此任務需要執行以下步驟:

  1. 確定您是否需要在種子PDF檔案中嵌入任何字型。 種子PDF檔案必須包含所轉譯表單所需的其他字型。 將字型內嵌至種子PDF檔案時,請確定您未違反任何字型授權合約。 在Designer中,您可以決定是否可以合法地內嵌字型。 在儲存時,如果有字型無法內嵌在表單中,設計人員會顯示訊息,列出您無法內嵌的字型。 對於靜態PDF文檔,Designer中不會顯示此消息。
  2. 如果您要在Designer中建立種子PDF檔案,建議您至少新增包含訊息的文字欄位。 訊息應針對舊版Adobe Reader的使用者,指出他們需要Acrobat 7.0或更新版本或Adobe Reader7.0或更新版本才能檢視檔案。
  3. 將種子PDF檔案儲存為動態PDF檔案,副檔名為PDF。
注意

您不需要定義種子PDF執行時期選項,就能在用戶端上轉換表單。 如果您未指定種子PDF,Forms服務會建立一個殼層pdf,其中不包含COS物件,但將包含內嵌實際XDP內容的PDF包裝函式。 本節中的步驟不會設定種子PDF執行時期選項。 有關COS對象的資訊,請參閱《Adobe PDF參考指南》。

在用戶端上演算表格

若要在用戶端上轉換表格,您必須確保在應用程式邏輯中包含用戶端轉換執行時期選項,才能轉換表格。

將表單資料串流寫入用戶端網頁瀏覽器

Forms服務會建立一個表單資料流,您必須將其寫入客戶端Web瀏覽器。 當寫入用戶端網頁瀏覽器時,表單會由Acrobat 7.0或Adobe Reader7.0或更新版本轉譯,並且對使用者可見。

另請參閱

使用Java API在用戶端演算表格

使用web service API在用戶端演算表格

包含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. 設定客戶端渲染運行時選項

    • 使用其建構子建立PDFFormRenderSpec對象。
    • 調用PDFFormRenderSpec物件的setRenderAtClient方法並傳遞列舉值RenderAtClient.Yes,以設定RenderAtClient執行時期選項。
  4. 在用戶端上演算表格

    叫用FormsServiceClient物件的renderPDFForm方法並傳遞下列值:

    • 指定表單設計名稱的字串值,包括檔案副檔名。 如果您參考屬於AEM Forms應用程式的表單設計,請確定您指定完整路徑,例如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瀏覽器的表單資料流。

  5. 將表單資料串流寫入用戶端網頁瀏覽器

    • 通過調用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在用戶端轉譯表單

包含AEM FormsJava庫檔案

設定連接屬性

使用web service API在用戶端演算表格

使用FormsAPI(web service)在用戶端轉譯表格:

  1. 包含專案檔案

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

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

  3. 設定客戶端渲染運行時選項

    • 使用其建構子建立PDFFormRenderSpec對象。
    • 調用PDFFormRenderSpec物件的setRenderAtClient方法並傳遞字串值RenderAtClient.Yes,以設定RenderAtClient執行時期選項。
  4. 在用戶端上演算表格

    叫用FormsService物件的renderPDFForm方法並傳遞下列值:

    • 指定表單設計名稱的字串值,包括檔案副檔名。 如果您參考屬於Forms應用程式的表單設計,請確定您指定完整路徑,例如Applications/FormsApplication/1.0/FormsFolder/Loan.xdp
    • BLOB物件,包含要與表單合併的資料。 如果您不想合併資料,請傳遞null。 (請參閱使用可流式版面預填Forms)。
    • PDFFormRenderSpec物件,儲存在用戶端上轉譯表單所需的執行時期選項。
    • 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物件。

  5. 將表單資料串流寫入用戶端網頁瀏覽器

    • 獲取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方法。

另請參閱

在客戶端呈現Forms

使用Base64編碼叫用AEM Forms

本頁內容

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now