使用已提交的XML資料建立PDF檔案

使用已提交的XML資料建立PDF檔案

讓使用者可填寫互動式表單的網路應用程式,需要將資料送回伺服器。 使用Forms服務,您可以擷取使用者在互動式表單中輸入的表單資料。 然後,您可以將表單資料傳遞至其他AEM Forms服務作業,並使用資料建立PDF檔案。

注意

在您閱讀本內容之前,建議您對處理已提交表單有深入的瞭解。 「處理提交的表單」中涵蓋表單設計與提交XML資料之間的關係等概念。

請考慮下列包含三個AEM Forms服務的工作流程:

  • 使用者從網路應用程式提交XML資料至Forms服務。
  • Forms服務用於處理提交的表單並提取表單欄位。 可處理表單資料。 例如,可將資料提交至企業資料庫。
  • 表單資料會傳送至輸出服務,以建立非互動式PDF檔案。
  • 非互動式PDF檔案會儲存在Content Services中(不建議使用)。

下圖提供此工作流程的視覺化表示。

cd_cd_finsrv_architecture_xml_pdf1

當使用者從用戶端網頁瀏覽器提交表單後,非互動式PDF檔案會儲存在Content Services(不建議使用)中。 下圖顯示儲存在Content Services中的PDF檔案(已過時)。

cd_cd_cs_gui

步驟摘要

若要使用已提交的XML資料建立非互動式PDF檔案並儲存在Content Services中的PDF檔案(不建議使用),請執行下列工作:

  1. 包含專案檔案。
  2. 建立表單、輸出和檔案管理物件。
  3. 使用Forms服務擷取表單資料。
  4. 使用「輸出」服務建立非互動式PDF檔案。
  5. 使用「檔案管理」服務,將PDF表格儲存在Content Services(已過時)中。

包含專案檔案

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

建立表單、輸出和文檔管理對象

在以程式設計方式執行Forms服務API操作之前,請先建立Forms Client API物件。 同樣地,由於此工作流會調用「輸出」和「文檔管理」服務,因此請同時建立「輸出客戶端API」對象和「文檔管理客戶端API」對象。

使用Forms服務擷取表單資料

擷取已提交至Forms服務的表單資料。 您可以處理提交的資料,以符合您的業務需求。 例如,您可以將表單資料儲存在企業資料庫中。 不過,若要建立非互動式PDF檔案,表單資料會傳遞至「輸出」服務。

使用「輸出」服務建立非互動式PDF檔案。

使用「輸出」服務建立以表單設計和XML表單資料為基礎的非互動式PDF檔案。 在工作流程中,會從Forms服務擷取表單資料。

使用檔案管理服務將PDF表格儲存在Content Services(已過時)

使用Document Management服務API,將PDF檔案儲存在Content Services(已過時)。

另請參閱

包含AEM Forms Java程式庫檔案

設定連接屬性

Forms Service API快速入門

使用Java API建立包含已提交XML資料的PDF檔案

使用表單、輸出和檔案管理API(Java),建立包含已提交XML資料的PDF檔案:

  1. 包含專案檔案

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

  2. 建立表單、輸出和文檔管理對象

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

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

      • 包含表單資料的com.adobe.idp.Document物件。
      • 指定環境變數的字串值,包括所有相關的HTTP標題。 通過為CONTENT_TYPE環境變數指定一個或多個值,指定要處理的內容類型。 例如,若要處理XML資料,請為此參數指定下列字串值:CONTENT_TYPE=text/xml
      • 指定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物件的getOutputContent方法,以建立com.adobe.idp.Document物件來擷取表單資料。 (此物件包含可傳送至Output服務的表單資料。)

    • 通過調用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。 本文給出了該方法的主體。

  4. 使用「輸出」服務建立非互動式PDF檔案。

    呼叫OutputClient物件的generatePDFOutput方法並傳遞下列值,以建立PDF檔案:

    • TransformationFormat列舉值。 若要產生PDF檔案,請指定TransformationFormat.PDF
    • 指定表單設計名稱的字串值。 確保表單設計與從Forms服務擷取的表單資料相容。
    • 指定表單設計所在內容根目錄的字串值。
    • 包含PDF執行時期選項的PDFOutputOptionsSpec物件。
    • RenderOptionsSpec物件,包含轉譯執行時期選項。
    • com.adobe.idp.Document物件,包含XML資料來源,其中包含要與表單設計合併的資料。 請確定此物件是由FormsResult物件的getOutputContent方法傳回。
    • generatePDFOutput方法返回包含操作結果的OutputResult對象。
    • 叫用OutputResult物件的getGeneratedDoc方法,擷取非互動式PDF檔案。 此方法會傳回代表非互動式PDF檔案的com.adobe.idp.Document例項。
  5. 使用檔案管理服務將PDF表格儲存在Content Services(已過時)

    叫用DocumentManagementServiceClientImpl物件的storeContent方法並傳遞下列值,以新增內容:

    • 一個字串值,它指定添加內容的儲存。 預設商店為SpacesStore。 此值為必要參數。
    • 一個字串值,它指定添加內容的空間的完全限定路徑(例如/Company Home/Test Directory)。 此值為必要參數。
    • 代表新內容的節點名稱(例如MortgageForm.pdf)。 此值為必要參數。
    • 指定節點類型的字串值。 若要新增內容,例如PDF檔案,請指定{https://www.alfresco.org/model/content/1.0}content。 此值為必要參數。
    • 代表內容的com.adobe.idp.Document物件。 此值為必要參數。
    • 指定編碼值的字串值(例如UTF-8)。 此值為必要參數。
    • UpdateVersionType列舉值,指定如何處理版本資訊(例如UpdateVersionType.INCREMENT_MAJOR_VERSION)以增加內容版本。 )此值為必要參數。
    • 一個java.util.List實例,它指定與內容相關的方面。 此值是可選參數,您可以指定null
    • 儲存內容屬性的java.util.Map對象。

    storeContent方法返回描述內容的CRCResult對象。 例如,您可以使用CRCResult物件,取得內容的唯一識別碼值。 要執行此任務,請調用CRCResult對象的getNodeUuid方法。

另請參閱

包含AEM Forms Java程式庫檔案

設定連接屬性

本頁內容