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

Assembler Service APIを使用すると、複数のPDFドキュメントを1つのPDFドキュメントにアセンブリできます。 次の図は、3つのPDFドキュメントを1つのPDFドキュメントに結合する様子を示しています。

pa_pa_ドキュメント_アセンブリ

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」を参照してください。

Webサービスを使用してAssemblerサービスを呼び出す場合の考慮事項

大きなドキュメントのアセンブリ中にヘッダーとフッターを追加すると、OutOfMemoryエラーが発生し、ファイルがアセンブルされない場合があります。 この問題が発生する可能性を低くするには、次の例に示すように、DDXドキュメントにDDXProcessorSetting要素を追加します。

<DDXProcessorSetting name="checkpoint" value="2000" />

この要素は、DDX要素の子として、またはPDF result要素の子として追加できます。 この設定のデフォルト値は0(ゼロ)で、チェックポイントがオフになり、DDXはDDXProcessorSetting要素が存在しないかのように動作します。 OutOfMemoryエラーが発生した場合は、値を整数(通常は500 ~ 5000)に設定する必要があります。 チェックポイントの値を小さくすると、チェックポイントの頻度が高くなります。

手順の概要

複数のPDFドキュメントから単一のPDFドキュメントをアセンブリするには、次のタスクを実行します。

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

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

必要なファイルを開発プロジェクトに含めます。 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にデプロイされている場合に必要)

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オブジェクト内にあるキー値とオブジェクトの種類の一部を示します。

キー値

オブジェクトタイプ

説明

documentName

com.adobe.idp.Document

DDX結果ドキュメントに指定された結果要素を含みます

documentName

Exception

ドキュメントに対する例外が含まれます

OutputMapConstants.LOG_NAME

com.adobe.idp.Documen

ジョブログが含まれます

関連トピック

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

接続プロパティの設定

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

Java APIを使用したPDFドキュメントのアセンブリ

Assembler Service API(Java)を使用してPDFドキュメントをアセンブリします。

  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. 入力PDFドキュメントを参照します。

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

    • 各入力PDFドキュメントに対して、コンストラクターを使用し、入力PDFドキュメントーの場所を渡して、java.io.FileInputStreamオブジェクトを作成します。

    • 入力PDFドキュメントごとに、com.adobe.idp.Documentオブジェクトを作成し、PDFドキュメントを含むjava.io.FileInputStreamオブジェクトを渡します。

    • 各入力ドキュメントーに対して、putメソッドを呼び出し、次の引数を渡して、java.util.Mapオブジェクトにエントリを追加します。

      • キー名を表すstring値です。 この値は、DDXドキュメントで指定されたPDFソース要素の値と一致する必要があります。
      • ソースPDFドキュメントを含むcom.adobe.idp.Documentオブジェクト(または複数のドキュメントを指定するjava.util.Listオブジェクト)。
  5. 実行時オプションを設定します。

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

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

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

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

  7. 結果を抽出します。

    新しく作成された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ドキュメントのアセンブリ

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

接続プロパティの設定

WebサービスAPIを使用してPDFドキュメントをアセンブリ

Assembler Service API(Webサービス)を使用してPDFドキュメントをアセンブリします。

  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オブジェクトを作成します。 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認証を有効にします。

      • 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. 入力PDFドキュメントを参照します。

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

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

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

    • DDXドキュメントを表すBLOBオブジェクトです。
    • 入力PDFドキュメントが含まれるmapItem配列です。 このキーはPDFソースファイルの名前と一致する必要があり、その値はそれらのファイルに対応するBLOBオブジェクトである必要があります。
    • 実行時オプションを指定するAssemblerOptionSpecオブジェクト。

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

  7. 結果を抽出します。

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

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

    LOG_LEVELがログを生成するように設定されている場合は、AssemblerResultオブジェクトのjobLogデータメンバの値を取得してログを抽出できます。

関連トピック

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

このページ