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

最終更新日: 2023-11-07
  • 作成対象:
  • Developer

このドキュメントのサンプルと例は、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 を作成するために使用されたデータタイプから XML を BLOB インスタンスに変換します(例: XmlDocument

このディスカッションでは、次の 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 Assembler クライアントを作成します。
  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 操作をプログラムで実行する前に、Assembler サービスクライアントを作成します。

DDX ドキュメントの作成

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

DDX ドキュメントの変換

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

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

PDF ドキュメントを分割するには、分割する PDF ドキュメントを表す PDF ファイルを参照します。Assembler サービスに渡されると、その PDF ドキュメント内のレベル 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 Assembler クライアントを作成します。

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

    • Java の作成 DocumentBuilderFactory オブジェクトを DocumentBuilderFactory クラス' newInstance メソッド。

    • Java の作成 DocumentBuilder オブジェクトを DocumentBuilderFactory オブジェクトの newDocumentBuilder メソッド。

    • を呼び出します。 DocumentBuilder オブジェクトの newDocument メソッドを使用して org.w3c.dom.Document オブジェクト。

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

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

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

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

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

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

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

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

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

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

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

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

      • キー名を表す文字列値。この値は、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 オブジェクトを返します。
    • 結果の com.adobe.idp.Document オブジェクトが見つかるまで、java.util.Map オブジェクトを反復処理します。
    • を呼び出す com.adobe.idp.Document オブジェクトの copyToFile メソッドを使用して、PDFドキュメントを抽出します。

関連トピック

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

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

接続プロパティの設定

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

Assembler サービス 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 Assembler クライアントを作成します。

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

    • System.ServiceModel.EndpointAddress コンストラクターを使用して、AssemblerServiceClient.Endpoint.Address オブジェクトを作成します。WSDL を指定する文字列値を AEM Forms サービスに渡します(例: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 フィールドに割り当てます。
      • 定数値 HttpClientCredentialType.BasicBasicHttpBindingSecurity.Transport.ClientCredentialType フィールドに割り当てます。
      • 定数値 BasicHttpSecurityMode.TransportCredentialOnly をフィールド BasicHttpBindingSecurity.Security.Mode に割り当てます。
  3. DDX ドキュメントを作成します。

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

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

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

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

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

    • DDX ドキュメントの作成 PDF 要素を指定するには、 XmlElement オブジェクトの CreateElement メソッド。 要素の名前を表す文字列値を CreateElement メソッドに渡します。次に、 SetAttribute メソッドを呼び出して、子要素の値を設定します。を追加します。 PDF 要素を PDFsFromBookmarks 要素を指定するには、 PDFsFromBookmarks 要素の AppendChild メソッド。 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 ドキュメントのファイルの場所と、ファイルを開くモードを表す文字列値を渡します。
    • System.IO.FileStream オブジェクトのコンテンツを格納するバイト配列を作成します。バイト配列のサイズは、 System.IO.FileStream オブジェクトの Length プロパティ。
    • を呼び出して、バイト配列にストリームデータを入力します。 System.IO.FileStream オブジェクトの Read メソッドを使用し、読み込むバイト配列、開始位置、ストリームの長さを渡す。
    • MTOM プロパティを割り当てて、BLOB オブジェクトにバイト配列の内容を入力します。
  6. 実行時オプションを設定します。

    • ランタイムオプションを格納する AssemblerOptionSpec オブジェクトをコンストラクタで作成します。
    • AssemblerOptionSpec オブジェクトに属するデータメンバーに値を割り当てることで、ビジネス要件に応じたランタイムオプションを設定します。例えば、エラーが発生した場合にジョブの処理を続行するように Assembler サービスに指示するには、 false から AssemblerOptionSpec オブジェクトの failOnError データメンバー。
  7. PDF ドキュメントを分割します。

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

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

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

  8. 分割した PDF ドキュメントを保存します。

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

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

関連トピック

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

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

このページ