複数のXDPフラグメントのアセンブリ

複数のXDPフラグメントを1つのXDPドキュメントにアセンブリできます。 例えば、各XDPファイルに、ヘルスフォームの作成に使用される1つ以上のサブフォームが含まれているXDPフラグメントについて考えてみましょう。 次の図に、アウトライン表示を示します(tuc018_template_flowed.xdpファイルを表します)。このファイルは、複数のXDPフラグメントのアセンブリ​クイック開始で使用されます。

am_am_forma

次の図に、患者のセクション(複数のXDPフラグメントのアセンブリ​クイック開始で使用されるtuc018_contact.xdpファイルを表します)を示します。

am_am_formb

次の図に、患者の正常性のセクションを示します(複数のXDPフラグメントのアセンブリ​クイック開始で使用されるtuc018_patient.xdpファイルを表します)。

am_am_formc

このフラグメントには、subPatientPhysical​および​subPatientHealth​という2つのサブフォームが含まれています。 これらのサブフォームは両方とも、Assemblerサービスに渡されるDDXドキュメントで参照されます。 次の図に示すように、Assemblerサービスを使用すると、これらすべてのXDPフラグメントを1つのXDPドキュメントに結合できます。

am_am_formd

次のDDXドキュメントは、複数のXDPフラグメントをXDPドキュメントにアセンブリします。

 <?xml version="1.0" encoding="UTF-8"?> 
 <DDX xmlns="https://ns.adobe.com/DDX/1.0/"> 
         <XDP result="tuc018result.xdp"> 
            <XDP source="tuc018_template_flowed.xdp"> 
             <XDPContent insertionPoint="ddx_fragment" source="tuc018_contact.xdp" fragment="subPatientContact" required="false"/> 
               <XDPContent insertionPoint="ddx_fragment" source="tuc018_patient.xdp" fragment="subPatientPhysical" required="false"/> 
               <XDPContent insertionPoint="ddx_fragment" source="tuc018_patient.xdp" fragment="subPatientHealth" required="false"/> 
            </XDP> 
         </XDP>         
 </DDX>

DDXドキュメントには、結果の名前を指定するXDP resultタグが含まれています。 この場合、値はtuc018result.xdpです。 この値は、Assemblerサービスが結果を返した後にXDPドキュメントを取得するために使用されるアプリケーションロジックで参照されます。 例えば、アセンブリ済みのXDPドキュメントを取得するために使用される次のJavaアプリケーションロジックについて考えてみます(値は太字で示しています)。

 //Iterate through the map object to retrieve the result XDP document 
 for (Iterator i = allDocs.entrySet().iterator(); i.hasNext();) { 
     // Retrieve the Map object’s value 
     Map.Entry e = (Map.Entry)i.next(); 
                  
     //Get the key name as specified in the  
     //DDX document  
     String keyName = (String)e.getKey(); 
     if (keyName.equalsIgnoreCase("tuc018result.xdp")) 
                 {  
         Object o = e.getValue(); 
         outDoc = (Document)o; 
  
         //Save the result PDF file 
         File myOutFile = new File("C:\\AssemblerResultXDP.xdp");  
         outDoc.copyToFile(myOutFile); 
     } 
 }

XDP sourceタグは、XDPフラグメントを追加するコンテナとして、またはXDPフラグメントを追加する多数のドキュメントの1つとして使用できる完全なXDPドキュメントを表すXDPファイルを指定します。 この場合、XDPドキュメントはコンテナとしてのみ使用されます(最初の図は「複数のXDPフラグメントのアセンブリ」に示しています)。 つまり、他のXDPファイルはXDPコンテナ内に配置されます。

各サブフォームに対して、XDPContent要素を追加できます(この要素はオプションです)。 上の例では、3つのサブフォームがあることに注意してください。subPatientContactsubPatientPhysicalsubPatientHealthsubPatientPhysicalサブフォームとsubPatientHealthサブフォームはどちらも同じXDPファイルtuc018_patient.xdpに存在します。 フラグメント要素は、Designerで定義されたサブフォームの名前を指定します。

