建立PDF檔案

您可以使用Output服務來建立以您提供的表單設計和XML表單資料為基礎的PDF檔案。 Output服務建立的PDF檔案不是互動式PDF檔案;使用者無法輸入或修改表單資料。

如果要建立用於長期儲存的PDF檔案,建議您建立PDF/A檔案。 (請參閱建立PDF/A檔案。)

若要建立可讓使用者輸入資料的互動式PDF表單,請使用Forms服務。 (請參閱呈現互動式PDF forms。)

注意
如需有關Output服務的詳細資訊,請參閱AEM Forms的服務參考

步驟摘要

若要建立PDF檔案,請執行下列步驟:

  1. 包含專案檔案。
  2. 建立輸出使用者端物件。
  3. 參考XML資料來源。
  4. 設定PDF執行階段選項。
  5. 設定演算執行階段選項。
  6. 產生PDF檔案。
  7. 擷取作業的結果。

包含專案檔

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

必須將下列JAR檔案新增至專案的類別路徑:

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-output-client.jar
  • adobe-utilities.jar (如果AEM Forms部署在JBoss上,則為必要)
  • jbossall-client.jar (如果AEM Forms部署在JBoss上,則為必要)

如果將AEM Forms部署在受支援的J2EE應用程式伺服器(不是JBoss)上,則必須將adobe-utilities.jar和jbossall-client.jar檔案取代為特定於AEM Forms部署所在之J2EE應用程式伺服器的JAR檔案。

建立輸出使用者端物件

您必須先建立輸出服務使用者端物件,才能以程式設計方式執行輸出服務作業。 如果您使用Java API,請建立OutputClient物件。 如果您使用輸出Web服務API,請建立OutputServiceService物件。

參考XML資料來源

若要將資料與表單設計合併,您必須參照包含資料的XML資料來源。 您計畫填入資料的每個表單欄位都必須有XML元素。 XML元素名稱必須符合欄位名稱。 如果XML元素未對應至表單欄位,或XML元素名稱不符合欄位名稱,則會忽略該元素。 如果已指定所有XML元素,則不必比對XML元素的顯示順序。

請考量下列貸款申請表範例。

cp_cp_loanformdata

若要將資料合併至此表單設計,您必須建立與表單相對應的XML資料來源。 下列XML代表與範例抵押應用程式表單相對應的XDP XML資料來源。

 <?xml version="1.0" encoding="UTF-8" ?>
 - <xfa:datasets xmlns:xfa="https://www.xfa.org/schema/xfa-data/1.0/">
 - <xfa:data>
 - <data>
     - <Layer>
         <closeDate>1/26/2007</closeDate>
         <lastName>Johnson</lastName>
         <firstName>Jerry</firstName>
         <mailingAddress>JJohnson@NoMailServer.com</mailingAddress>
         <city>New York</city>
         <zipCode>00501</zipCode>
         <state>NY</state>
         <dateBirth>26/08/1973</dateBirth>
         <middleInitials>D</middleInitials>
         <socialSecurityNumber>(555) 555-5555</socialSecurityNumber>
         <phoneNumber>5555550000</phoneNumber>
     </Layer>
     - <Mortgage>
         <mortgageAmount>295000.00</mortgageAmount>
         <monthlyMortgagePayment>1724.54</monthlyMortgagePayment>
         <purchasePrice>300000</purchasePrice>
         <downPayment>5000</downPayment>
         <term>25</term>
         <interestRate>5.00</interestRate>
     </Mortgage>
 </data>
 </xfa:data>
 </xfa:datasets>

設定PDF執行階段選項

建立PDF檔案時,請設定檔案URI選項。 此選項指定輸出服務產生的PDF檔案的名稱和位置。

注意
您不必設定檔案URI執行階段選項,而是可以程式設計方式從輸出服務傳回的複雜資料型別中擷取PDF檔案。 但是,透過設定檔案URI執行時間選項,您不需要建立以程式擷取PDF檔案的應用程式邏輯。

設定演算執行階段選項

建立PDF檔案時,您可以設定演算執行階段選項。 雖然這些選項並非必要專案(不同於必要專案的PDF執行階段選項),但您可以執行工作,例如改善Output服務的效能。 例如,您可以快取Output服務用來改善其效能的表單設計。

