在使用者端轉譯Forms rendering-forms-at-the-client
本檔案中的範例和範例僅適用於JEE環境上的AEM Forms。
在使用者端轉譯Forms rendering-forms-at-the-client-inner
您可以最佳化PDF內容的傳送,並使用Forms或Adobe Reader的使用者端轉譯功能,改善Acrobat服務處理網路負載的能力。 此過程稱為在使用者端呈現表單。 若要在使用者端轉譯表單,使用者端裝置(通常為網頁瀏覽器)必須使用Acrobat 7.0或Adobe Reader 7.0或更新版本。
除非根子表單包含設定為auto的restoreState屬性,否則伺服器端指令碼執行所產生的表單變更,不會反映在使用者端轉譯的表單中。 如需有關這個屬性的詳細資訊,請參閱Forms Designer。
步驟摘要 summary-of-steps
若要在使用者端轉譯表單,請執行下列工作:
- 包含專案檔案。
- 建立Forms使用者端API物件。
- 設定使用者端演算執行階段選項。
- 在使用者端轉譯表單。
- 將表單寫入使用者端網頁瀏覽器。
包含專案檔
將必要的檔案納入您的開發專案中。 如果您使用Java建立使用者端應用程式,請包含必要的JAR檔案。 如果您使用Web服務,請確定您包含Proxy檔案。
建立Forms使用者端API物件
您必須先建立Forms服務使用者端,才能以程式設計方式執行Forms服務使用者端API作業。 如果您使用Java API,請建立FormsServiceClient物件。 如果您使用Forms Web服務API,請建立FormsService物件。
設定使用者端演算執行階段選項
透過將RenderAtClient執行階段選項設定為true,設定使用者端轉譯執行階段選項以在使用者端轉譯表單。 這會導致表單傳送至產生表單的使用者端裝置。 如果RenderAtClient是auto (預設值),則表單設計會決定是否在使用者端轉譯表單。 表單設計必須是具有可流動配置的表單設計。
您可以設定的選擇性執行階段選項是SeedPDF選項。 SeedPDF選項會將PDF容器(種子PDF檔案)與表單設計和XML資料結合。 表單設計和XML資料都會傳送到Acrobat或Adobe Reader,表單會在該處呈現。 當使用者端電腦沒有表單中使用的字型時,例如當一般使用者未授權使用表單擁有者授權使用的字型時,可以使用SeedPDF選項。
您可以使用Designer建立簡單的動態PDF檔案,以作為種子PDF檔案使用。 若要執行此工作,必須執行下列步驟:
- 決定是否需要在種子PDF檔案中嵌入任何字型。 種子PDF檔案必須包含正在呈現的表單所需的其他字型。 將字型嵌入種子PDF檔案時,請確定您沒有違反任何字型授權合約。 在Designer中,您可以決定您是否可合法嵌入字型。 儲存後,如果表單中有無法嵌入的字型,Designer會顯示訊息,列出無法嵌入的字型。 靜態PDF檔案不會在Designer中顯示此訊息。
- 如果您在Designer中建立種子PDF檔案,建議您至少新增包含訊息的文字欄位。 應該將訊息導向舊版Adobe Reader的使用者,告知他們需要Acrobat 7.0 (含)以上版本或Adobe Reader 7.0 (含)以上版本才能檢視檔案。
- 將種子PDF檔案另存為動態PDF檔案,並以PDF檔案的副檔名命名。
在使用者端轉譯表單
若要在使用者端轉譯表單,您必須確定使用者端轉譯執行階段選項已包含在要轉譯表單的應用程式邏輯中。
將表單資料流寫入使用者端網頁瀏覽器
Forms服務會建立您必須寫入使用者端網頁瀏覽器的表單資料流。 寫入使用者端網頁瀏覽器時,表單會由Acrobat 7.0或Adobe Reader 7.0或更新版本轉譯,且使用者可看到。
另請參閱
使用Java API在使用者端轉譯表單 render-a-form-at-the-client-using-the-java-api
使用Forms API (Java)在使用者端轉譯表單:
-
包含專案檔案
在您的Java專案的類別路徑中包含使用者端JAR檔案,例如adobe-forms-client.jar。
-
建立Forms使用者端API物件
- 建立包含連線屬性的
ServiceClientFactory物件。 - 使用它的建構函式並傳遞
ServiceClientFactory物件來建立FormsServiceClient物件。
- 建立包含連線屬性的
-
設定使用者端演算執行階段選項
- 使用物件的建構函式建立
PDFFormRenderSpec物件。 - 呼叫
PDFFormRenderSpec物件的setRenderAtClient方法並傳遞列舉值RenderAtClient.Yes,以設定RenderAtClient執行階段選項。
- 使用物件的建構函式建立
-
在使用者端轉譯表單
叫用
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物件,其中包含必須寫入使用者端網頁瀏覽器的表單資料流。 - 字串值,指定表單設計名稱,包括副檔名。 如果您參照的表單設計屬於AEM Forms應用程式的一部分,請確定您指定完整路徑,例如
-
將表單資料流寫入使用者端網頁瀏覽器
- 呼叫
FormsResult物件的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物件。 - 呼叫
com.adobe.idp.Document物件的getInputStream方法,以建立java.io.InputStream物件。 - 呼叫
InputStream物件的read方法,並將位元組陣列作為引數傳遞,以建立位元組陣列並以表單資料串流填入。 - 叫用
javax.servlet.ServletOutputStream物件的write方法,將表單資料流傳送至使用者端網頁瀏覽器。 將位元組陣列傳遞至write方法。
- 呼叫
另請參閱
使用網站服務API在使用者端轉譯表單 render-a-form-at-the-client-using-the-web-service-api
使用Forms API (Web服務)在使用者端轉譯表單:
-
包含專案檔案
- 建立使用Forms服務WSDL的Java Proxy類別。
- 將Java Proxy類別納入您的類別路徑中。
-
建立Forms使用者端API物件
建立
FormsService物件並設定驗證值。 -
設定使用者端演算執行階段選項
- 使用物件的建構函式建立
PDFFormRenderSpec物件。 - 呼叫
PDFFormRenderSpec物件的setRenderAtClient方法並傳遞字串值RenderAtClient.Yes,以設定RenderAtClient執行階段選項。
- 使用物件的建構函式建立
-
在使用者端轉譯表單
叫用
FormsService物件的renderPDFForm方法,並傳遞下列值:- 字串值,指定表單設計名稱,包括副檔名。 如果您參照的表單設計屬於Forms應用程式的一部分,請確定您指定完整路徑,例如
Applications/FormsApplication/1.0/FormsFolder/Loan.xdp。 - 包含要與表單合併之資料的
BLOB物件。 如果您不想合併資料,請傳遞null。 (請參閱使用可流動配置預先填入Forms。) PDFFormRenderSpec物件,儲存在使用者端轉譯表單所需的執行階段選項。- 包含Forms服務所需URI值的
URLSpec物件。 - 儲存檔案附件的
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物件。 - 字串值,指定表單設計名稱,包括副檔名。 如果您參照的表單設計屬於Forms應用程式的一部分,請確定您指定完整路徑,例如
-
將表單資料流寫入使用者端網頁瀏覽器
- 取得
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物件。 - 建立位元組陣列,並透過叫用
BLOB物件的getBinaryData方法來填入該陣列。 此工作會將FormsResult物件的內容指派給位元組陣列。 - 叫用
javax.servlet.http.HttpServletResponse物件的write方法,將表單資料流傳送至使用者端網頁瀏覽器。 將位元組陣列傳遞至write方法。
- 取得
另請參閱