メモ

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

メモ

DDXドキュメントについて詳しくは、「Assembler Service and DDX Reference」を参照してください。

手順の概要

複数のXDPフラグメントをアセンブリするには、次のタスクを実行します。

  1. プロジェクトファイルを含めます。
  2. PDFアセンブラクライアントを作成します。
  3. 既存のDDXドキュメントの参照。
  4. XDPドキュメントを参照します。
  5. 実行時オプションを設定します。
  6. 複数のXDPドキュメントをアセンブリします。
  7. アセンブリ済みのXDPドキュメントを取得します。

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

必要なファイルを開発プロジェクトに含めます。 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ドキュメントの参照

複数のXDPドキュメントをアセンブリするには、DDXドキュメントを参照する必要があります。 このDDXドキュメントには、XDP resultXDP sourceおよびXDPContentの各要素を含める必要があります。

XDPドキュメントの参照

複数のXDPドキュメントをアセンブリするには、結果のXDPドキュメントのアセンブリに使用されるすべてのXDPファイルを参照します。 source属性で参照されるXDPドキュメントに含まれるサブフォームの名前がfragment属性で指定されていることを確認します。 サブフォームはDesignerで定義されます。 例えば、次のXMLを考えてみましょう。

 <XDPContent insertionPoint="ddx_fragment" source="tuc018_contact.xdp" fragment="subPatientContact" required="false"/>

subPatientContact​という名前のサブフォームは、tuc018_contact.xdp​という名前のXDPファイル内に存在する必要があります。

実行時オプションの設定

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

複数のXDPドキュメントのアセンブリ

複数のXDPファイルをアセンブリするには、invokeDDX操作を呼び出します。 Assemblerサービスは、コレクションオブジェクト内でアセンブルされたXDPドキュメントを返します。

アセンブリ済みXDPドキュメントの取得

アセンブリされたXDPドキュメントがコレクションオブジェクト内で返されます。 コレクションオブジェクトを繰り返し処理し、XDPドキュメントをXDPファイルとして保存します。 XDPドキュメントは、Outputなどの別のAEM Formsサービスに渡すこともできます。

関連トピック

Java APIを使用した複数のXDPフラグメントのアセンブリ

WebサービスAPIを使用した複数のXDPフラグメントのアセンブリ

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

接続プロパティの設定

プログラムによるPDFドキュメントのアセンブリ

フラグメントを使用したPDFドキュメントの作成

Java APIを使用した複数のXDPフラグメントのアセンブリ

Assembler Service API(Java)を使用して、複数のXDPフラグメントをアセンブリします。

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

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

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

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

    • コンストラクターを使用し、DDXファイルの場所を指定する文字列値を渡して、DDXドキュメントを表すjava.io.FileInputStreamオブジェクトを作成します。
    • コンストラクタを使用して com.adobe.idp.Document オブジェクトを渡すことによって、java.io.FileInputStream オブジェクトを作成します。
  4. XDPドキュメントを参照します。

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

    • com.adobe.idp.Documentオブジェクトを作成し、入力XDPファイルを含むjava.io.FileInputStreamオブジェクトを渡します(このタスクを各XDPファイルに対して繰り返します)。

    • <a0追加/>オブジェクトへのエントリ。そのjava.util.Mapメソッドを呼び出し、次の引数を渡すことによって作成します。put

      • キー名を表すstring値です。 この値は、DDXドキュメントで指定されたsource要素の値と一致する必要があります(XDPファイルごとにこのタスクを繰り返します)。
      • source要素に対応するXDPドキュメントを含むcom.adobe.idp.Documentオブジェクト(XDPファイルごとにこのタスクを繰り返します)。
  5. 実行時オプションを設定します。

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

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

    • 使用するDDXドキュメントを表すcom.adobe.idp.Documentオブジェクト
    • 入力XDPファイルが含まれるjava.util.Mapオブジェクト
    • デフォルトフォントとジョブログレベルを含む、実行時のオプションを指定するcom.adobe.livecycle.assembler.client.AssemblerOptionSpecオブジェクト

    invokeDDXメソッドは、アセンブリされたXDPドキュメントを含むcom.adobe.livecycle.assembler.client.AssemblerResultオブジェクトを返します。

  7. アセンブリ済みのXDPドキュメントを取得します。

    アセンブリ済みのXDPドキュメントを取得するには、次の操作を実行します。

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

