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)のXMLをBLOBインスタンスに変換します。

この説明では、次の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 Service and DDX Reference」を参照してください。

手順の概要

動的に作成された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ドキュメントの動的な作成

DDXドキュメントを動的に作成し、Assembler Service API(Java)を使用して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 にキャストします。PDFsFromBookmarks要素の値を設定するには、setAttributeメソッドを呼び出します。 DDX要素のappendChildメソッドを呼び出して、PDFsFromBookmarks要素をDDX要素に追加します。 PDFsFromBookmarks要素オブジェクトを引数として渡します。 次のコード行に、このアプリケーションロジックを示します。

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

    • DocumentオブジェクトのcreateElementメソッドを呼び出して、PDF要素を作成します。 要素名を表すstring値を渡します。 戻り値を Element にキャストします。PDF要素の値を設定するには、setAttributeメソッドを呼び出します。 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.DOMSourceおよびjavax.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オブジェクトを渡します。

    • <a0追加/>オブジェクトへのエントリ。その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ドキュメントの動的な作成

DDXドキュメントを動的に作成し、Assembler Service API(Webサービス)を使用して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オブジェクトを作成します。 WSDLをAEM Formsサービスに指定する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認証を有効にします。

      • AEM formsユーザー名をフィールドAssemblerServiceClient.ClientCredentials.UserName.UserNameに割り当てます。
      • 対応するパスワード値をフィールドAssemblerServiceClient.ClientCredentials.UserName.Passwordに割り当てます。
      • 定数値HttpClientCredentialType.BasicをフィールドBasicHttpBindingSecurity.Transport.ClientCredentialTypeに割り当てます。
      • 定数値BasicHttpSecurityMode.TransportCredentialOnlyをフィールドBasicHttpBindingSecurity.Security.Modeに割り当てます。
  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オブジェクトを使用して、MemoryStreamオブジェクトにDDXドキュメントを入力します。 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の呼び出し

このページ

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