如果您使用已標籤的Acrobat表單作為輸入,則無法使用輸出服務Java或Web服務API來關閉已標籤的設定。 如果您嘗試以程式設計方式將此選項設定為false,則仍會標籤結果PDF檔案。

注意
如果您未指定呈現執行階段選項,則會使用預設值。 如需有關演算執行階段選項的資訊,請參閱RenderOptionsSpec類別參考。 (請參閱AEM Forms API參考)。

產生PDF檔案

在參照包含表單資料的有效XML資料來源並設定執行階段選項後,您可以叫用Output服務,使其產生PDF檔案。

產生PDF檔案時,您可以指定Output服務建立PDF檔案所需的URI值。 表單設計可儲存在伺服器檔案系統等位置或作為AEM Forms應用程式的一部分。 使用內容根URI值repository:///,可參考存在於Forms應用程式一部分的表單設計(或其他資源,例如影像檔案)。 例如,假設下列名為​ Loan.xdp ​的表單設計位於名為​ Applications/FormsApplication ​的Forms應用程式中:

cp_cp_formrepository

若要存取上圖所示的Loan.xdp檔案,請將repository:///Applications/FormsApplication/1.0/FormsFolder/指定為傳遞至OutputClient物件之generatePDFOutput方法的第三個引數。 將表單名稱(Loan.xdp)指定為傳遞至OutputClient物件之generatePDFOutput方法的第二個引數。

如果XDP檔案包含影像(或其他資源,例如片段),請將資源放在與XDP檔案相同的應用程式資料夾中。 AEM Forms使用內容根URI作為基礎路徑來解析對影像的參照。 例如,如果Loan.xdp檔案包含影像,請確定您將該影像放在Applications/FormsApplication/1.0/FormsFolder/中。

注意
叫用OutputClient物件的generatePDFOutputgeneratePrintedOutput方法時,您可以參考Forms應用程式URI。
注意
若要檢視透過參考Forms應用程式中的XDP來建立PDF檔案的完整快速入門,請參閱快速入門(EJB模式):使用Java API根據應用程式XDP檔案建立PDF檔案

擷取作業的結果

Output服務執行作業之後,會傳回各種資料專案,例如指定作業是否成功的狀態XML資料。

另請參閱

使用Java API建立PDF檔案

使用Web服務API建立PDF檔案

包含AEM Forms Java程式庫檔案

設定連線屬性

輸出服務API快速啟動

使用Java API建立PDF檔案