関連トピック

複数のXDPフラグメントのアセンブリ

クイック開始(SOAPモード):Java APIを使用した複数のXDPフラグメントのアセンブリ

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

接続プロパティの設定

WebサービスAPIを使用して複数のXDPフラグメントをアセンブリする

Assembler Service API(Webサービス)を使用して、複数のXDPフラグメントをアセンブリします。

  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オブジェクトを作成します。 http://localhost:8080/soap/services/AssemblerService?blob=mtomなど、WSDLをAEM Formsサービスに渡す文字列値を渡します。 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ドキュメントの参照。

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

    • 各入力XDPファイルに対して、コンストラクターを使用してBLOBオブジェクトを作成します。 BLOBオブジェクトは、入力ファイルの保存に使用されます。
    • コンストラクターを呼び出し、入力ファイルのファイルの場所とファイルを開くモードを表すstring値を渡して、System.IO.FileStreamオブジェクトを作成します。
    • System.IO.FileStreamオブジェクトの内容を格納するバイト配列を作成します。 System.IO.FileStreamオブジェクトのLengthプロパティを取得して、バイト配列のサイズを決定できます。
    • System.IO.FileStreamオブジェクトのReadメソッドを呼び出して、バイト配列にストリームデータを入力します。 読み取るバイト配列、開始位置、ストリーム長を渡します。
    • BLOBオブジェクトに、MTOMフィールドにバイト配列の内容を割り当てて入力します。
    • MyMapOf_xsd_string_To_xsd_anyTypeオブジェクトを作成します。 このコレクションオブジェクトは、アセンブリされたXDPドキュメントの作成に必要な入力ファイルの格納に使用します。
    • 入力ファイルごとに、MyMapOf_xsd_string_To_xsd_anyType_Itemオブジェクトを作成します。
    • キー名を表すstring値をMyMapOf_xsd_string_To_xsd_anyType_Itemオブジェクトのkeyフィールドに割り当てます。 この値は、DDXドキュメントで指定された要素の値と一致する必要があります。 (このタスクは、入力XDPファイルごとに実行します)。
    • 入力ファイルを保存するBLOBオブジェクトをMyMapOf_xsd_string_To_xsd_anyType_Itemオブジェクトのvalueフィールドに割り当てます。 (このタスクは、入力XDPファイルごとに実行します)。
    • 追加MyMapOf_xsd_string_To_xsd_anyTypeオブジェクトのMyMapOf_xsd_string_To_xsd_anyType_Itemオブジェクト。 MyMapOf_xsd_string_To_xsd_anyTypeオブジェクトのAddメソッドを呼び出し、MyMapOf_xsd_string_To_xsd_anyTypeオブジェクトを渡します。 (このタスクは、入力XDPドキュメントごとに実行します)。
  5. 実行時オプションを設定します。

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

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

    • DDXドキュメントを表すBLOBオブジェクト
    • 必要なファイルを含むMyMapOf_xsd_string_To_xsd_anyTypeオブジェクト
    • 実行時オプションを指定するAssemblerOptionSpecオブジェクト

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

  7. アセンブリ済みのXDPドキュメントを取得します。

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

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

関連トピック

複数のXDPフラグメントのアセンブリ

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

このページ