DDX ドキュメントの動的な作成 dynamically-creating-ddx-documents
このドキュメントのサンプルと例は、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 ドキュメントのディスアセンブリに関する知識を身に付けることをお勧めします。
手順の概要 summary-of-steps
動的に作成された DDX ドキュメントを使用して PDF ドキュメントをディスアセンブリするには、次のタスクを実行します。
- プロジェクトファイルを含めます。
- PDF Assembler クライアントを作成します。
- DDX ドキュメントを作成します。
- DDX ドキュメントを変換します。
- 実行時オプションを設定します。
- PDF ドキュメントを分割します。
- 分割した 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 ドキュメントの動的な作成
Java API を使用した DDX ドキュメントの動的な作成 dynamically-create-a-ddx-document-using-the-java-api
Assembler サービス API(Java)を使用して、DDX ドキュメントを動的に作成し、PDF ドキュメントをディスアセンブリします。
-
プロジェクトファイルを含めます。
adobe-livecycle-client.jar などのクライアント JAR ファイルを Java プロジェクトのクラスパスに含めます。
-
PDF Assembler クライアントを作成します。
- 接続プロパティを含む
ServiceClientFactoryオブジェクトを作成します。 - コンストラクターを使用して
ServiceClientFactoryオブジェクトを渡すことによって、AssemblerServiceClientオブジェクトを作成します。
- 接続プロパティを含む
-
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メソッド呼び出して、子要素の値を設定します。最後に、Header 要素を要素に追加するには、Header 要素の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メソッドを呼び出して、DDX要素にPDFsFromBookmarks要素を追加します。PDFsFromBookmarks要素オブジェクトを引数として渡します。次のコード行は、このアプリケーションロジックを示しています。Element PDFsFromBookmarks = (Element)document.createElement("PDFsFromBookmarks"); PDFsFromBookmarks.setAttribute("prefix","stmt"); root.appendChild(PDFsFromBookmarks); -
DocumentオブジェクトのcreateElementメソッドを呼び出して、PDF要素を作成します。要素名を表す文字列の値を渡します。戻り値をElementにキャストします。setAttributeメソッドを呼び出して、PDF要素の値を設定 します。PDFsFromBookmarks要素のappendChildメソッドを呼び出して、PDF要素をPDFsFromBookmarks要素に追加します。PDF要素オブジェクトを引数として渡します。次のコード行に、このアプリケーションロジックを示します。Element PDF = (Element)document.createElement("PDF"); PDF.setAttribute("source","AssemblerResultPDF.pdf"); PDFsFromBookmarks.appendChild(PDF);
-
-
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メソッドを呼び出して、JavaByteArrayOutputStreamオブジェクトを入力します。javax.xml.transform.dom.DOMSourceオブジェクトとjavax.xml.transform.stream.StreamResultオブジェクトを渡します。- バイト配列を作成して、
ByteArrayOutputStreamオブジェクトのサイズをバイト配列に割り当てます。 ByteArrayOutputStreamオブジェクトのtoByteArrayメソッドを呼び出して、バイト配列に入力します。- コンストラクターを使用して、バイト配列を渡すことによって、
com.adobe.idp.Documentオブジェクトを作成します。
-
分割する 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オブジェクト。
- キー名を表す文字列値。この値は、DDX ドキュメントで指定された PDF ソース要素の値と一致する必要があります(動的に作成される DDX ドキュメントでは、値は
-
-
実行時オプションを設定します。
- コンストラクタを使用して、実行時オプションを格納する
AssemblerOptionSpecオブジェクトを作成します。 AssemblerOptionSpecオブジェクトに属するメソッドを呼び出して、ビジネス要件を満たすよう実行時オプションを設定します。例えば、エラーが発生したときにジョブの処理を続行するように Assembler サービスに指示するには、AssemblerOptionSpecオブジェクトのsetFailOnErrorメソッドを呼び出してfalseを渡します。
- コンストラクタを使用して、実行時オプションを格納する
-
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オブジェクトを返します。 - 動的に作成された DDX ドキュメントを表す
-
分割した PDF ドキュメントを保存します。
分割された PDF ドキュメントを取得するには、以下のアクションを実行します。
AssemblerResultオブジェクトのgetDocumentsメソッドを呼び出します。このメソッドは、java.util.Mapオブジェクトを返します。- 結果の
com.adobe.idp.Documentオブジェクトが見つかるまで、java.util.Mapオブジェクトを反復処理します。 com.adobe.idp.DocumentオブジェクトのcopyToFileメソッドを呼び出して、PDF ドキュメントを抽出します。
関連トピック
Web サービス API を使用した DDX ドキュメントの動的な作成 dynamically-create-a-ddx-document-using-the-web-service-api
Assembler サービス API(web サービス)を使用して、DDX ドキュメントを動的に作成し、PDF ドキュメントをディスアセンブリします。
-
プロジェクトファイルを含めます。
MTOM を使用する Microsoft .NET プロジェクトを作成します。サービスリファレンスを設定する際は、WSDL の定義
http://localhost:8080/soap/services/AssemblerService?WSDL&lc_version=9.0.1を必ず使用してください。note note NOTE localhostを、AEM Forms をホストするサーバーの IP アドレスに置き換えます。 -
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.BasicをBasicHttpBindingSecurity.Transport.ClientCredentialTypeフィールドに割り当てます。 - 定数値
BasicHttpSecurityMode.TransportCredentialOnlyをフィールドBasicHttpBindingSecurity.Security.Modeに割り当てます。
-
-
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);
-
-
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フィールドに割り当てます。
-
-
分割する PDF ドキュメントを参照します。
- コンストラクターを使用して
BLOBオブジェクトを作成します。BLOBオブジェクトは、入力 PDF ドキュメントを格納するために使用します。このBLOBオブジェクトは引数としてinvokeOneDocumentに渡されます。 - コンストラクターを呼び出して、
System.IO.FileStreamオブジェクトを作成します。入力 PDF ドキュメントのファイルの場所と、ファイルを開くモードを表す文字列値を渡します。 System.IO.FileStreamオブジェクトのコンテンツを格納するバイト配列を作成します。バイト配列のサイズは、System.IO.FileStreamオブジェクトのLengthプロパティを取得することで決定できます。System.IO.FileStreamオブジェクトのReadメソッドを呼び出し、バイト配列、開始位置、および読み取るストリーム長を渡して、バイト配列にストリームデータを入力します。MTOMプロパティを割り当てて、BLOBオブジェクトにバイト配列の内容を入力します。
- コンストラクターを使用して
-
実行時オプションを設定します。
- ランタイムオプションを格納する
AssemblerOptionSpecオブジェクトをコンストラクタで作成します。 AssemblerOptionSpecオブジェクトに属するデータメンバーに値を割り当てることで、ビジネス要件に応じたランタイムオプションを設定します。例えば、エラーが発生した場合にジョブの処理を続行するように Assembler サービスに指示するには、falseをAssemblerOptionSpecオブジェクトのfailOnErrorデータメンバーに割り当てます。
- ランタイムオプションを格納する
-
PDF ドキュメントを分割します。
AssemblerServiceClientオブジェクトのinvokeDDXメソッドを呼び出して、以下の値を渡します。- 動的に作成された DDX ドキュメントを表す
BLOBオブジェクト - 入力 PDF ドキュメントを含む
mapItem配列 - 実行時オプションを指定する
AssemblerOptionSpecオブジェクト
invokeDDXメソッドは、ジョブの結果と発生した例外を含むAssemblerResultオブジェクトを返します。 - 動的に作成された DDX ドキュメントを表す
-
分割した PDF ドキュメントを保存します。
新しく作成した PDF ドキュメントを取得するには、次の操作を実行します。
AssemblerResultオブジェクトのdocumentsフィールドにアクセスします。これは、分割された PDF ドキュメントを含むMapオブジェクトです。Mapオブジェクトを反復処理して、結果として得られる各ドキュメントを取得します。次に、その配列メンバーのvalueをBLOBにキャストします。BLOBオブジェクトのMTOMプロパティにアクセスして、PDF ドキュメントを表すバイナリデータを抽出します。これにより、PDF ファイルに書き出すことができるバイト配列が返されます。
関連トピック