使用Output API (Java)建立PDF檔案:

  1. 包含專案檔案。

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

  2. 建立輸出使用者端物件。

    • 建立包含連線屬性的ServiceClientFactory物件。
    • 使用它的建構函式並傳遞ServiceClientFactory物件來建立OutputClient物件。
  3. 參考XML資料來源。

    • 建立java.io.FileInputStream物件,代表用來填入PDF檔案的XML資料來源,使用它的建構函式,並傳遞指定XML檔案位置的字串值。
    • 使用物件的建構函式建立com.adobe.idp.Document物件。 傳遞java.io.FileInputStream物件。
  4. 設定PDF執行階段選項。

    • 使用物件的建構函式建立PDFOutputOptionsSpec物件。
    • 呼叫PDFOutputOptionsSpec物件的setFileURI方法來設定檔案URI選項。 傳遞字串值,指定輸出服務產生的PDF檔案位置。 檔案URI選項是相對於主控AEM Forms的J2EE應用程式伺服器,而非使用者端電腦。
  5. 設定演算執行階段選項。

    • 使用物件的建構函式建立RenderOptionsSpec物件。
    • 快取表單設計以透過叫用RenderOptionsSpec物件的setCacheEnabled並傳遞true來改善輸出服務的效能。
    注意
    如果輸入檔案是Acrobat表單(在Acrobat中建立的表單)或已簽署或認證的XFA檔案,則您無法使用RenderOptionsSpec物件的setPdfVersion方法設定PDF檔案的版本。 輸出PDF檔案會保留原始PDF版本。 同樣地,如果輸入檔案是Adobe PDF表單或已簽署或認證的XFA檔案,則您無法透過叫用RenderOptionsSpec物件的setTaggedPDF方法來設定已標籤的Acrobat選項。
    注意
    如果輸入PDF檔案是經過認證或數位簽署的,則您無法使用RenderOptionsSpec物件的setLinearizedPDF方法來設定線性PDF選項。 (請參閱數位簽署PDF檔案​。)
  6. 產生PDF檔案。

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

    • TransformationFormat列舉值。 若要產生PDF檔案,請指定TransformationFormat.PDF
    • 字串值,指定表單設計的名稱。
    • 字串值,指定表單設計所在的內容根。
    • 包含PDF執行階段選項的PDFOutputOptionsSpec物件。
    • 包含轉譯執行階段選項的RenderOptionsSpec物件。
    • 包含要與表單設計合併之資料的XML資料來源的com.adobe.idp.Document物件。

    generatePDFOutput方法傳回包含作業結果的OutputResult物件。

    注意
    當透過叫用generatePDFOutput方法產生PDF檔案時,您無法將資料與已簽署或認證的XFAPDF表單合併。 (請參閱數位簽署和認證檔案​。)
    注意
    OutputResult物件的getRecordLevelMetaDataList方法傳回​null.
    注意
    您也可以叫用OutputClient物件的generatePDFOutput2方法來建立PDF檔案。 (請參閱將Content Services (已過時)中的檔案傳遞至輸出服務​。)
  7. 擷取作業的結果。

    • 透過叫用OutputResult物件的getStatusDoc方法,擷取代表generatePDFOutput作業狀態的com.adobe.idp.Document物件。 此方法會傳回指定作業是否成功的狀態XML資料。
    • 建立包含作業結果的java.io.File物件。 確認副檔名為.xml。
    • 叫用com.adobe.idp.Document物件的copyToFile方法,將com.adobe.idp.Document物件的內容複製到檔案(請確定您使用的是getStatusDoc方法傳回的com.adobe.idp.Document物件)。

    雖然Output服務會將PDF檔案寫入傳遞至PDFOutputOptionsSpec物件之setFileURI方法的引數所指定的位置,但您可以透過叫用OutputResult物件的getGeneratedDoc方法,以程式設計方式擷取PDF/A檔案。

使用Web服務API建立PDF檔案

