Assembler Service APIを使用すると、複数のPDFドキュメントを1つのPDFドキュメントにアセンブリできます。 次の図は、3つのPDFドキュメントを1つのPDFドキュメントに結合する様子を示しています。
2つ以上のPDFドキュメントを1つのPDFドキュメントにアセンブリするには、DDXドキュメントが必要です。 DDXドキュメントは、Assemblerサービスが生成するPDFドキュメントを記述します。 つまり、DDXドキュメントは、実行するアクションをAssemblerサービスに指示します。
この説明の目的で、次のDDXドキュメントが使用されているとします。
<?xml version="1.0" encoding="UTF-8"?>
<DDX xmlns="https://ns.adobe.com/DDX/1.0/">
<PDF result="out.pdf">
<PDF source="map.pdf" />
<PDF source="directions.pdf" />
</PDF>
</DDX>
このDDXドキュメントは、map.pdfおよびdirections.pdfという2つのPDFドキュメントを1つのPDFドキュメントにマージします。
PDFドキュメントをディスアセンブリするDDXドキュメントを確認するには、PDFドキュメントのプログラムによるディスアセンブリを参照してください。
Assemblerサービスについて詳しくは、『AEM Formsのサービスリファレンス』を参照してください。
DDXドキュメントについて詳しくは、「Assembler Service and DDX Reference」を参照してください。
大きなドキュメントのアセンブリ中にヘッダーとフッターを追加すると、OutOfMemory
エラーが発生し、ファイルがアセンブルされない場合があります。 この問題が発生する可能性を低くするには、次の例に示すように、DDXドキュメントにDDXProcessorSetting
要素を追加します。
<DDXProcessorSetting name="checkpoint" value="2000" />
この要素は、DDX
要素の子として、またはPDF result
要素の子として追加できます。 この設定のデフォルト値は0(ゼロ)で、チェックポイントがオフになり、DDXはDDXProcessorSetting
要素が存在しないかのように動作します。 OutOfMemory
エラーが発生した場合は、値を整数(通常は500 ~ 5000)に設定する必要があります。 チェックポイントの値を小さくすると、チェックポイントの頻度が高くなります。
複数のPDFドキュメントから単一のPDFドキュメントをアセンブリするには、次のタスクを実行します。
プロジェクトファイルを含める
必要なファイルを開発プロジェクトに含めます。 Javaを使用してクライアントアプリケーションを作成する場合は、必要なJARファイルを含めます。 Webサービスを使用している場合は、プロキシファイルを必ず含めてください。
次のJARファイルをプロジェクトのクラスパスに追加する必要があります。
aem formsがJBoss以外のサポート対象のJ2EEアプリケーションサーバーにデプロイされている場合は、adobe-utilities.jarファイルとjbossall-client.jarファイルを、AEM FormsがデプロイされているJ2EEアプリケーションサーバーに固有のJARファイルに置き換える必要があります。
PDFアセンブラクライアントの作成
プログラムによってAssembler操作を実行する前に、Assemblerクライアントを作成する必要があります。
既存のDDXドキュメントの参照
PDFドキュメントをアセンブリするには、DDXドキュメントを参照する必要があります。 例えば、この節で紹介したDDXドキュメントについて考えてみましょう。 このDDXドキュメントは、2つのPDFドキュメントを1つのPDFドキュメントに結合するようAssemblerサービスに指示します。
参照入力PDFドキュメント
Assemblerサービスに渡す入力PDFドキュメントを参照します。 例えば、MapとDirectionsという名前の2つの入力PDFドキュメントーを渡す場合は、対応するPDFファイルを渡す必要があります。
map.pdfファイルとdirections.pdfファイルは、両方ともコレクションオブジェクトに配置する必要があります。 キーの名前は、DDXドキュメントのPDF source属性の値と一致する必要があります。 DDXドキュメントのkey属性とsource属性が一致した場合、PDFファイルの名前は関係ありません。
*AssemblerResult*
操作を呼び出すと、コレクションオブジェクトを含む<a0/>オブジェクトが返されます。 *invokeDDX*
この操作は、2つ以上の入力PDFドキュメントをAssemblerサービスに渡す場合に使用します。 ただし、Assemblerサービスに1つの入力PDFのみを渡し、1つの戻りドキュメントのみが必要な場合は、*invokeOneDocument*
操作を呼び出します。 この操作を呼び出すと、1つのドキュメントが返されます。 この操作の使用について詳しくは、暗号化されたPDFドキュメントのアセンブリを参照してください。
実行時オプションの設定
ジョブの実行中にAssemblerサービスの動作を制御する実行時オプションを設定できます。 例えば、エラーが発生した場合にジョブの処理を続行するようAssemblerサービスに指示するオプションを設定できます。 設定できる実行時オプションについて詳しくは、AEM FormsAPIリファレンスのAssemblerOptionSpec
クラス参照を参照してください。
入力PDFドキュメントのアセンブリ
サービスクライアントを作成し、DDXファイルを参照し、入力PDFドキュメントを格納するコレクションオブジェクトを作成し、実行時オプションを設定した後で、DDX操作を呼び出すことができます。 この節で指定するDDXドキュメントを使用する場合、map.pdfファイルとdirection.pdfファイルが1つのPDFドキュメントにマージされます。
結果の抽出
Assemblerサービスは、java.util.Map
オブジェクトを返します。このオブジェクトはAssemblerResult
オブジェクトから取得でき、操作結果を含みます。 返されるjava.util.Map
オブジェクトには、結果のドキュメントと例外が含まれます。
次の表に、返されるjava.util.Map
オブジェクト内にあるキー値とオブジェクトの種類の一部を示します。
キー値 |
オブジェクトタイプ |
説明 |
---|---|---|
|
|
DDX結果ドキュメントに指定された結果要素を含みます |
|
|
ドキュメントに対する例外が含まれます |
|
|
ジョブログが含まれます |
関連トピック
Assembler Service API(Java)を使用してPDFドキュメントをアセンブリします。
プロジェクトファイルを含めます。
Javaプロジェクトのクラスパスに、adobe-assembler-client.jarなどのクライアントJARファイルを含めます。
PDFアセンブラクライアントを作成します。
ServiceClientFactory
オブジェクトを作成します。AssemblerServiceClient
オブジェクトを渡して、ServiceClientFactory
オブジェクトを作成します。既存のDDXドキュメントの参照。
java.io.FileInputStream
オブジェクトを作成します。com.adobe.idp.Document
オブジェクトを渡すことによって、java.io.FileInputStream
オブジェクトを作成します。入力PDFドキュメントを参照します。
HashMap
コンストラクターを使用して、入力PDFドキュメントの格納に使用するjava.util.Map
オブジェクトを作成します。
各入力PDFドキュメントに対して、コンストラクターを使用し、入力PDFドキュメントーの場所を渡して、java.io.FileInputStream
オブジェクトを作成します。
入力PDFドキュメントごとに、com.adobe.idp.Document
オブジェクトを作成し、PDFドキュメントを含むjava.io.FileInputStream
オブジェクトを渡します。
各入力ドキュメントーに対して、put
メソッドを呼び出し、次の引数を渡して、java.util.Map
オブジェクトにエントリを追加します。
com.adobe.idp.Document
オブジェクト(または複数のドキュメントを指定するjava.util.List
オブジェクト)。実行時オプションを設定します。
AssemblerOptionSpec
オブジェクトを作成します。AssemblerOptionSpec
オブジェクトに属するメソッドを呼び出して、ビジネス要件に合うように実行時オプションを設定します。 例えば、エラーが発生した場合にジョブの処理を続行するようにAssemblerサービスに指示するには、AssemblerOptionSpec
オブジェクトのsetFailOnError
メソッドを呼び出し、false
を渡します。入力PDFドキュメントをアセンブリします。
AssemblerServiceClient
オブジェクトのinvokeDDX
メソッドを呼び出し、次の必須値を渡します。
com.adobe.idp.Document
オブジェクトjava.util.Map
オブジェクトcom.adobe.livecycle.assembler.client.AssemblerOptionSpec
オブジェクトinvokeDDX
メソッドは、ジョブの結果と発生した例外を含むcom.adobe.livecycle.assembler.client.AssemblerResult
オブジェクトを返します。
結果を抽出します。
新しく作成されたPDFドキュメントを取得するには、次の操作を実行します。
AssemblerResult
オブジェクトのgetDocuments
メソッドを呼び出します。 java.util.Map
オブジェクトを返します。java.util.Map
オブジェクトを繰り返し処理して、結果のcom.adobe.idp.Document
オブジェクトを見つけます。 (DDXドキュメントで指定されたPDF結果ドキュメントを使用して、要素を取得できます)。com.adobe.idp.Document
オブジェクトのcopyToFile
メソッドを呼び出してPDFドキュメントを抽出します。*LOG_LEVEL*
がログを生成するように設定されている場合は、*AssemblerResult*
オブジェクトの*getJobLog*
メソッドを使用してログを抽出できます。
関連トピック
クイック開始(SOAPモード):Java APIを使用したPDFドキュメントのアセンブリ
Assembler Service API(Webサービス)を使用してPDFドキュメントをアセンブリします。
プロジェクトファイルを含めます。
MTOMを使用するMicrosoft .NETプロジェクトを作成します。 次のWSDL定義を使用していることを確認します。http://localhost:8080/soap/services/AssemblerService?WSDL&lc_version=9.0.1
.
localhost
を、AEM FormsをホストするサーバーのIPアドレスに置き換えます。
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認証を有効にします。
AssemblerServiceClient.ClientCredentials.UserName.UserName
に割り当てます。AssemblerServiceClient.ClientCredentials.UserName.Password
に割り当てます。HttpClientCredentialType.Basic
をフィールドBasicHttpBindingSecurity.Transport.ClientCredentialType
に割り当てます。BasicHttpSecurityMode.TransportCredentialOnly
をフィールドBasicHttpBindingSecurity.Security.Mode
に割り当てます。既存のDDXドキュメントの参照。
BLOB
オブジェクトを作成します。BLOB
オブジェクトは、DDXドキュメントの保存に使用されます。System.IO.FileStream
オブジェクトを作成します。System.IO.FileStream
オブジェクトの内容を格納するバイト配列を作成します。 System.IO.FileStream
オブジェクトのLength
プロパティを取得して、バイト配列のサイズを決定できます。System.IO.FileStream
オブジェクトのRead
メソッドを呼び出し、読み取るバイト配列、開始位置、ストリーム長を渡すことで、バイト配列にストリームデータを入力します。BLOB
オブジェクトにMTOM
プロパティを割り当て、バイト配列の内容を指定します。入力PDFドキュメントを参照します。
BLOB
オブジェクトを作成します。 BLOB
オブジェクトは、入力PDFドキュメントの保存に使用されます。System.IO.FileStream
オブジェクトを作成します。System.IO.FileStream
オブジェクトの内容を格納するバイト配列を作成します。 System.IO.FileStream
オブジェクトのLength
プロパティを取得して、バイト配列のサイズを決定できます。System.IO.FileStream
オブジェクトのRead
メソッドを呼び出して、バイト配列にストリームデータを入力します。 読み取るバイト配列、開始位置、ストリーム長を渡します。BLOB
オブジェクトに、MTOM
フィールドにバイト配列の内容を割り当てて入力します。MyMapOf_xsd_string_To_xsd_anyType
オブジェクトを作成します。 このコレクションオブジェクトは、入力PDFドキュメントの格納に使用されます。MyMapOf_xsd_string_To_xsd_anyType_Item
オブジェクトを作成します。 例えば、2つの入力PDFドキュメントを使用する場合は、2つのMyMapOf_xsd_string_To_xsd_anyType_Item
オブジェクトを作成します。MyMapOf_xsd_string_To_xsd_anyType_Item
オブジェクトのkey
フィールドに割り当てます。 この値は、DDXドキュメントで指定されたPDFソース要素の値と一致する必要があります。 (このタスクは、入力PDFドキュメントごとに実行します)。BLOB
オブジェクトをMyMapOf_xsd_string_To_xsd_anyType_Item
オブジェクトのvalue
フィールドに割り当てます。 (このタスクは、入力PDFドキュメントごとに実行します)。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
オブジェクトを渡します。 (このタスクは、入力PDFドキュメントごとに実行します)。実行時オプションを設定します。
AssemblerOptionSpec
オブジェクトを作成します。AssemblerOptionSpec
オブジェクトに属するデータメンバに値を割り当てて、ビジネス要件に合うように実行時オプションを設定します。 例えば、エラーが発生した場合にジョブの処理を続行するようにAssemblerサービスに指示するには、false
をAssemblerOptionSpec
オブジェクトのfailOnError
データメンバーに割り当てます。入力PDFドキュメントをアセンブリします。
AssemblerServiceClient
オブジェクトのinvoke
メソッドを呼び出し、次の値を渡します。
BLOB
オブジェクトです。mapItem
配列です。 このキーはPDFソースファイルの名前と一致する必要があり、その値はそれらのファイルに対応するBLOB
オブジェクトである必要があります。AssemblerOptionSpec
オブジェクト。invoke
メソッドは、ジョブの結果と発生した可能性のある例外を含むAssemblerResult
オブジェクトを返します。
結果を抽出します。
新しく作成されたPDFドキュメントを取得するには、次の操作を実行します。
AssemblerResult
オブジェクトのdocuments
フィールドにアクセスします。これは、結果のPDFドキュメントを含むMap
オブジェクトです。Map
オブジェクトを繰り返し処理して、結果のドキュメントの名前と一致するキーを見つけます。 次に、その配列メンバーのvalue
をBLOB
にキャストします。BLOB
オブジェクトのMTOM
プロパティにアクセスして、PDFドキュメントを表すバイナリデータを抽出します。 PDFファイルに書き出すことができるバイトの配列を返します。LOG_LEVEL
がログを生成するように設定されている場合は、AssemblerResult
オブジェクトのjobLog
データメンバの値を取得してログを抽出できます。
関連トピック