Java API を使用した DDX ドキュメントの動的な作成
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 ドキュメントの動的な作成
Assembler サービス API(web サービス)を使用して、DDX ドキュメントを動的に作成し、PDF ドキュメントをディスアセンブリします。
-
プロジェクトファイルを含めます。
MTOM を使用する Microsoft .NET プロジェクトを作成します。サービスリファレンスを設定する際は、WSDL の定義
http://localhost:8080/soap/services/AssemblerService?WSDL&lc_version=9.0.1
を必ず使用してください。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 ファイルに書き出すことができるバイト配列が返されます。