DDXドキュメントの動的な作成

このドキュメントのサンプルと例は、JEE上のAEM Forms環境に限られています。

Assembler操作の実行に使用できるDDXドキュメントを動的に作成できます。 DDXドキュメントを動的に作成すると、実行時に取得されたDDXドキュメント内の値を使用できます。 DDXドキュメントを動的に作成するには、使用しているプログラミング言語に属するクラスを使用します。 例えば、Javaを使用してクライアントアプリケーションを開発する場合は、org.w3c.dom.*パッケージに属するクラスを使用します。 同様に、Microsoft .NETを使用している場合は、System.Xml名前空間に属するクラスを使用します。

DDXドキュメントをAssemblerサービスに渡す前に、XMLをorg.w3c.dom.Documentインスタンスからcom.adobe.idp.Documentインスタンスに変換します。 Webサービスを使用している場合は、XMLの作成に使用するデータ型(例えば、XmlDocument)からBLOBインスタンスにXMLを変換します。

この説明では、次のDDXドキュメントが動的に作成されたとします。

 <?xml version="1.0" encoding="UTF-8"?>
 <DDX xmlns="https://ns.adobe.com/DDX/1.0/">
      <PDFsFromBookmarks prefix="stmt">
     <PDF source="AssemblerResultPDF.pdf"/>
 </PDFsFromBookmarks>
 </DDX>

このDDXドキュメントは、PDFドキュメントを分解します。 PDFドキュメントのディスアセンブリについて詳しく理解しておくことをお勧めします。

メモ

Assemblerサービスについて詳しくは、『AEM Forms🔗向けサービスリファレンス』を参照してください。

メモ

DDXドキュメントについて詳しくは、『AssemblerサービスとDDXリファレンス』を参照してください。

手順の概要

動的に作成されたDDXドキュメントを使用してPDFドキュメントをディスアセンブリするには、次のタスクを実行します。

  1. プロジェクトファイルを含めます。
  2. PDFアセンブラークライアントを作成します。
  3. DDXドキュメントを作成します。
  4. DDXドキュメントを変換します。
  5. 実行時オプションを設定します。
  6. PDFドキュメントのディスアセンブリ。
  7. アセンブリ解除したPDFドキュメントを保存します。

プロジェクトファイルを含める

必要なファイルを開発プロジェクトに含めます。 Javaを使用してクライアントアプリケーションを作成する場合は、必要なJARファイルを含めます。 Webサービスを使用する場合は、プロキシファイルを必ず含めてください。

次のJARファイルをプロジェクトのクラスパスに追加する必要があります。

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-assembler-client.jar
  • adobe-utilities.jar(AEM FormsをJBossにデプロイする場合に必要)
  • jbossall-client.jar(AEM FormsをJBossにデプロイする場合に必要)

PDFアセンブラークライアントの作成

プログラムでAssembler操作を実行する前に、Assemblerサービスクライアントを作成します。

DDXドキュメントの作成

使用しているプログラミング言語を使用してDDXドキュメントを作成します。 PDFドキュメントをディスアセンブリするDDXドキュメントを作成するには、PDFsFromBookmarks要素が含まれていることを確認します。 Java APIを使用している場合、DDXドキュメントの作成に使用するデータ型をcom.adobe.idp.Documentインスタンスに変換します。 Webサービスを使用している場合は、データ型をBLOBインスタンスに変換します。

DDXドキュメントの変換

org.w3c.domクラスを使用して作成されたDDXドキュメントは、com.adobe.idp.Documentオブジェクトに変換する必要があります。 Java APIを使用する際にこのタスクを実行するには、Java XML変換クラスを使用します。 Webサービスを使用している場合は、DDXドキュメントをBLOBオブジェクトに変換します。

ディスアセンブリするPDFドキュメントの参照

PDFドキュメントをディスアセンブリするには、ディスアセンブリするPDFドキュメントを表すPDFファイルを参照します。 Assemblerサービスに渡されると、ドキュメント内のレベル1のブックマークごとに個別のPDFドキュメントが返されます。

実行時オプションの設定