使用輸出API (Web服務)建立PDF檔案:

  1. 包含專案檔案。

    建立使用MTOM的Microsoft .NET專案。 確定您使用下列WSDL定義: http://localhost:8080/soap/services/OutputService?WSDL&lc_version=9.0.1

    注意
    localhost取代為主控AEM Forms之伺服器的IP位址。
  2. 建立輸出使用者端物件。

    • 使用預設建構函式建立OutputServiceClient物件。

    • 使用System.ServiceModel.EndpointAddress建構函式建立OutputServiceClient.Endpoint.Address物件。 將指定WSDL的字串值傳遞至AEM Forms服務(例如,http://localhost:8080/soap/services/OutputService?blob=mtom)。 您不需要使用lc_version屬性。 當您建立服務參考時,會使用此屬性。 但是,請指定?blob=mtom以使用MTOM。

    • 取得OutputServiceClient.Endpoint.Binding欄位的值,以建立System.ServiceModel.BasicHttpBinding物件。 將傳回值轉換為BasicHttpBinding

    • System.ServiceModel.BasicHttpBinding物件的MessageEncoding欄位設為WSMessageEncoding.Mtom。 此值可確保使用MTOM。

    • 執行下列工作來啟用基本的HTTP驗證:

      • 將AEM表單使用者名稱指派給欄位OutputServiceClient.ClientCredentials.UserName.UserName
      • 將對應的密碼值指派給欄位OutputServiceClient.ClientCredentials.UserName.Password
      • 將常數值HttpClientCredentialType.Basic指派給欄位BasicHttpBindingSecurity.Transport.ClientCredentialType
      • 將常數值BasicHttpSecurityMode.TransportCredentialOnly指派給欄位BasicHttpBindingSecurity.Security.Mode
  3. 參考XML資料來源。

    • 使用物件的建構函式建立BLOB物件。 BLOB物件是用來儲存將與PDF檔案合併的XML資料。
    • 建立System.IO.FileStream物件,方法為叫用其建構函式,並傳遞代表包含表單資料之XML檔案的檔案位置的字串值。
    • 建立位元組陣列以儲存System.IO.FileStream物件的內容。 您可以取得System.IO.FileStream物件的Length屬性來決定位元組陣列的大小。
    • 呼叫System.IO.FileStream物件的Read方法,並傳遞要讀取的位元組陣列、起始位置和資料流長度,以資料流資料填入位元組陣列。
    • 以位元組陣列的內容指派其MTOM欄位,填入BLOB物件。
  4. 設定PDF執行階段選項

    • 使用物件的建構函式建立PDFOutputOptionsSpec物件。
    • 透過指派字串值來設定File URI選項,該字串值指定輸出服務產生給PDFOutputOptionsSpec物件的fileURI資料成員的PDF檔案位置。 檔案URI選項是相對於主控AEM Forms的J2EE應用程式伺服器,而非使用者端電腦。
  5. 設定演算執行階段選項。

    • 使用物件的建構函式建立RenderOptionsSpec物件。
    • 快取表單設計以透過將值true指派給RenderOptionsSpec物件的cacheEnabled資料成員來改善Output服務的效能。
    注意
    如果輸入檔案是Acrobat表單(在Acrobat中建立的表單)或已簽署或認證的XFA檔案,則您無法使用RenderOptionsSpec物件的setPdfVersion方法設定PDF檔案的版本。 輸出PDF檔案會保留原始PDF版本。 同樣地,如果輸入檔案是Adobe PDF表單或已簽署或認證的XFA檔案,您就無法透過叫用RenderOptionsSpec物件的setTaggedPDF方法來設定已標籤的Acrobat選項。
    注意
    如果輸入PDF檔案是經認證或數位簽署的,則您無法使用RenderOptionsSpec物件的linearizedPDF成員來設定線性PDF選項。 (請參閱數位簽署PDF檔案​。)
  6. 產生PDF檔案。

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

    • TransformationFormat列舉值。 若要產生PDF檔案,請指定TransformationFormat.PDF
    • 字串值,指定表單設計的名稱。
    • 字串值,指定表單設計所在的內容根。
    • 包含PDF執行階段選項的PDFOutputOptionsSpec物件。
    • 包含轉譯執行階段選項的RenderOptionsSpec物件。
    • 包含要與表單設計合併之資料的XML資料來源的BLOB物件。
    • generatePDFOutput方法填入的BLOB物件。 generatePDFOutput方法會將描述檔案的產生中繼資料填入此物件。 (只有Web服務呼叫才需要此引數值)。
    • generatePDFOutput方法填入的BLOB物件。 generatePDFOutput方法會將結果資料填入此物件中。 (只有Web服務呼叫才需要此引數值)。
    • 包含作業結果的OutputResult物件。 (只有Web服務呼叫才需要此引數值)。
    注意
    當透過叫用generatePDFOutput方法產生PDF檔案時,您無法將資料與已簽署或認證的XFAPDF表單合併。 (請參閱數位簽署和認證檔案​。)
    注意
    您也可以叫用OutputClient物件的generatePDFOutput2方法來建立PDF檔案。 (請參閱將Content Services (已過時)中的檔案傳遞至輸出服務​。)
  7. 擷取作業的結果。

    • 建立System.IO.FileStream物件,方法為叫用其建構函式,並傳遞代表包含結果資料之XML檔案位置的字串值。 確認副檔名為.xml。
    • 建立位元組陣列,以儲存BLOB物件的資料內容,該物件是以OutputServiceService物件的generatePDFOutput方法(第八個引數)填入的結果資料。 取得BLOB物件的MTOM field的值,以填入位元組陣列。
    • 透過叫用它的建構函式並傳遞System.IO.FileStream物件來建立System.IO.BinaryWriter物件。
    • 呼叫System.IO.BinaryWriter物件的Write方法並傳遞位元組陣列,將位元組陣列的內容寫入XML檔案。

    另請參閱

注意
已棄用OutputServiceService物件的generateOutput方法。