ジョブの実行中にAssemblerサービスの動作を制御する実行時オプションを設定できます。 例えば、エラーが発生した場合にジョブの処理を続行するようAssemblerサービスに指示するオプションを設定できます。 実行時オプションを設定するには、AssemblerOptionSpecオブジェクトを使用します。

PDFドキュメントのディスアセンブリ

invokeDDX操作を呼び出して、PDFドキュメントをディスアセンブリします。 動的に作成されたDDXドキュメントを渡します。 Assemblerサービスは、コレクションオブジェクト内で分解されたPDFドキュメントを返します。

分解したPDFドキュメントの保存

アセンブリが解除されたPDFドキュメントはすべて、コレクションオブジェクト内で返されます。 コレクションオブジェクトを繰り返し処理し、各PDFドキュメントをPDFファイルとして保存します。

関連トピック

Java APIを使用したDDXドキュメントの動的な作成

WebサービスAPIを使用したDDXドキュメントの動的な作成

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

PDFドキュメントのプログラムによる分解

Java APIを使用したDDXドキュメントの動的な作成

AssemblerサービスAPI(Java)を使用して、DDXドキュメントを動的に作成し、PDFドキュメントをディスアセンブリします。

  1. プロジェクトファイルを含めます。

    Javaプロジェクトのクラスパスに、adobe-assembler-client.jarなどのクライアントJARファイルを含めます。

  2. PDFアセンブラークライアントを作成します。

    • 接続プロパティを含む ServiceClientFactory オブジェクトを作成します。
    • コンストラクターを使用してAssemblerServiceClientオブジェクトを渡し、ServiceClientFactoryオブジェクトを作成します。
  3. DDXドキュメントを作成します。

    • DocumentBuilderFactoryクラス` newInstanceメソッドを呼び出して、Java DocumentBuilderFactoryオブジェクトを作成します。

    • DocumentBuilderFactoryオブジェクトのnewDocumentBuilderメソッドを呼び出して、Java DocumentBuilderオブジェクトを作成します。

    • DocumentBuilderオブジェクトのnewDocumentメソッドを呼び出して、org.w3c.dom.Documentオブジェクトをインスタンス化します。

    • org.w3c.dom.DocumentオブジェクトのcreateElementメソッドを呼び出して、DDXドキュメントのルートエレメントを作成します。 このメソッドは、ルート要素を表すElementオブジェクトを作成します。 要素の名前を表す文字列値をcreateElementメソッドに渡します。 戻り値を Element にキャストします。次に、子要素のsetAttributeメソッドを呼び出して値を設定します。 最後に、ヘッダー要素のappendChildメソッドを呼び出してヘッダー要素に要素を追加し、子要素オブジェクトを引数として渡します。 次のコード行に、このアプリケーションロジックを示します。

       Element root = (Element)document.createElement("DDX");  root.setAttribute("xmlns","https://ns.adobe.com/DDX/1.0/");  document.appendChild(root);

    • DocumentオブジェクトのcreateElementメソッドを呼び出して、PDFsFromBookmarks要素を作成します。 要素の名前を表す文字列値をcreateElementメソッドに渡します。 戻り値を Element にキャストします。setAttributeメソッドを呼び出して、PDFsFromBookmarks要素の値を設定します。 DDX要素のappendChildメソッドを呼び出して、 PDFsFromBookmarks要素をDDX要素に追加します。 PDFsFromBookmarks要素オブジェクトを引数として渡します。 次のコード行に、このアプリケーションロジックを示します。

       Element PDFsFromBookmarks = (Element)document.createElement("PDFsFromBookmarks");  PDFsFromBookmarks.setAttribute("prefix","stmt");  root.appendChild(PDFsFromBookmarks);

    • DocumentオブジェクトのcreateElementメソッドを呼び出して、PDF要素を作成します。 要素名を表すstring値を渡します。 戻り値を Element にキャストします。setAttributeメソッドを呼び出して、PDF要素の値を設定します。 PDFsFromBookmarks要素のappendChildメソッドを呼び出して、PDF要素をPDFsFromBookmarks要素に追加します。 PDF要素オブジェクトを引数として渡します。 次のコード行に、このアプリケーションロジックを示します。

       Element PDF = (Element)document.createElement("PDF");  PDF.setAttribute("source","AssemblerResultPDF.pdf");  PDFsFromBookmarks.appendChild(PDF);

  4. DDXドキュメントを変換します。

    • javax.xml.transform.Transformerオブジェクトの静的なnewInstanceメソッドを呼び出して、javax.xml.transform.Transformerオブジェクトを作成します。
    • TransformerFactoryオブジェクトのnewTransformerメソッドを呼び出して、Transformerオブジェクトを作成します。
    • コンストラクタを使用して ByteArrayOutputStream オブジェクトを作成します。
    • コンストラクタを使用して javax.xml.transform.dom.DOMSource オブジェクトを作成します。DDXドキュメントを表すorg.w3c.dom.Documentオブジェクトを渡します。
    • コンストラクタを使用して javax.xml.transform.dom.DOMSource オブジェクトを渡すことによって、ByteArrayOutputStream オブジェクトを作成します。
    • javax.xml.transform.Transformerオブジェクトのtransformメソッドを呼び出して、Java ByteArrayOutputStreamオブジェクトを設定します。 javax.xml.transform.dom.DOMSourcejavax.xml.transform.stream.StreamResultオブジェクトを渡します。
    • バイト配列を作成し、ByteArrayOutputStreamオブジェクトのサイズをバイト配列に割り当てます。
    • ByteArrayOutputStreamオブジェクトのtoByteArrayメソッドを呼び出して、バイト配列を設定します。
    • コンストラクターを使用してバイト配列を渡し、com.adobe.idp.Documentオブジェクトを作成します。
  5. ディスアセンブリするPDFドキュメントの参照。

    • HashMapコンストラクターを使用して、入力PDFドキュメントの格納に使用するjava.util.Mapオブジェクトを作成します。

    • コンストラクターを使用し、ディスアセンブリするPDFドキュメントの場所を渡すことで、java.io.FileInputStreamオブジェクトを作成します。

    • com.adobe.idp.Documentオブジェクトを作成します。 ディスアセンブリするPDFドキュメントを含むjava.io.FileInputStreamオブジェクトを渡します。

    • putメソッドを呼び出し、次の引数を渡して、java.util.Mapオブジェクトにエントリを追加します。

      • キー名を表すstring値です。 この値は、DDXドキュメントで指定されたPDFソース要素の値と一致する必要があります。 (動的に作成されるDDXドキュメントでは、値はAssemblerResultPDF.pdfです)。
      • ディスアセンブリするPDFドキュメントを含むcom.adobe.idp.Documentオブジェクト。
  6. 実行時オプションを設定します。

    • コンストラクターを使用して、実行時オプションを格納するAssemblerOptionSpecオブジェクトを作成します。
    • AssemblerOptionSpecオブジェクトに属するメソッドを呼び出して、ビジネス要件に合った実行時オプションを設定します。 例えば、エラーが発生したときにジョブの処理を続行するようにAssemblerサービスに指示するには、AssemblerOptionSpecオブジェクトのsetFailOnErrorメソッドを呼び出し、falseを渡します。
  7. PDFドキュメントのディスアセンブリ。

    AssemblerServiceClientオブジェクトのinvokeDDXメソッドを呼び出し、次の値を渡します。

    • 動的に作成されたDDXドキュメントを表すcom.adobe.idp.Documentオブジェクト
    • ディスアセンブリするPDFドキュメントを含むjava.util.Mapオブジェクト
    • デフォルトのフォントやジョブのログレベルを含む、実行時のオプションを指定するcom.adobe.livecycle.assembler.client.AssemblerOptionSpecオブジェクト

    invokeDDXメソッドは、分解されたPDFドキュメントと発生した例外を含むcom.adobe.livecycle.assembler.client.AssemblerResultオブジェクトを返します。

  8. アセンブリ解除したPDFドキュメントを保存します。

    分解されたPDFドキュメントを取得するには、次の操作を実行します。

    • AssemblerResultオブジェクトのgetDocumentsメソッドを呼び出します。 このメソッドはjava.util.Mapオブジェクトを返します。
    • java.util.Mapオブジェクトを繰り返し処理して、結果のcom.adobe.idp.Documentオブジェクトを見つけます。
    • com.adobe.idp.DocumentオブジェクトのcopyToFileメソッドを呼び出して、PDFドキュメントを抽出します。

関連トピック

クイックスタート(SOAPモード):Java APIを使用したDDXドキュメントの動的な作成

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

WebサービスAPIを使用してDDXドキュメントを動的に作成する

Assembler Service API(Webサービス)を使用して、DDXドキュメントを動的に作成し、PDFドキュメントをディスアセンブリします。

  1. プロジェクトファイルを含めます。

    MTOMを使用するMicrosoft .NETプロジェクトを作成します。 サービス参照を設定する際は、次のWSDL定義を使用してください。http://localhost:8080/soap/services/AssemblerService?WSDL&lc_version=9.0.1.

    メモ

    localhostを、AEM FormsをホストするサーバーのIPアドレスに置き換えます。

  2. PDFアセンブラークライアントを作成します。

    • デフォルトのコンストラクターを使用してAssemblerServiceClientオブジェクトを作成します。

    • System.ServiceModel.EndpointAddressコンストラクターを使用してAssemblerServiceClient.Endpoint.Addressオブジェクトを作成します。 AEM FormsサービスにWSDLを指定するstring値を渡します(例:http://localhost:8080/soap/services/AssemblerService?blob=mtom)。 lc_version属性を使用する必要はありません。 この属性は、サービス参照を作成する際に使用されます。

    • AssemblerServiceClient.Endpoint.Bindingフィールドの値を取得してSystem.ServiceModel.BasicHttpBindingオブジェクトを作成します。 戻り値を BasicHttpBinding にキャストします。

    • System.ServiceModel.BasicHttpBindingオブジェクトのMessageEncodingフィールドをWSMessageEncoding.Mtomに設定します。 この値は、MTOMが使用されるようにします。

    • 次のタスクを実行して、基本的なHTTP認証を有効にします。

      • フィールドAssemblerServiceClient.ClientCredentials.UserName.UserNameにAEM formsユーザー名を割り当てます。
      • 対応するパスワード値をフィールドAssemblerServiceClient.ClientCredentials.UserName.Passwordに割り当てます。
      • フィールドBasicHttpBindingSecurity.Transport.ClientCredentialTypeに定数値HttpClientCredentialType.Basicを割り当てます。
      • フィールドBasicHttpBindingSecurity.Security.Modeに定数値BasicHttpSecurityMode.TransportCredentialOnlyを割り当てます。
  3. DDXドキュメントを作成します。

    • コンストラクタを使用して System.Xml.XmlElement オブジェクトを作成します。

    • XmlElementオブジェクトのCreateElementメソッドを呼び出して、DDXドキュメントのルートエレメントを作成します。 このメソッドは、ルート要素を表すElementオブジェクトを作成します。 要素の名前を表す文字列値をCreateElementメソッドに渡します。 SetAttributeメソッドを呼び出して、DDX要素の値を設定します。 最後に、 XmlElementオブジェクトのAppendChildメソッドを呼び出して、DDXドキュメントに要素を追加します。 DDXオブジェクトを引数として渡します。 次のコード行に、このアプリケーションロジックを示します。

       System.Xml.XmlElement root = ddx.CreateElement("DDX");  root.SetAttribute("xmlns", "https://ns.adobe.com/DDX/1.0/");  ddx.AppendChild(root);

    • XmlElementオブジェクトのCreateElementメソッドを呼び出して、DDXドキュメントのPDFsFromBookmarks要素を作成します。 要素の名前を表す文字列値をCreateElementメソッドに渡します。 次に、 SetAttributeメソッドを呼び出して、要素の値を設定します。 DDX要素のAppendChildメソッドを呼び出して、PDFsFromBookmarks要素をルート要素に追加します。 PDFsFromBookmarks要素オブジェクトを引数として渡します。 次のコード行に、このアプリケーションロジックを示します。

       XmlElement PDFsFromBookmarks = ddx.CreateElement("PDFsFromBookmarks");  PDFsFromBookmarks.SetAttribute("prefix", "stmt");  root.AppendChild(PDFsFromBookmarks);

    • XmlElementオブジェクトのCreateElementメソッドを呼び出して、DDXドキュメントのPDF要素を作成します。 要素の名前を表す文字列値をCreateElementメソッドに渡します。 次に、子要素のSetAttributeメソッドを呼び出して値を設定します。 PDFsFromBookmarks要素のAppendChildメソッドを呼び出して、PDF要素をPDFsFromBookmarks要素に追加します。 PDF要素オブジェクトを引数として渡します。 次のコード行に、このアプリケーションロジックを示します。

       XmlElement PDF = ddx.CreateElement("PDF");  PDF.SetAttribute("source", "AssemblerResultPDF.pdf");  PDFsFromBookmarks.AppendChild(PDF);

  4. DDXドキュメントを変換します。

    • コンストラクタを使用して System.IO.MemoryStream オブジェクトを作成します。

    • DDXドキュメントを表すXmlElementオブジェクトを使用して、DDXドキュメントでMemoryStreamオブジェクトを設定します。 XmlElementオブジェクトのSaveメソッドを呼び出して、MemoryStreamオブジェクトを渡します。

    • バイト配列を作成し、MemoryStreamオブジェクト内のデータを設定します。 次のコードは、このアプリケーションロジックを示しています。

       int bufLen = Convert.ToInt32(stream.Length);  byte[] byteArray = new byte[bufLen];  stream.Position = 0;  int count = stream.Read(byteArray, 0, bufLen);

    • BLOBオブジェクトを作成します。 BLOBオブジェクトのMTOMフィールドにバイト配列を割り当てます。

  5. ディスアセンブリするPDFドキュメントの参照。

    • コンストラクタを使用して BLOB オブジェクトを作成します。BLOBオブジェクトは、入力PDFドキュメントの保存に使用されます。 このBLOBオブジェクトは、引数としてinvokeOneDocumentに渡されます。
    • コンストラクターを呼び出して、System.IO.FileStreamオブジェクトを作成します。 入力PDFドキュメントのファイルの場所と、ファイルを開くモードを表すstring値を渡します。
    • System.IO.FileStreamオブジェクトの内容を格納するバイト配列を作成します。 System.IO.FileStreamオブジェクトのLengthプロパティを取得することで、バイト配列のサイズを判断できます。
    • System.IO.FileStreamオブジェクトのReadメソッドを呼び出し、読み取るバイト配列、開始位置、ストリーム長を渡すことによって、バイト配列にストリームデータを入力します。
    • BLOBオブジェクトのMTOMプロパティにバイト配列の内容を割り当てて、オブジェクトを設定します。
  6. 実行時オプションを設定します。

    • コンストラクターを使用して、実行時オプションを格納するAssemblerOptionSpecオブジェクトを作成します。
    • AssemblerOptionSpecオブジェクトに属するデータメンバーに値を割り当てて、ビジネス要件に合った実行時オプションを設定します。 例えば、エラーが発生したときにジョブの処理を続行するようにAssemblerサービスに指示するには、falseAssemblerOptionSpecオブジェクトのfailOnErrorデータメンバーに割り当てます。
  7. PDFドキュメントのディスアセンブリ。

    AssemblerServiceClientオブジェクトのinvokeDDXメソッドを呼び出し、次の値を渡します。

    • 動的に作成されたDDXドキュメントを表すBLOBオブジェクト
    • 入力PDFドキュメントが含まれるmapItem配列
    • 実行時オプションを指定するAssemblerOptionSpecオブジェクト

    invokeDDXメソッドは、ジョブの結果と発生した例外を含むAssemblerResultオブジェクトを返します。

  8. アセンブリ解除したPDFドキュメントを保存します。

    新しく作成したPDFドキュメントを取得するには、次の操作を実行します。

    • AssemblerResultオブジェクトのdocumentsフィールドにアクセスします。これは、分解されたPDFドキュメントを含むMapオブジェクトです。
    • Mapオブジェクトを繰り返し処理して、各結果ドキュメントを取得します。 次に、配列メンバのvalueBLOBにキャストします。
    • BLOBオブジェクトのMTOMプロパティにアクセスして、PDFドキュメントを表すバイナリデータを抽出します。 PDFファイルに書き出すことができるバイトの配列を返します。

関連トピック

MTOMを使用したAEM Formsの呼び出し

SwaRefを使用したAEM Formsの呼び出し

このページ