(57)【要約】【課題】アプリケーションの実行環境を適切に提供すること。【解決手段】アプリケーションから要求されたジョブを実行する画像形成装置であって、前記ジョブに対する設定情報を前記アプリケーションより受け付ける設定情報受付手段と、前記アプリケーションよりジョブの実行要求を受け付けるジョブ実行要求受付手段と、前記ジョブ実行要求受付手段からの要求に応じ、前記ジョブの設定情報に従ってジョブの実行を制御するジョブ実行制御手段と、前記設定情報に基づいて判定される、前記ジョブの出力物の出力面ごとに当該出力面の出力を実行させる出力要素管理手段と、前記設定情報に指定された画像を前記出力面に合成する画像合成手段とを有する。【選択図】図２０
2010283617.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションから要求されたジョブを実行する画像形成装置であって、
前記ジョブに対する設定情報を前記アプリケーションより受け付ける設定情報受付手段と、
前記アプリケーションよりジョブの実行要求を受け付けるジョブ実行要求受付手段と、
前記ジョブ実行要求受付手段からの要求に応じ、前記ジョブの設定情報に従ってジョブの実行を制御するジョブ実行制御手段と、
前記設定情報に基づいて判定される、前記ジョブの出力物の出力面ごとに当該出力面の出力を実行させる出力要素管理手段と、
前記設定情報に指定された画像を前記出力面に合成する画像合成手段とを有する画像形成装置。
【請求項２】
前記設定情報に指定された画像ごとに前記画像合成手段を有し、
それぞれの前記画像合成手段は、同一の前記出力面に当該画像合成手段に係る画像を合成する請求項１記載の画像形成装置。
【請求項３】
前記画像合成手段は、記憶手段に記憶された、前記画像の用途によって区別される種類の組み合わせの可否を示す情報と、前記設定情報に指定された複数の前記画像の前記種類とに基づいて、前記複数の画像の同一の前記出力面への合成の可否を判定する請求項２記載の画像形成装置。
【請求項４】
前記画像合成手段は、前記複数の画像の同一出力面への合成は不可能であると判定される場合は、記憶手段に記憶された、前記種類の優先順位に基づいて合成する画像を選択する請求項３記載の画像形成装置。
【請求項５】
前記画像合成手段は、前記設定情報に指定された複数の前記画像のそれぞれの座標情報に基づいて前記画像間の重畳の有無を判定し、重畳が有る場合は、記憶手段に記憶された、前記種類の優先順位に基づいて合成する画像を選択する請求項３又は４記載の画像形成装置。
【請求項６】
前記画像合成手段は、前記設定情報に指定された複数の前記画像のそれぞれの座標情報に基づいて前記画像間の重畳の有無を判定し、重畳が有る場合は、重畳しないようにいずれかの前記画像の座標情報を変更して前記画像を合成する請求項３乃至５いずれか一項記載の画像形成装置。
【請求項７】
アプリケーションから要求されたジョブを実行する画像形成装置におけるジョブ実行方法であって、
設定情報受付手段が、前記ジョブに対する設定情報を前記アプリケーションより受け付ける第一の手順と、
ジョブ実行要求受付手段が、前記アプリケーションよりジョブの実行要求を受け付ける第二の手順と、
ジョブ実行制御手段が、前記ジョブ実行要求受付手段からの要求に応じ、前記ジョブの設定情報に従ってジョブの実行を制御する第三の手順と、
出力要素管理手段が、前記設定情報に基づいて判定される、前記ジョブの出力物の出力面ごとに当該出力面の出力を実行させる第四の手順と、
画像合成手段が、前記設定情報に指定された画像を前記出力面に合成する第五の手順とを有するジョブ実行方法。
【請求項８】
アプリケーションから要求されたジョブを実行する画像形成装置を、
前記ジョブに対する設定情報を前記アプリケーションより受け付ける設定情報受付手段と、
前記アプリケーションよりジョブの実行要求を受け付けるジョブ実行要求受付手段と、
前記ジョブ実行要求受付手段からの要求に応じ、前記ジョブの設定情報に従ってジョブの実行を制御するジョブ実行制御手段と、
前記設定情報に基づいて判定される、前記ジョブの出力物の出力面ごとに当該出力面の出力を実行させる出力要素管理手段と、
前記設定情報に指定された画像を前記出力面に合成する画像合成手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像形成装置、ジョブ実行方法、及びプログラムに関し、特にアプリケーションから要求されたジョブを実行する画像形成装置、ジョブ実行方法、及びプログラムに関する。
【背景技術】
【０００２】
特許文献１には、パイプ＆フィルタアーキテクチャを採用し、フィルタと呼ばれるソフトウェアコンポーネントの組み合わせによって構成されるアクティビティと呼ばれるソフトウェアコンポーネントによって、ジョブを実行するアプリケーションが実現される画像形成装置が開示されている。このような画像形成装置によれば、新たな機能の実装に関する柔軟性を著しく向上させることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
しかしながら、特許文献１に記載された画像形成装置において新たなアプリケーション（特許文献１における「アクティビティ」）を実装する場合、フィルタを組み合わせるための知識が開発者に必要とされる。また、アプリケーションの実装に伴って、新たなフィルタを実装する必要がある場合、当該フィルタを実装するための知識が必要とされる。
【０００４】
このような知識は、画像形成装置においてジョブを実行するためのアーキテクチャ又はロジックに関する比較的深い層に属する部分である。斯かる部分について、サードベンダー等による開発を可能とするためには、画像形成装置のベンダーは、当該部分についてかなり詳しい技術内容を開示しなければならないことになる。その結果、企業秘密として保持してきたい重要な技術をも開示する必要性が高まり、技術流出の可能性が高まる虞がある。
【０００５】
また、特許文献１に記載された画像形成装置では、以上のような知識を会得するまでの初回の開発コストが大きくなる可能性が高い。したがって、初回の開発コストをより小さく抑えられるアーキテクチャの提供が望まれる。
【０００６】
本発明は、上記の点に鑑みてなされたものであって、アプリケーションの実行環境を適切に提供することのできる画像形成装置、ジョブ実行方法、及びプログラムの提供を目的とする。
【課題を解決するための手段】
【０００７】
そこで上記課題を解決するため、本発明は、アプリケーションから要求されたジョブを実行する画像形成装置であって、前記ジョブに対する設定情報を前記アプリケーションより受け付ける設定情報受付手段と、前記アプリケーションよりジョブの実行要求を受け付けるジョブ実行要求受付手段と、前記ジョブ実行要求受付手段からの要求に応じ、前記ジョブの設定情報に従ってジョブの実行を制御するジョブ実行制御手段と、前記設定情報に基づいて判定される、前記ジョブの出力物の出力面ごとに当該出力面の出力を実行させる出力要素管理手段と、前記設定情報に指定された画像を前記出力面に合成する画像合成手段とを有する。
【０００８】
このような画像形成装置では、アプリケーションの実行環境を適切に提供することができる。
【発明の効果】
【０００９】
アプリケーションの実行環境を適切に提供することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施の形態における画像形成装置のハードウェア構成の一例を示す図である。
【図２】本発明の実施の形態における複合機のソフトウェア構成例を示す図である。
【図３】ＭＦＰプロファイルの構成例を示す図である。
【図４】第一の実施の形態におけるＭＦＰプロファイルの各層のクラス構成例を示す図である。
【図５】ＪＰＳの概念モデルを示す図である。
【図６】プレゼンテーション層がＪＰＳを包含する例を示す図である。
【図７】プレゼンテーション層がＪＰＳを包含する場合のアプリケーションとＪＰＳとの関係を示す図である。
【図８】ＪＰＳがＭＦＰサービス抽象モデルを継承する例を示す図である。
【図９】アプリケーションが複合機にジョブを実行させるための処理手順を説明するためのシーケンス図である。
【図１０】アプリケーションが複合機にジョブを実行させるために実装が必要とされる手順を示すフローチャートである。
【図１１】第一の実施の形態のドメインロジック層における処理手順を説明するためのシーケンス図である。
【図１２】第一の実施の形態のドメインロジック層における処理手順を説明するためのシーケンス図である。
【図１３】第一の実施の形態のドメインロジック層における処理手順を説明するためのシーケンス図である。
【図１４】第一の実施の形態においてコピージョブを実行する際のドメインロジック層における処理手順を説明するための汎用的なフローチャートである。
【図１５】ソート指定の場合にインスタンス化されるドメインロジック層のオブジェクトの構成例を示す図である。
【図１６】スタック用の読み取り処理を説明するためのフローチャートである。
【図１７】スタック指定の場合にインスタンス化されるドメインロジック層のオブジェクトの構成例を示す図である。
【図１８】その他の読み取り処理を説明するためのフローチャートである。
【図１９】ソート及びスタックが指定されていない場合にインスタンス化されるドメインロジック層のオブジェクトの構成例を示す図である。
【図２０】第二の実施の形態におけるドメインロジック層のクラス構成例を示す図である。
【図２１】第二の実施の形態のドメインロジック層における処理手順を説明するためのシーケンス図である。
【図２２】第二の実施の形態のドメインロジック層における処理手順を説明するためのシーケンス図である。
【図２３】組み合わせ条件の構成例を示す図である。
【図２４】二つの印字画像は重なると判定される例を示す図である。
【図２５】二つの印字画像は重ならないと判定される例を示す図である。
【図２６】印字画像の各頂点の座標の算出例を示す図である。
【図２７】印字画像の重なりを解消させるための座標の変更例を示す図である。
【図２８】第二の実施の形態においてコピージョブを実行する際のドメインロジック層における処理手順を説明するための汎用的なフローチャートである。
【図２９】印字画像合成処理を説明するためのフローチャートである。
【発明を実施するための形態】
【００１１】
以下、図面に基づいて本発明の実施の形態を説明する。図１は、本発明の実施の形態における画像形成装置のハードウェア構成の一例を示す図である。図１では、画像形成装置の具体例として、プリンタ、コピー、スキャナ、又は、ファクス等の複数の機能を一台の筐体において実現する複合機１のハードウェア構成が示されている。
【００１２】
複合機１のハードウェアとしては、コントローラ１０１と、オペレーションパネル１０２と、ファクシミリコントロールユニット（ＦＣＵ）１０３と、撮像部１０４と、印刷部１０５が存在する。
【００１３】
コントローラ１０１は、ＣＰＵ１１１、ＡＳＩＣ１１２、ＮＢ１２１、ＳＢ１２２、ＭＥＭ−Ｐ１３１、ＭＥＭ−Ｃ１３２、ＨＤＤ（ハードディスクドライブ）１３３、メモリカードスロット１３４、ＮＩＣ（ネットワークインタフェースコントローラ）１４１、ＵＳＢデバイス１４２、ＩＥＥＥ１３９４デバイス１４３、セントロニクスデバイス１４４により構成される。
【００１４】
ＣＰＵ１１１は、種々の情報処理用のＩＣである。ＡＳＩＣ１１２は、種々の画像処理用のＩＣである。ＮＢ１２１は、コントローラ１０１のノースブリッジである。ＳＢ１２２は、コントローラ１０１のサウスブリッジである。ＭＥＭ−Ｐ１３１は、複合機１のシステムメモリである。ＭＥＭ−Ｃ１３２は、複合機１のローカルメモリである。ＨＤＤ１３３は、複合機１のストレージである。メモリカードスロット１３４は、メモリカード１３５をセットするためのスロットである。ＮＩＣ１４１は、ＭＡＣアドレスによるネットワーク通信用のコントローラである。ＵＳＢデバイス１４２は、ＵＳＢ規格の接続端子を提供するためのデバイスである。ＩＥＥＥ１３９４デバイス１４３は、ＩＥＥＥ１３９４規格の接続端子を提供するためのデバイスである。セントロニクスデバイス１４４は、セントロニクス仕様の接続端子を提供するためのデバイスである。オペレーションパネル１０２は、オペレータが複合機１に入力を行うためのハードウェア（操作部）であると共に、オペレータが複合機１から出力を得るためのハードウェア（表示部）である。
【００１５】
図２は、本発明の実施の形態における複合機のソフトウェア構成例を示す図である。同図において、複合機１は、ＯＳ２０、ドライバプログラム２１、ＪＶＭ３０、ＣＤＣ３１、Ｆｏｕｎｄａｔｉｏｎ  Ｐｒｏｆｉｌｅ３２、ＭＦＰプロファイル４０、ネイティブモジュール５０、及びアプリケーション６０等を有する。
【００１６】
ＯＳ２０は、いわゆるＯＳ（Operating System）である。ドライバプログラム２１は、ハードウェアを制御する各種のプロラムモジュールである。ＪＶＭ３０は、Java（登録商標） Virtual Machine（仮想マシン）であり、Ｊａｖａ（登録商標）の実行環境を実現する。ＣＤＣ（Connected Device Configuration）３１及びＦｏｕｎｄａｔｉｏｎ  Ｐｒｏｆｉｌｅ３２は、Ｊａｖａ（登録商標）  Ｍｉｃｒｏ  Ｅｄｉｔｉｏｎの基本構成である。
【００１７】
ＭＦＰプロファイル４０は、複合機１用のアプリケーション６０の開発環境及び実行環境を提供するプラットフォーム（プログラムモジュール群）である。より詳しくは、ＭＦＰプロファイル４０は、複合機１にジョブを実行させるためのＪａｖａ（登録商標）インタフェース（ＡＰＩ（Application Program Interface））をアプリケーション６０に提供し、当該インタフェースの呼び出しに応じて複合機１を制御する。なお、ＭＦＰ（Multifunction Peripheral）とは、複合機の略称である。
【００１８】
ネイティブモジュール５０は、ネイティブコードによって記述されたプログラムモジュール群である。ネイティブモジュール５０は、例えば、Ｃ言語やＣ＋＋言語によるインタフェース（ＡＰＩ）をアプリケーション６０に提供し、当該インタフェースの呼び出しに応じて複合機１を制御する。
【００１９】
アプリケーション６０は、複合機１にジョブを実行させるプログラムであり、プリントアプリ６１、コピーアプリ６２、スキャンアプリ６３、ＦＡＸアプリ６４等、ジョブ種別（印刷、コピー、スキャン、ＦＡＸ送信等）に応じて複数のアプリケーション６０が存在する。各アプリケーション６０は、ＭＦＰプロファイル４０又はネイティブモジュール５０によって提供されるインタフェースに基づいて開発される。厳密には、Ｊａｖａ（登録商標）コードによるアプリケーション６０からはＭＦＰプロファイル４０が利用され、ネイティブコードによるアプリケーション６０からはネイティブモジュール５０が利用される。
【００２０】
本実施の形態において、ＭＦＰプロファイル４０及びネイティブモジュール５０のインタフェースは複合機１のメーカー外にも公開されている。したがって、アプリケーション６０は、複合機１のメーカーだけでなく、サードベンダー等によっても開発可能である。ユーザから見た場合、複合機１を導入（設置）した後に、市場で販売されている新たなアプリケーション６０を複合機１にインストールし、複合機１の機能強化を図ることができる。
【００２１】
本実施の形態では、特に、ＭＦＰプロファイル４０について説明する。図３は、ＭＦＰプロファイルの構成例を示す図である。
【００２２】
同図において、ＭＦＰプロファイル４０は、プレゼンテーション層４１、ドメインロジック層４２、及びサービス層４３等より構成される。なお、図中における各層の上下関係は、層間の呼び出し関係（利用関係）に基づいている。基本的に上の層が下の層を呼び出す（利用する）。
【００２３】
プレゼンテーション層４１は、アプリケーション６０に公開されるインタフェース部分である。すなわち、プレゼンテーション層４１は、アプリケーション６０からの要求を受け付け、当該要求に対する応答をアプリケーション６０に返却する。なお、アプリケーション６０の開発者からはプレゼンテーション層４１のみが興味の対象となる。
【００２４】
ドメインロジック層４２は、プレゼンテーション層４１によって受け付けられたアプリケーション６０からの要求に応じ、複合機１にジョブを実行させるためのロジックが実装されている部分である。ドメインロジック層４２は、その役割（責務）に応じて要求管理部４２１、Ｉ／Ｏファンクション部４２２、Ｉ／Ｏリソース管理部４２３、及びシステム管理部４２４等に細部化される。
【００２５】
要求管理部４２１は、プレゼンテーション層４１によって受け付けられるアプリケーション６０からの要求を管理する。Ｉ／Ｏファンクション部４２２は、ジョブに対するデータの入力やジョブの実行によるデータの出力等の機能を実現する。Ｉ／Ｏリソース管理部４２３は、撮像部１０４や印刷部１０５等のデータの入出力に関するハードウェアリソースを管理する。システム管理部４２４は、要求管理部４２１、Ｉ／Ｏファンクション部４２２、及びＩ／Ｏリソース管理部４２３等の横断的関心事（例えば、各部より共通に利用される情報）を管理する。
【００２６】
サービス層４３は、デバイス、ミドルウェア、又はＯＳ等へのアクセスを隠蔽する部分である。すなわち、サービス層４３によって、複合機１の機種の違い、又は複合機１において利用されるミドルウェア又はＯＳ等の違いが吸収される。
【００２７】
ＭＦＰプロファイル４０の各層について更に詳しく説明する。図４は、第一の実施の形態におけるＭＦＰプロファイルの各層のクラス構成例を示す図である。なお、同図のクラス群は、インタフェースを示す。したがって、実装は当該インタフェースに対する実装クラスにおいて行われる。以下において、「ＸＸＸクラスのインスタンス」というとき、ＸＸＸクラスの実装クラスのインスタンスを意味する。
【００２８】
同図において、プレゼンテーション層４１は、サービス検索クラス４１１、入出力形式クラス４１２、要求属性値群クラス４１３、サービスクラス４１４、サービス属性値群クラス４１４１、ドキュメントクラス４１５、ドキュメント属性値群クラス４１５１、ジョブクラス４１６、及びジョブ属性値群クラス４１６１等を含む。
【００２９】
サービス検索クラス４１１のインスタンス（サービス検索オブジェクト）は、アプリケーション６０からの要求に応じサービスを検索する。サービスとは、ジョブの実行に関係するソフトウェア及びハードウェアの集合（すなわち、ジョブの実行主体）をいう。サービスの検索条件は、入出力形式クラス４１２のインスタンスと要求属性値群クラス４１３のインスタンスとによって指定される。
【００３０】
入出力形式クラス４１２のインスタンス（入出力形式オブジェクト）は、ジョブの入力データ又は出力データのデータ形式を保持する。要求属性値群クラス４１３のインスタンス（要求属性値群オブジェクト）は、アプリケーション６０から要求において指定されるジョブに対する設定値の集合を保持する。
【００３１】
サービスクラス４１４のインスタンス（サービスオブジェクト）は、サービスの代表を表現する。サービスクラス４１４の実装クラスはサービスごとに定義される。サービス属性値群クラス４１４１のインスタンス（サービス属性値群オブジェクト）は、サービスの状態を保持する。
【００３２】
ドキュメントクラス４１５のインスタンス（ドキュメントオブジェクト）は、ジョブに対して入力されるドキュメント（データ）を表現する。例えば、印刷ジョブであれば印刷データが相当する。ドキュメント属性値群クラス４１５１のインスタンス（ドキュメント属性値群オブジェクト）は、ドキュメントの属性を保持する。
【００３３】
ジョブクラス４１６のインスタンス（ジョブオブジェクト）は、ジョブを表現する。ジョブクラス４１６の実装クラスはジョブの種別ごとに定義される。ジョブ属性値群クラス４１６１のインスタンス（ジョブ属性値群オブジェクト）は、ジョブの状態を保持する。
【００３４】
また、ドメインロジック層４２の要求管理部４２１は、成果物クラス４２１１を含む。成果物クラス４２１１のインスタンス（成果物オブジェクト）は、ジョブによる成果物を実現するための処理（すなわち、ジョブの実行制御）を行う。成果物オブジェクトは、成果物の構成要素や、成果物の進捗状況等を知っている。なお、成果物とは、例えば、１枚の原稿を３部コピーするというコピージョブであれば、３枚のコピー結果そのものをいう。
【００３５】
ドメインロジック層４２のＩ／Ｏファンクション部４２２は、入力物クラス４２２１、原画像クラス４２２２、出力物クラス４２２３、出力要素クラス４２２４、及び出力束クラス４２２５等を含む。入力物クラス４２２１のインスタンス（入力物オブジェクト）は、ジョブの入力データに係る原稿の１枚又は１ページ（入力物）を表現する。したがって、入力物オブジェクトは、コピージョブやスキャンジョブ等、原稿から入力データが得られるジョブに利用される。入力物クラス４２２１は自らに対する再帰的な関連を有している。当該関連は、入力物オブジェクトがチェーン構造で関連付けられることにより、複数枚の原稿の表現を可能とするためのものである。なお、本実施の形態において、便宜上、原稿の１枚と１ページとは等価であるとする。
【００３６】
原画像クラス４２２２のインスタンス（原画像オブジェクト）は、ジョブに対する入力画像を表現する。例えば、コピージョブであれば、スキャンされたスキャン画像を表現する。原画像オブジェクトは、画像の入力方法を知っており、また、入力処理の進捗状況（撮像部１０４による読み取りの進捗状況）を知っている。
【００３７】
出力物クラス４２２３のインスタンス（出力物オブジェクト）は、ジョブによる成果物の一部（出力物）を表現する。出力物オブジェクトは、成果物がどのような材料（入力物）で構成されているのかや、出力物の出力の実行可能条件等を知っている。出力物オブジェクトはまた、出力物の出力に必要な入力物を知っており、当該入力物に係る入力物オブジェクトに紐づいている。
【００３８】
出力束クラス４２２５のインスタンス（出力束オブジェクト）は、成果物がどのような順番（ソート順又はスタック順等）で構成されているかを知っている。出力要素クラス４２２４のインスタンス（出力要素オブジェクト）は、出力要素（出力面）の出力の方法を知っている。出力要素は、例えばコピージョブのときには印刷面を示す。
【００３９】
ドメインロジック層４２のＩ／Ｏリソース管理部４２３は、入力リソースクラス４２３１及び出力リソースクラス４２３２等を含む。入力リソースクラス４２３１のインスタンス（入力リソースオブジェクト）は、データを入力するためのハードウェア資源（撮像部１０４等）を管理する。出力リソースクラス４２３２のインスタンス（出力リソースオブジェクト）は、データを出力するためのハードウェア資源（印刷部１０５等）を管理する。
【００４０】
ドメインロジック層４２のシステム管理部４２４は、機内監視クラス４２４１を含む。機内監視クラス４２４１のインスタンス（機内監視オブジェクト）は、複合機１の状態を監視する。
【００４１】
以上の各層のクラス群の中で、プレゼンテーション層４１に属するクラス群が、アプリケーション６０に利用可能なインタフェースを提供する。斯かるプレゼンテーション層４１のクラス群（インタフェース）は、ＪＰＳ（Java（登録商標） Print Service）に準拠した構成を有している。換言すれば、プレゼンテーション層４１において、ＪＰＳを提供することができる。ここで、ＪＰＳとは、Ｊａｖａ（登録商標）プラットフォームにおいて印刷に関する制御を実行するための標準のＡＰＩ（Application Program Interface）である。このことは、印刷ジョブを実行するアプリケーション６０の開発者は、ＪＰＳに関する知識を有していれば、ＭＦＰプロファイル４０上に簡便に当該アプリケーション６０を実装することができることを意味する。
【００４２】
図５は、ＪＰＳの概念モデルを示す図である。同図に示されるように、ＪＰＳは、ドキュメントインタフェース群、印刷ジョブインタフェース群、プリンタサービスインタフェース群より構成される。
【００４３】
ドキュメントインタフェース群におけるＳｉｍｐｌｅＤｏｃクラス及びＤｏｃインタフェース実装クラスは、印刷データを表現するクラスであり、本実施の形態のドキュメントクラス４１５に対応する。ＤｏｃＦｌａｖｏｒクラスは、印刷データのデータ形式を表現するクラスであり、本実施の形態の入出力形式クラス４１２に対応する。
【００４４】
印刷ジョブインタフェース群におけるＤｏｃＰｒｉｎｔＪｏｂクラスは、印刷ジョブを表現するクラスであり、本実施の形態のジョブクラス４１６に対応する。ＰｒｉｎｔＡｔｔｒｉｂｕｔｅＳｅｔ実装クラスは、印刷要求の属性値群を表現し、本実施の形態の要求属性値群クラス４１３に対応する。
【００４５】
プリントサービスインタフェース群におけるＰｒｉｎｔＳｅｒｖｉｃｅ実装クラス及びＤｅｆａｕｌｔＰｒｉｎｔＳｅｒｖｉｃｅ実装クラス等は、印刷サービス（プリンタ）を表現するクラスであり、本実施の形態のサービスクラス４１４に対応する。ＰｒｉｎｔＳｅｒｖｉｃｅＬｏｏｋＵｐ実装クラスは、印刷サービス（プリンタ）を検索するクラスであり、本実施の形態のサービス検索クラス４１１に対応する。
【００４６】
なお、図４に示されるプレゼンテーション層４１のクラス群（インタフェース）は、印刷ジョブだけでなく、複数種類のジョブ（例えば、コピージョブ、スキャンジョブ、ＦＡＸ送信ジョブ等）に対して共通に定義されている。すなわち、プレゼンテーション層４１は、ＪＰＳをより抽象化（一般化）したものになっている。したがって、プレゼンテーション層４１に基づいてＪＰＳを実現する場合、プレゼンテーション層４１にＪＰＳを包含させるか、又はＪＰＳがプレゼンテーション層４１のクラス群（以下「ＭＦＰサービス抽象モデル」という。）を継承するようにすればよい。
【００４７】
図６は、プレゼンテーション層がＪＰＳを包含する例を示す図である。この場合、プレゼンテーション層４１は一つのソフトウェアコンポーネントとして構成され、当該ソフトウェアコンポーネント内にＪＰＳの実装が含まれる。また、他のサービス（例えば、コピージョブを実現するコピーサービス）に関するクラス群についても、ＭＦＰサービス抽象モデルに基づいて（ＭＦＰサービス抽象モデルと同様の構成によって）実装され、それぞれのサービスの実装が当該ソフトウェアコンポーネント内に含まれる。したがって、この場合、アプリケーション６０とＪＰＳとの関係は、図７に示されるようになる。
【００４８】
図７において、プレゼンテーション層４１は一つのソフトウェアコンポーネントとして、ＪＰＳや各サービス（同図ではコピーサービス）のインタフェースを公開すると共にその実装を包含する。したがって、アプリケーション６０は、公開されたＪＰＳや他のサービスのインタフェースを呼び出すことにより、それぞれの実装を利用することができる。このような構成では、各サービス（ＪＰＳも含む）のインタフェースは論理的には関係しているが、実質的には関係を有さない。したがって、仮に、ＪＰＳのバージョンアップ等で変更があったとしても、基本的には他のサービスはその影響を受けないという利点がある。
【００４９】
また、図８は、ＪＰＳがＭＦＰサービス抽象モデルを継承する例を示す図である。この場合、ＪＰＳの各クラスは、ＭＦＰサービス抽象モデルにおいて対応するクラスを継承する。他のサービス（例えば、コピーサービス）に関する実装クラス群もＭＦＰサービス抽象モデルのクラスを継承する。この場合、アプリケーション６０は、各サービス（ＪＰＳも含む）のクラス群をＭＦＰサービス抽象モデルのサブクラスとして利用することができる。
【００５０】
このような構成では、ＭＦＰサービス抽象モデルにおいて各サービスの共通部分を実装することにより、各サービスはその差分のみを実装すればよいという利点がある。また、継承により各サービスの構造がシンプルとなり、保守性を向上させることができる。
【００５１】
以下、複合機１の処理手順について説明する。図９は、アプリケーションが複合機にジョブを実行させるための処理手順を説明するためのシーケンス図である。同図における各オブジェクトの参照番号は、各オブジェクトのクラスの参照番号（図４参照）の末尾に「Ａ」を付加したものである。
【００５２】
ジョブの開始指示の入力に応じ、当該ジョブに対応するアプリケーション６０（プリントアプリ６１、コピーアプリ６２、スキャンアプリ６３、又はＦＡＸアプリ６４等）は、入出力形式オブジェクト４１２Ａをメモリ（ＭＥＭ−Ｐ１３１）内に生成する（Ｓ１０１）。ここで、アプリケーション６０は、ジョブ（印刷ジョブ、コピージョブ、スキャンジョブ、又はＦＡＸ送信ジョブ等）に応じた入力データ及び出力データの少なくともいずれか一方のデータ形式を入出力形式オブジェクト４１２Ａに設定する。例えば、印刷ジョブであれば、印刷データのデータ形式が設定される。なお、ジョブの開始指示の入力とは、印刷ジョブであれば印刷データの受信が相当する。また、コピージョブ、スキャンジョブ、ＦＡＸ送信ジョブ等であれば、ユーザによるスタートボタンの押下等が相当する。
【００５３】
続いて、アプリケーション６０は、要求属性値群オブジェクト４１３Ａをメモリ内に生成する（Ｓ１０３）。ここで、アプリケーション６０は、ジョブに対して要求された設定値（要求属性値群）を要求属性値群オブジェクト４１３Ａに設定する。当該設定値は、印刷ジョブであれば印刷データ内に含まれている。また、コピージョブ、スキャンジョブ、及びＦＡＸジョブ等であれば、オペレーションパネル１０２を介して設定され、メモリ内に記録されている。
【００５４】
続いて、アプリケーション６０は、入出力形式オブジェクト４１２Ａ及び要求属性値群オブジェクト４１３Ａを検索条件として指定して、サービスの検索をサービス検索オブジェクト４１１Ａに要求する（Ｓ１０５）。当該要求に応じ、サービス検索オブジェクト４１１Ａは、指定された検索条件に合致するサービスを検索し、当該サービスに対応するサービスオブジェクト４１４Ａをメモリ内に生成する（Ｓ１０７）。続いて、サービス検索オブジェクト４１１Ａは、生成されたサービスオブジェクト４１４Ａをアプリケーション６０に返却する（Ｓ１０９）。
【００５５】
なお、サービス検索オブジェクト４１１Ａによるサービスの検索は、例えば、ＨＤＤ１３３に記録されているサービス管理情報に基づいて行われる。サービス管理情報には、入力データの形式及び出力データの形式の少なくともいずれか一方と、要求属性値群との組み合わせに応じて、サービスクラス４１４の実装クラスのクラス名（例えば、「プリントサービス」、「コピーサービス」、「スキャンサービス」、「ＦＡＸサービス」等）が登録されている。したがって、サービス検索オブジェクト４１１Ａは、アプリケーション６０より指定された入出力形式オブジェクト４１２Ａ及び要求属性値群オブジェクト４１３Ａに対応するクラス名をサービス管理情報より検索し、検索されたクラス名に対応するサービスオブジェクト４１４Ａを生成する。
【００５６】
続いて、アプリケーション６０は、返却されたサービスオブジェクト４１４Ａに対してジョブの生成を要求する（Ｓ１１１）。サービスオブジェクト４１４Ａは、対応するジョブ（印刷ジョブ、コピージョブ、スキャンジョブ、又はＦＡＸ送信ジョブ等）の実装クラスのジョブオブジェクト４１６Ａを生成し（Ｓ１１３）、当該ジョブオブジェクト４１６Ａをアプリケーション６０に返却する（Ｓ１１５）。
【００５７】
続いて、アプリケーション６０は、ジョブにおいて処理対象とするドキュメントをカプセル化したドキュメントオブジェクト４１５Ａをメモリ内に生成する（Ｓ１１７）。印刷ジョブであれば、印刷データがカプセル化される。当該ドキュメントのデータ形式は、ジョブの種別に応じ、ＰｏｓｔＳｃｒｉｐｔファイル、ＪＰＥＧイメージ、ＵＲＬ、又はプレーンテキスト等、様々な形式をとり得る。なお、コピージョブ及びスキャンジョブ等については、アプリケーション６０は処理対象とするデータを有していない。したがって、このようなジョブについては、アプリケーション６０はドキュメントオブジェクト４１５Ａを生成する必要はない。一方、印刷ジョブの場合、印刷データの受信はアプリケーション６０（プリントアプリ６１）によって行われる。したがって、この場合は、ドキュメントオブジェクト４１５Ａが生成される。
【００５８】
続いて、アプリケーション６０は、ステップＳ１１５において返却されたジョブオブジェクト４１５Ａに対して、ドキュメントオブジェクト４１５Ａ及び要求属性値群オブジェクト４１３Ａを指定して、ジョブの実行を要求する（Ｓ１１９）。なお、ドキュメントオブジェクト４１５Ａが生成されていない場合は、ドキュメントオブジェクト４１５Ａは指定されない。
【００５９】
図９において、アプリケーション６０の軸から出ている矢印がアプリケーション６０において実装が必要とされる手順である。当該手順のフローチャートを図１０に示す。図１０において、各ステップには図９において対応するステップ番号が付されている。各ステップの内容は図９で説明した通りである。但し、図１０では、サービスが検索された場合に（すなわち、図９のステップＳ１１５においてサービスオブジェクト４１４Ａが返却された場合に）、ステップＳ１１１以降が実行されることが明示されている（Ｓ１１０）。
【００６０】
このように、アプリケーション６０の開発は、基本的に図１０に示される処理手順に対応したインタフェース（プレゼンテーション層４１のインタフェース）を呼び出すことにより行われる。また、当該インタフェースは、Ｊａｖａ（登録商標）の標準インタフェースであるＪＰＳに準拠するものである。したがって、本実施の形態の複合機１によれば、アプリケーション６０の開発作業の負担を軽減することができる。
【００６１】
また、特許文献１のフィルタ等によってアプリケーションを構築する場合に比べて、ソフトウェア構成全体の規模を小さくできる可能性が高い。したがって、アプリケーションの実行に必要なメモリ容量等を低減することができ、ハードウェアのコストの削減も期待できる。
【００６２】
ところで、ジョブオブジェクト４１６Ａに対するジョブの実行要求後は、ドメインロジック層４２においてジョブの実行が行われる。ドメインロジック層４２における処理手順についてはアプリケーション６０の関与しないところであるが、以下にその一例を説明する。
【００６３】
図１１、図１２、及び図１３は、第一の実施の形態のドメインロジック層における処理手順を説明するためのシーケンス図である。同図における各オブジェクトの参照番号は、各オブジェクトのクラスの参照番号（図４参照）の末尾に「Ａ」を付加したものである。
【００６４】
図１１等では、１枚の原稿について、出力部数は３、ソートはＯＮとして設定されコピージョブの実行が要求された場合の処理手順を説明する。
【００６５】
図９のステップＳ１１９におけるジョブの実行に応じ、ジョブオブジェクト４１６Ａは、成果物オブジェクト４２１１Ａをメモリ内に生成する（Ｓ３０１）。ここで、ジョブオブジェクト４１６Ａは、出力部数が３及びソートがＯＮであることを示す要求属性値群オブジェクト４１３Ａの内容（以下、「ジョブ設定値」という。）を成果物オブジェクト４２１１Ａに設定する。従って、ここでの成果物オブジェクト４２１１Ａは、ソートされた３部のコピー結果としての成果物を表現する。
【００６６】
続いて、ジョブオブジェクト４１６Ａは、成果物オブジェクト４２１１Ａに対してジョブの実行（すなわち、成果物の実現）を要求する（Ｓ３０３）。当該要求に応じ、成果物オブジェクト４２１１Ａは、１枚目の原稿に対応する入力物オブジェクト４２２１Ａをメモリ内に生成する（Ｓ３０５）。続いて、成果物オブジェクト４２１１Ａは、１枚目の入力物オブジェクト４２２１Ａに対応する出力物（１枚目の３部のコピー結果）に係るオブジェクト４２２３Ａをメモリ内に生成し、出力物オブジェクト４２２３Ａと入力物オブジェクト４２２１Ａとの関連を生成する（Ｓ３０７）。続いて、成果物オブジェクト４２１１Ａは、出力部数分の出力束オブジェクトをメモリ内に生成する。ここでは、１部目、２部目、及び３部目のそれぞれのソート単位に対応する出力束オブジェクト４２２５Ａ−１、４２２５Ａ−２、及び４２２５Ａ−３が生成される（Ｓ３０９〜Ｓ３１３）。なお、生成された出力束オブジェクトは、１部目、２部目、３部目という順番で（すなわち、出力束オブジェクト４２２５Ａ−１、４２２５Ａ−２、４２２５Ａ−３という順番で）チェーン構造で関連付けられる。
【００６７】
続いて、成果物オブジェクト４２１１Ａは、出力物オブジェクト４２２３Ａをソート１部目の出力束オブジェクト４２２５Ａ−１に通知し、出力要素（コピー面）の追加（束ねること）を要求する（Ｓ３１５）。続いて、出力束オブジェクト４２２５Ａ−１は、通知された出力物オブジェクト４２２３Ａに対し、１部目の出力要素（コピー面）に対応する出力要素オブジェクト４２２４Ａの取得を要求する（Ｓ３１７）。出力物オブジェクト４２２３Ａは、出力要素オブジェクト４２２４Ａ−１をメモリ内に生成し（Ｓ３１９）、出力束オブジェクト４２２５Ａ−１に返却する（Ｓ３２１）。
【００６８】
続いて、成果物オブジェクト４２１１Ａは、出力物オブジェクト４２２３Ａをソート２部目の出力束オブジェクト４２２５Ａ−２に通知する（Ｓ３２３）。続いて、出力束オブジェクト４２２５Ａ−２は、通知された出力物オブジェクト４２２３Ａに対し、２部目の出力要素（コピー面）に対応する出力要素オブジェクト４２２４Ａの取得を要求する（Ｓ３２５）。出力物オブジェクト４２２３Ａは、出力要素オブジェクト４２２４Ａ−２をメモリ内に生成し（Ｓ３２７）、出力束オブジェクト４２２５Ａ−２に返却する（Ｓ３２９）。
【００６９】
続いて、成果物オブジェクト４２１１Ａは、出力物オブジェクト４２２３Ａをソート３部目の出力束オブジェクト４２２５Ａ−３に通知する（Ｓ３３１）。続いて、出力束オブジェクト４２２５Ａ−３は、通知された出力物オブジェクト４２２３Ａに対し、３部目の出力要素（コピー面）に対応する出力要素オブジェクト４２２４Ａの取得を要求する（Ｓ３３３）。出力物オブジェクト４２２３Ａは、出力要素オブジェクト４２２４Ａ−３をメモリ内に生成し（Ｓ３３５）、出力束オブジェクト４２２５Ａ−３に返却する（Ｓ３３７）。
【００７０】
なお、各出力要素オブジェクト４２２４Ａは、出力物オブジェクト４２２３Ａ−１の生成時に予め生成されていてもよい。
【００７１】
出力部数分の出力束オブジェクト４２２５Ａの生成及び各出力束オブジェクト４２２５Ａへの出力物オブジェクト４２２３Ａの通知が完了すると、成果物オブジェクト４２１１Ａは、１枚目の原稿に対応する入力物オブジェクト４２２１Ａに対してデータ入力の実行（すなわち、１枚目の原稿の読み取り）を要求する（図１２：Ｓ３５１）。続いて、入力物オブジェクト４２２１Ａは、１枚目の原稿に対応する読み取り画像（スキャン画像）に対応する原画像オブジェクト４２２２Ａをメモリ内に生成する（Ｓ３５３）。続いて、入力物オブジェクト４２２１Ａは、原画像オブジェクト４２２２Ａに対して読み取りの実行を要求する（Ｓ３５５）。当該要求に応じ、原画像オブジェクト４２２２Ａは、入力リソースオブジェクト４２３１Ａ及びサービス層４３等を介して撮像部１０４に原稿の読み取りを実行させる（Ｓ３５７）。なお、読み取られた画像データ（スキャン画像）は、メモリ内に記録され、そのアドレス情報がサービス層４３及び入力リソースオブジェクト４２３１を経て原画像オブジェクト４２２２Ａに対して通知される。したがって、原画像オブジェクト４２２２Ａは、当該アドレス情報を保持することにより、スキャン画像に関連付けられる。また、次原稿の有無（２枚目以降の原稿の有無）もこのタイミングでサービス層４３及び入力リソースオブジェクト４２３１を経て原画像オブジェクト４２２２Ａに通知される。なお、印刷ジョブの場合、ステップＳ３０３においてジョブオブジェクト４１６Ａより成果物オブジェクト４２１１Ａに印刷データをカプセル化したドキュメントオブジェクトが引き渡される。当該ドキュメントオブジェクトは、ステップＳ３５１において成果物オブジェクト４２１１Ａから入力物オブジェクト４２２１Ａに引き渡される。したがって、原画像オブジェクト４２２２Ａによる画像データの読み取りは行われない。
【００７２】
１枚目の原稿の読み取りが終了すると、原画像オブジェクト４２２２Ａは、入力物オブジェクト４２２１Ａに１枚目の読み取りの終了及び次原稿の有無を通知する（Ｓ３５９）。当該通知に応じ、入力物オブジェクト４２２１Ａは、成果物に１枚目の入力物の入力（ここでは画像の読み取り）の終了を通知する（Ｓ３６１）。続いて、成果物オブジェクト４２１１Ａは、１枚目の原稿に対応する出力物オブジェクト４２２３Ａに入力物の入力の終了を通知する（Ｓ３６３）。当該通知に応じ、出力物オブジェクト４２２３Ａは、出力が可能となったことを判断する。
【００７３】
続いて、入力物オブジェクト４２２１Ａは、成果物オブジェクト４２１１Ａに次原稿の有無を通知する（Ｓ３５６）。ここでは、原稿は１枚であるという前提なので次原稿はないことが通知される。なお、次原稿が有ることが通知された場合、成果物オブジェクト４２１１Ａは、ステップＳ３０５、Ｓ３０７、Ｓ３１５、Ｓ３２３、Ｓ３３１、及びＳ３５１を再度実行する。その結果、２枚目に対応する入力物オブジェクト４２２１Ａ及び出力物オブジェクト４２２２Ａが生成され、２枚目の３部分のそれぞれのコピー面に対応する出力要素オブジェクト４２２５Ａが生成される。各出力要素オブジェクト４２２５Ａは、出力束オブジェクト４２２５Ａ−１〜３のそれぞれに登録される。
【００７４】
次原稿はないことが通知された場合、成果物オブジェクト４２１１Ａは、ソート単位分の入力物の入力は終了したと判断し、チェーン構造で関連付けられている最初の（１部目の）出力束オブジェクト４２２５Ａ−１に実行（コピー面の印刷）を要求する（Ｓ３６７）。続いて、出力束オブジェクト４２２５Ａ−１は、自らに登録されている（自らが束ねている）１部目のソート１枚目の出力要素オブジェクト４２２４Ａ−１に実行を要求する（Ｓ３６９）。出力要素オブジェクト４２２４Ａ−１は、出力リソースオブジェクト４２３２Ａにリソース（印刷部１０５等）の使用の予約を要求する（Ｓ３７１）。
【００７５】
自らに登録されている全ての出力要素オブジェクト４２２４Ａ−１に対する実行要求が終了すると、出力束オブジェクト４２２５Ａ−１は、自らにチェーン構造で接続されている次の（２部目の）出力束オブジェクト４２２５Ａ−２に実行を要求する（Ｓ３７３）。出力束オブジェクト４２２５Ａ−２は、自らに登録されている２部目のソート１枚目の出力要素オブジェクト４２２４Ａ−２に実行を要求する（Ｓ３７５）。出力要素オブジェクト４２２４Ａ−２は、出力リソースオブジェクト４２３２Ａにリソースの使用の予約を要求する（Ｓ３７７）。
【００７６】
自らに登録されている全ての出力要素オブジェクト４２２４Ａ−２に対する実行要求が終了すると、出力束オブジェクト４２２５Ａ−２は、自らにチェーン構造で接続されている次の（３部目の）出力束オブジェクト４２２５Ａ−３に実行を要求する（Ｓ３７９）。出力束オブジェクト４２２５Ａ−３は、自らに登録されている２部目のソート１枚目の出力要素オブジェクト４２２４Ａ−３に実行を要求する（Ｓ３８１）。出力要素オブジェクト４２２４Ａ−３は、出力リソースオブジェクト４２３２Ａにリソースの使用の予約を要求する（Ｓ３８３）。
【００７７】
なお、ソート２枚目が有る場合（原稿が２枚以上である場合）、各出力束オブジェクト４２２Ａは、ソート２枚目の出力要素オブジェクト４２２４Ａに対しても実行を要求する。実行要求を行う順番は、出力要素オブジェクト４２２４Ａ間のチェーン構造の接続関係に基づいて判定される。
【００７８】
続いて、リソースの使用予約を受けた出力リソースオブジェクト４２３２Ａは、印刷部１０５等が出力可能な状態になると、予約を受け付けた順番に使用許可を通知する。ここでは、まず、１部目のソート１枚目を示す出力要素オブジェクト４２２４Ａ−１にリソースの使用許可が通知される（Ｓ３９１）。続いて、出力要素オブジェクト４２２４Ａ−１は、出力物オブジェクト４２２３Ａに出力の実行可否判断を要求する（Ｓ３９３）。出力物オブジェクト４２２３Ａは、ステップＳ３６３において入力物の入力の終了を通知されているので実行可能と判断し、その判断結果を出力要素オブジェクト４２２４Ａ−１に返却する。実行可能であることを示す判断結果が返却された場合、出力要素オブジェクト４２２４Ａ−１は、使用許可された出力リソース（印刷部１０５）を使用して印刷を実行する（Ｓ３９５）。ここで、印刷対象とされる画像データは、出力要素オブジェクト４２２４Ａ−１が属する出力物オブジェクト４２２３Ａに関連付けられている入力物オブジェクト４２２１Ａに基づいて特定可能である。印刷が終了すると、出力要素オブジェクト４２２４Ａ−１は、出力物オブジェクト４２２３Ａに印刷の終了を通知する（Ｓ３９７）。続いて出力要素オブジェクト４２２４Ａ−１は、出力束オブジェクト４２２５Ａ−１に当該出力要素（当該コピー面）の出力の終了を通知する（Ｓ３９９）。当該通知に応じ、出力束オブジェクト４２２５Ａ−１は、成果物オブジェクト４２１１Ａに当該出力束（当該ソート単位分のコピー面）の出力の終了を通知する（Ｓ４０１）。
【００７９】
続いて、出力リソースオブジェクト４２３２Ａは、２部目のソート１枚目を示す出力要素オブジェクト４２２４Ａ−２にリソースの使用許可を通知する（Ｓ４０３）。続いて、出力要素オブジェクト４２２４Ａ−２は、出力物オブジェクト４２２３Ａに出力の実行可否判断を要求する（Ｓ４０５）。出力物オブジェクト４２２３Ａは、ステップＳ３６３において入力物の入力の終了を通知されているので実行可能と判断し、その判断結果を出力要素オブジェクト４２２４Ａ−２に返却する。実行可能であることを示す判断結果が返却された場合、出力要素オブジェクト４２２４Ａ−２は、使用許可された出力リソース（印刷部１０５）を使用して印刷を実行する（Ｓ４０７）。印刷が終了すると、出力要素オブジェクト４２２４Ａ−２は、出力物オブジェクト４２２３Ａに印刷の終了を通知する（Ｓ４０９）。続いて出力要素オブジェクト４２２４Ａ−２は、出力束オブジェクト４２２５Ａ−２に当該出力要素（当該コピー面）の出力の終了を通知する（Ｓ４１１）。当該通知に応じ、出力束オブジェクト４２２５Ａ−２は、成果物オブジェクト４２１１Ａに当該出力束（当該ソート単位分のコピー面）の出力の終了を通知する（Ｓ４１３）。
【００８０】
続いて、出力リソースオブジェクト４２３２Ａは、３部目のソート１枚目を示す出力要素オブジェクト４２２４Ａ−３にリソースの使用許可を通知する（Ｓ４１５）。続いて、出力要素オブジェクト４２２４Ａ−３は、出力物オブジェクト４２２３Ａに出力の実行可否判断を要求する（Ｓ４１７）。出力物オブジェクト４２２３Ａは、ステップＳ３６３において入力物の入力の終了を通知されているので実行可能と判断し、その判断結果を出力要素オブジェクト４２２４Ａ−３に返却する。実行可能であることを示す判断結果が返却された場合、出力要素オブジェクト４２２４Ａ−３は、使用許可された出力リソース（印刷部１０５）を使用して印刷を実行する（Ｓ４１９）。印刷が終了すると、出力要素オブジェクト４２２４Ａ−３は、出力物オブジェクト４２２３Ａに印刷の終了を通知する（Ｓ４２１）。続いて出力要素オブジェクト４２２４Ａ−３は、出力束オブジェクト４２２５Ａ−３に当該出力要素（当該コピー面）の出力の終了を通知する（Ｓ４２３）。当該通知に応じ、出力束オブジェクト４２２５Ａ−３は、成果物オブジェクト４２１１Ａに当該出力束（当該ソート単位分のコピー面）の出力の終了を通知する（Ｓ４２５）。
【００８１】
以上によって、１枚の原稿の３部分のソートコピーが完了する。続いて、ドメインロジック層４２による処理手順を更に一般化して説明する。図１４は、第一の実施の形態においてコピージョブを実行する際のドメインロジック層における処理手順を説明するための汎用的なフローチャートである。すなわち、同図のフローチャートでは、原稿枚数、出力部数、印刷順（ソート又はスタック）等は特定されていない。同図のフローチャートの手順の特定の形態が図１１、図１２、及び図１３となる。図１４の括弧内のステップ番号は、図１１、図１２、又は図１３において対応するステップ番号を示す。
【００８２】
ジョブオブジェクト４１６Ａによって成果物オブジェクト４２１１Ａが生成され、ジョブの実行が要求されると（Ｓ５０１）、成果物オブジェクト４２１１Ａは、入力原稿の枚数のカウンタＮに１をセットし（Ｓ５０２）、Ｎ枚目（１枚目）の原稿に対する入力物オブジェクト４２２１Ａをメモリ内に生成する（Ｓ５０３）。ここで、成果物オブジェクト４２１１Ａには、ジョブ設定値がジョブオブジェクト４１６Ａによって設定される。ジョブ設定値には、例えば、出力部数や出力モード（ソート又はスタック等）が含まれている。
【００８３】
続いて、成果物オブジェクト４２１１Ａは、１枚目の入力物オブジェクト４２２１Ａに対応する出力物オブジェクト４２２３Ａをメモリ内に生成し、出力物オブジェクト４２２３Ａと入力物オブジェクト４２２１Ａとの関連を生成する（Ｓ５０４）。なお、成果物オブジェクト４２１１Ａは、自らに設定されているジョブ設定値のうち少なくとも出力に関係する設定値群（例えば、出力部数及び出力モード等）を生成された出力物オブジェクト４２２３Ａに設定する。以降において生成される出力物オブジェクト４２２３Ａについても同様である。
【００８４】
続いて、成果物オブジェクト４２１１Ａは、ジョブオブジェクト４１６Ａより設定されているジョブ設定値においてソートは指定されているか否かを判定する（Ｓ５０５）。ソートが指定されている場合（Ｓ５０５でＹｅｓ）、成果物オブジェクト４２１１Ａは、ジョブ設定値に指定されている出力部数分の出力束オブジェクト４２２５Ａを生成し、各出力束オブジェクト４２２５Ａをチェーン構造で出力順に従って関連付ける（Ｓ５０６）。なお、成果物オブジェクト４２１１Ａは、自らに設定されているジョブ設定値のうち少なくとも出力に関係する設定値群（例えば、出力部数及び出力モード等）を生成された出力束オブジェクト４２２５Ａに設定する。以降において生成される出力束オブジェクト４２２５Ａについても同様である。
【００８５】
続いて、成果物オブジェクト４２１１Ａは、生成された各出力束オブジェクト４２２５Ａに、Ｎ枚目に対応する出力物オブジェクト４２２３Ａを通知する（Ｓ５０７）。続いて、各出力束オブジェクト４２２５Ａは、自らに設定されている出力モードの値に基づいてソートが指定されていることを判定し、通知された出力物オブジェクト４２２３Ａよりソート単位内でＮ枚目に対応する出力要素オブジェクト４２２４Ａを一つ取得する（Ｓ５０８）。各出力束オブジェクト４２２５Ａは取得された順に出力要素オブジェクト４２２４Ａをチェーン構造で関連付ける。
【００８６】
続いて、成果物オブジェクト４２１１Ａは、Ｎ枚目に対応する入力物オブジェクト４２２１ＡにＮ枚目の原稿の入力を要求する（Ｓ５０９）。当該要求に応じ、入力物オブジェクト４２２１Ａは、Ｎ枚目の原稿に対応する読み取り画像（スキャン画像）に対応する原画像オブジェクト４２２２Ａをメモリ内に生成する（Ｓ５１０）。続いて、入力物オブジェクト４２２１Ａは、原画像オブジェクト４２２２ＡにＮ枚目の原稿の読み取りを実行させる（Ｓ５１０）。次の原稿が有る場合（Ｓ５１１でＹｅｓ）、成果物オブジェクト４２１１Ａは、カウンタＮをインクリメントし（Ｓ５１２）、Ｎ枚目の原稿に対する入力物オブジェクト４２２１Ａをメモリ内に生成する（Ｓ５１３）。続いて、成果物オブジェクト４２１１Ａは、Ｎ枚目の入力物オブジェクト４２２１Ａに対応する出力物オブジェクト４２２３Ａをメモリ内に生成し、出力物オブジェクト４２２３Ａと入力物オブジェクト４２２１Ａとの関連を生成する（Ｓ５１４）。続いて、ステップＳ５０７〜Ｓ５１０を繰り返す。
【００８７】
したがって、例えば、原稿が２枚で出力部数が３のコピーにおいてソートが指定されている場合、全ての原稿の読み取りを完了した時点での各オブジェクト間の関係は次のようになる。
【００８８】
図１５は、ソート指定の場合にインスタンス化されるドメインロジック層のオブジェクトの構成例を示す図である。
【００８９】
同図において、入力物オブジェクト４２２１Ａ−１及び出力物オブジェクト４２２３Ａ−１は１枚目の原稿に対応する。また、入力物オブジェクト４２２１Ａ−２及び出力物オブジェクト４２２３Ａ−２は２枚目の原稿に対応する。出力部数が３においてソートが指定されているため、三つの出力束オブジェクト４２２５Ａ−１、４２２５Ａ−２、及び４２２５Ａ−３がインスタンス化される。各出力束オブジェクト４２２５Ａは、ソート単位で出力要素オブジェクト４２２４Ａを束ねる。具体的には、各出力束オブジェクト４２２５Ａには、出力物オブジェクト４２２３Ａ−１及び４２２３Ａ−２のそれぞれより取得された二つの出力要素４２２４Ａが関連付けられる。なお、各出力束オブジェクト４２２５Ａは、ソート単位の順番に応じてチェーン構造で関連付けられる（図中の矢印が当該関連を示す。）。また、同一の出力束オブジェクト４２２５Ａに関連付けられている出力要素オブジェクト４２２４Ａ同士は、出力順（原稿の順番）に応じてチェーン構造で関連付けられる。なお、出力要素オブジェクト４２２４Ａの参照番号の枝番は、１０の桁はソート単位の順番を、１の桁が原稿の順番（１枚目、２枚目、・・・）を示す。
【００９０】
一方、ソートが指定されていない場合（Ｓ５０５でＮｏ）、成果物オブジェクト４２１１Ａは、スタックが指定されているか否かを判定する（Ｓ５１５）。スタックが指定されている場合（Ｓ５１５でＹｅｓ）、スタック用の読み取り処理が実行される（Ｓ５１６）。また、スタックが指定されていない場合（Ｓ５１５でＮｏ）、その他の（ソート及びスタックが指定されていない場合の）読み取り処理が実行される（Ｓ５１７）。
【００９１】
図１６は、スタック用の読み取り処理を説明するためのフローチャートである。ここで、スタックとは、例えば、２枚の原稿を３部コピーする場合、１、１、１、２、２、２という順番で出力が行われ（数字は、原稿のページ番号を示す。）、ページ別で束ねられるモードをいう。具体的には、「１、１、１」という束と「２、２、２」という束とが異なる排紙トレイに出力されたり、同一の出力トレイにずれて出力されたりする。
【００９２】
したがって、スタックが指定されている場合、成果物オブジェクト４２１１Ａは、Ｎ枚目の原稿に対応する出力束オブジェクト４２２５Ａをメモリ内に生成する（Ｓ５２１）。すなわち、スタックの場合は、原稿のページ数分（枚数分）の束が作成されるため、ページごとに出力束オブジェクト４２２５Ａが生成される。なお、成果物オブジェクト４２１１Ａは、各出力束オブジェクト４２２５Ａをその生成順にチェーン構造で関連付ける。
【００９３】
続いて、成果物オブジェクト４２１１Ａは、Ｎ枚目に対応する出力束オブジェクト４２２５Ａに、Ｎ枚目に対応する出力物オブジェクト４２２３Ａを通知する（Ｓ５２２）。続いて、当該出力束オブジェクト４２２５Ａは、自らに設定されている出力モードの値に基づいてスタックが指定されていることを判定し、通知された出力物オブジェクト４２２３Ａより出力部数分の出力要素オブジェクト４２２４Ａを取得する（Ｓ５２３）。したがって、３部であれば３つの出力要素オブジェクト４２２４Ａが取得される。出力束オブジェクト４２２５Ａは、取得された順に各出力要素オブジェクト４２２４Ａをチェーン構造で関連付ける。
【００９４】
続いて、成果物オブジェクト４２１１Ａは、Ｎ枚目に対応する入力物オブジェクト４２２１Ａに１枚目の原稿の入力を要求する（Ｓ５２４）。当該要求に応じ、入力物オブジェクト４２２１Ａは、Ｎ枚目の原稿に対応する読み取り画像（スキャン画像）に対応する原画像オブジェクト４２２２Ａをメモリ内に生成する（Ｓ５２５）。続いて、入力物オブジェクト４２２１Ａは、原画像オブジェクト４２２２ＡにＮ枚目の原稿の読み取りを実行させる（Ｓ５２６）。次の原稿が有る場合（Ｓ５２７でＹｅｓ）、成果物オブジェクト４２１１Ａは、カウンタＮをインクリメントし（Ｓ５２８）、Ｎ枚目の原稿に対する入力物オブジェクト４２２１Ａをメモリ内に生成する（Ｓ５２９）。続いて、成果物オブジェクト４２１１Ａは、Ｎ枚目の入力物オブジェクト４２２１Ａに対応する出力物オブジェクト４２２３Ａをメモリ内に生成し、出力物オブジェクト４２２３Ａと入力物オブジェクト４２２１Ａとの関連を生成する（Ｓ５３０）。続いて、ステップＳ５２１〜Ｓ５３０を繰り返す。
【００９５】
したがって、例えば、原稿が２枚で出力部数が３のコピーにおいてスタックが指定されている場合、全ての原稿の読み取りを完了した時点での各オブジェクト間の関係は次のようになる。
【００９６】
図１７は、スタック指定の場合にインスタンス化されるドメインロジック層のオブジェクトの構成例を示す図である。
【００９７】
同図に示されるように、スタックが指定されている場合は、原稿の枚数分の出力束オブジェクト４２２５Ａが生成される。各出力束オブジェクト４２２５Ａは、スタック単位で出力要素オブジェクト４２２４Ａを束ねる。具体的には、一つ目の出力束オブジェクト４２２５Ａ−１には、１枚目の原稿に対応する出力要素オブジェクト４２２４Ａが三つ（３出力部数分）関連付けられる。二つ目の出力束オブジェクト４２２５Ａ−２には、２枚目の原稿に対応する出力要素オブジェクト４２２４Ａが三つ（３出力部数分）関連付けられる。なお、出力要素オブジェクト４２２４Ａの参照番号の枝番は、１０の桁がスタック単位の順番を、１の桁が原稿のページ（何枚目か）を示す。
【００９８】
また、図１８は、その他の読み取り処理を説明するためのフローチャートである。ソート及びスタックのいずれもが指定されていない場合は、出力順はスタックの場合と同じであるが、ページ別の束は作成されない。例えば、２枚の原稿を３部コピーする場合、１、１、１、２、２、２という一つの束がコピー結果として出力される。
【００９９】
したがって、ソート及びスタックが指定されていない場合、成果物オブジェク４２１１Ａは、一つの出力束オブジェクト４２２５Ａを生成する（Ｓ５３１）。続いて、成果物オブジェクト４２１１Ａは、当該出力束オブジェクト４２２５Ａに、Ｎ枚目に対応する出力物オブジェクト４２２３Ａを通知する（Ｓ５３２）。続いて、当該出力束オブジェクト４２２５Ａは、自らに設定されている出力モードの値に基づいてソート及びスタックのいずれもが指定されていないことを判定し、通知された出力物オブジェクト４２２３Ａより出力部数分の出力要素オブジェクト４２２４Ａを取得する（Ｓ５３３）。したがって、３部であれば３つの出力要素オブジェクト４２２４Ａが取得される。出力束オブジェクト４２２５Ａは、取得された順に各出力要素オブジェクト４２２４Ａをチェーン構造で関連付ける。
【０１００】
続いて、成果物オブジェクト４２１１Ａは、Ｎ枚目に対応する入力物オブジェクト４２２１Ａに１枚目の原稿の入力を要求する（Ｓ５３４）。当該要求に応じ、入力物オブジェクト４２２１Ａは、Ｎ枚目の原稿に対応する読み取り画像（スキャン画像）に対応する原画像オブジェクト４２２２Ａをメモリ内に生成する（Ｓ５３５）。続いて、入力物オブジェクト４２２１Ａは、原画像オブジェクト４２２２ＡにＮ枚目の原稿の読み取りを実行させる（Ｓ５３６）。次の原稿が有る場合（Ｓ５３７でＹｅｓ）、成果物オブジェクト４２１１Ａは、カウンタＮをインクリメントし（Ｓ５３８）、Ｎ枚目の原稿に対する入力物オブジェクト４２２１Ａをメモリ内に生成する（Ｓ５３９）。続いて、成果物オブジェクト４２１１Ａは、Ｎ枚目の入力物オブジェクト４２２１Ａに対応する出力物オブジェクト４２２３Ａをメモリ内に生成し、出力物オブジェクト４２２３Ａと入力物オブジェクト４２２１Ａとの関連を生成する（Ｓ５４０）。続いて、ステップＳ５３１〜Ｓ５４０を繰り返す。
【０１０１】
したがって、例えば、原稿が２枚で出力部数が３部のコピーにおいてソート及びスタックが指定されていない場合、全ての原稿の読み取りを完了した時点での各オブジェクト間の関係は次のようになる。
【０１０２】
図１９は、ソート及びスタックが指定されていない場合にインスタンス化されるドメインロジック層のオブジェクトの構成例を示す図である。
【０１０３】
同図に示されるように、ソート及びスタックが指定されていない場合は、一つの出力束オブジェクト４２２５Ａに全ての出力要素オブジェクト４２２４Ａが関連付けられている。なお、出力要素オブジェクト４２２４Ａの参照番号の枝番は、原稿のページ（何枚目か）を示す。
【０１０４】
図１４に戻る。全ての原稿の読み取りが完了すると、ステップＳ５４１に進み、成果物オブジェクト４２１１Ａは、インスタンス化されている各出力束オブジェクト４２２５Ａに対してチェーン構造の順番で出力の実行を要求する（Ｓ５４１）。当該要求に応じ、各出力束オブジェクト４２２５Ａは、自らに関連付けられている各出力要素オブジェクト４２２４Ａにチェーン構造の順番で出力の実行を要求する（Ｓ５４２）。その結果、各出力要素オブジェクト４２２４Ａに対応する分のコピー面が印刷される（Ｓ５４３）。
【０１０５】
ソートが指定されている場合、図１５のオブジェクト構成に基づいてステップＳ５４１以降が実行される。したがって、例えば、２枚の原稿を３部コピーする場合、「１、２」といった束（ソート単位）が三つ出力される。
【０１０６】
また、スタックが指定されている場合、図１７のオブジェクト構成に基づいてステップＳ５４１以降が実行される。したがって、例えば、２枚の原稿を３部コピーする場合、「１、１、１」、「２、２、２」といった二つの束（スタック単位）が出力される。
【０１０７】
また、ソート及びスタックのいずれもが指定されていない場合、図１９のオブジェクト構成に基づいてステップＳ５４１以降が実行される。したがって、例えば、２枚の原稿を３部コピーする場合、「１、１、１、２、２、２」といった一つの束が出力される。
【０１０８】
上述したように、第一の実施の形態において、ドメインロジック層４２による処理内容は、アプリケーション６０からは隠蔽される。すなわち、ドメインロジック層４２の各クラスは、アプリケーション６０から直接呼び出されることはない。したがって、複合機１の内部的なソフトウェア構成をサードベンダー等に公開する必要はない。よって、複合機１の開発ベンダーの技術流出を適切に防止することができる。
【０１０９】
また、ドメインロジック層４２は、出力束オブジェクト４２２５Ａによる出力要素オブジェクト４２２４Ａの束ね方を変化させることによって、ソート指定、スタック指定に応じた出力順の制御を行っている。したがって、柔軟性が高くシンプルな構成が実現されている。斯かる構成によれば、保守性や機能拡張性を向上させることができる。
【０１１０】
ところで、第一の実施の形態では、出力面に対してページ番号等の印字画像を合成する機能（印字画像合成機能）については言及されていない。印字画像合成機能とは、出力面に対して、ページ印字（ページ番号）、スタンプ印字、日付印字等の画像を合成する機能をいう。印字画像合成機能は、出力面に対して固有の情報を付与する機能であり、複合機１の利便性向上の観点からは非常に重要な機能である。なお、印字画像合成機能において合成される画像は、ユーザによって設定可能とされている。
【０１１１】
以下、ドメインロジック層４２を印字画像合成機能に対応させた例として、第二の実施の形態を説明する。
【０１１２】
図２０は、第二の実施の形態におけるドメインロジック層のクラス構成例を示す図である。図２０中、図４と同一クラスには同一符号を付している。なお、同図では、便宜上、要求管理部４２１、Ｉ／Ｏファンクション部４２２、及びＩ／Ｏリソース管理部４２３のみが示されている。ここでは、図４との差分についてのみ説明する。
【０１１３】
同図において、Ｉ／Ｏファンクション部４２２は、印字画像クラス４２２６を含む。印字画像クラス４２２６は、印字画像合成機能を実現するための責務を担う。印字画像クラス４２２６は、出力物クラス４２２３と関連を有する。印字画像クラス４２２６のインスタンス（印字画像オブジェクト）は、出力物オブジェクトによってインスタンス化され、出力物オブジェクトからの要求に応じて印字画像合成処理等を実行する。
【０１１４】
また、出力物クラス４２２３には、印字画像合成機能に関する属性及びメソッドが追加されている。例えば、出力物クラス４２２３には、「組み合わせ条件」属性、「重なり条件」属性、「組み合わせモード」属性、「重なりモード」属性、「優先順位」属性、及び「描画フラグ」属性等が追加されている。各属性の値は、例えば、出力物オブジェクトが生成される際に、ＨＤＤ等に永続化されている設定ファイル等より読み込まれる。なお、各属性の意味については後述する。また、新たに追加されたメソッドについては、シーケンス図を用いて説明する。
【０１１５】
以下、第二の実施の形態の複合機１の処理手順について説明する。図２１及び図２２は、第二の実施の形態のドメインロジック層における処理手順を説明するためのシーケンス図である。図２１及び図２２では、図１１〜図１３において説明した処理手順と異なる部分について説明する。図２１中、図１１と同一ステップには同一ステップ番号を付し、その説明は適宜省略する。また、図２２中、図１３と同一ステップには同一ステップ番号を付し、その説明は適宜省略する。
【０１１６】
図２１のステップＳ３０７において生成された出力物オブジェクト４２２３Ａは、ジョブ設定値に印字画像合成機能に関する設定情報が含まれている場合、当該設定情報に応じた個数の印字画像オブジェクト４２２６Ａを生成する。出力物オブジェクト４２２３Ａは、生成した印字画像オブジェクト４２２６Ａを自ら（出力物オブジェクト４２２３Ａ）に関連付ける。ここでは、２種類の印字画像の合成が設定情報において指定されていることとする（すなわち、ジョブの開始前にオペレーションパネル１０２を介してユーザによって二種類の画像が指定されていることとする）。したがって、出力物オブジェクト４２２３Ａは、二つの印字画像オブジェクト４２２６Ａ−１及び４２２６Ａ−２をメモリ内に生成する（Ｓ３０８−１、Ｓ３０８−２）。なお、印字画像オブジェクト４２２６Ａの生成の際に、当該印字画像オブジェクト４２２６Ａに対して画像データ（印字画像）がジョブ設定値に基づいて関連付けられる。また、関連付けられた印字画像の属性情報が、印字画像オブジェクト４２２６Ａの属性（印字種類、座標、高さ、幅）の値として設定される。
【０１１７】
その後、ステップＳ３９３までは、第一の実施の形態（図１１、図１２、及び図１３）と同様の処理が実行される。
【０１１８】
図２２のステップＳ３９３において、出力要素オブジェクト４２２４Ａ−１は、出力物オブジェクト４２２３Ａに出力の実行可否判断を要求する。出力物オブジェクト４２２３Ａは、当該要求に応じて印字画像合成処理の実行の要否を判定する。例えば、自らに印字画像オブジェクト４２２６Ａが関連付いていない場合、出力物オブジェクト４２２３Ａは、印字画像合成処理は不要であると判定する。この場合、図１３において説明した通り、出力物オブジェクト４２２３Ａは、入力物の入力の終了を通知されているので出力は実行可能と判断し、その判断結果を出力要素オブジェクト４２２４Ａ−１に返却する。
【０１１９】
一方、自らに印字画像オブジェクト４２２６Ａが関連付いている場合、出力物オブジェクト４２２３Ａは、印字画像合成処理は必要であると判定する。この場合、ステップＳ３９４−１以降が実行される。
【０１２０】
ステップＳ３９４−１において、出力物オブジェクト４２２３Ａは、自らの「印字画像が複数か判定する」メソッドを呼び出し、複数の印字画像が合成対象とされているか否かを判定する。合成対象の印字画像の数は、印字画像オブジェクト４２２６Ａの数に一致する。したがって、複数の印字画像オブジェクト４２２６Ａが関連付いている場合、出力物オブジェクト４２２３Ａは、印字画像は複数であると判定する。
【０１２１】
印字画像オブジェクト４２２６Ａが一つである場合、出力物４２２３Ａは、ステップＳ３９４−２〜Ｓ３９３−３を実行することなく、当該印字画像オブジェクト４２２６Ａの「描画する」メソッドを呼び出し、印字画像の合成の要求を行う（Ｓ３９４−４）。
【０１２２】
本実施の形態のように複数の印字画像オブジェクト４２２６Ａが存在する場合、出力物オブジェクト４２２３Ａは、自らの「印字画像の組み合わせ判定する」メソッドを呼び出し、複数（二つ）の印字画像オブジェクト４２２６Ａに係る印字画像の組み合わせの可否を判定するための処理を実行する（Ｓ３９４−２）。「印字画像の組み合わせ判定する」メソッド内において、出力物オブジェクト４２２３Ａは、印字画像オブジェクト４２２６Ａ−１及び４２２６Ａ−２のそれぞれの「印字種類を取得する」メソッドを呼び出す（Ｓ３９４−２１、Ｓ３９４−２２）。各印字画像オブジェクト４２２６Ａは、自らの「印字種類」属性の値を返却する。なお、「印字種類」とは、印字画像の用途によって区別される種類（ページ印字、日付印字、スタンプ印字等）を示す。
【０１２３】
出力物オブジェクト４２２３Ａは、各印字画像オブジェクト４２２６Ａより返却された印字種類の値と、自らの「組み合わせ条件」属性とに基づいて、二つの印字画像の組み合わせの可否を判定する。
【０１２４】
図２３は、組み合わせ条件の構成例を示す図である。同図に示されるように、組み合わせ条件は、印字種類ごとに、他の印字種類との組み合わせの可否が記録された情報である。出力物オブジェクト４２２３Ａは、係る組み合わせ条件に基づいて、二つの印字画像の組み合わせの可否を判定する。
【０１２５】
なお、組み合わせ条件は、必ずしもテーブル形式でなくてもよい。例えば、各組み合わせが各ビットに割り当てられたビット配列等でもよい。
【０１２６】
組み合わせが可能であると判定された場合、出力物オブジェクト４２２３Ａは、ステップＳ３９４−２３及びＳ３９４−２４を実行することなく、後述するステップＳ３９４−３に進む。
【０１２７】
組み合わせが不可能であると判定された場合、出力物オブジェクト４２２３Ａは、自らの「ユーザに設定させるか判定する」メソッドを呼び出す（Ｓ３９４−２３）。「ユーザに設定させるか判定する」メソッド内において、出力物オブジェクト４２２３Ａは、組み合わせモードをユーザに設定させるか否かを判定する。組み合わせモードとは、組み合わせが不可能な印字画像が合成対象として選択された場合の対処方法をいう。本実施の形態において、組み合わせモードには優先モードとキャンセルモードとがある。優先モードは優先度の高い印字画像を描画（合成）するモードである。キャンセルモードは全ての印字画像を描画しないモードである。
【０１２８】
なお、ユーザに設定させるか否かの判定内容は、出力物クラス４２２３の実装クラスにおいて固定的に実装されていてもよいし、ＨＤＤ１３３等に永続化されている設定ファイル等に基づいて行われるものであってもよい。
【０１２９】
ユーザに設定させないと判定した場合、出力物オブジェクト４２２３Ａは、自らの「組み合わせモードを判断する」メソッドを呼び出す（Ｓ３９４−２４）。「組み合わせモードを判断する」メソッド内において、出力物オブジェクト４２２３Ａは、自らの「組み合わせモード」属性の値に基づいて組み合わせモードが優先モードであるかキャンセルモードであるかを判定する。「組み合わせモード」属性の値が優先モードを示す場合、出力物オブジェクト４２２３Ａは、自らの「優先順位」属性の値に基づいて、複数の印字種類の優先順位を判定する。すなわち、「優先順位」属性には、印字種類の優先順位が値として記録されている。例えば、印字画像オブジェクト４２２６Ａ−２の印字種類の方が優先度は低いと判定した場合、出力物オブジェクト４２２３Ａは、印字画像オブジェクト４２２６Ａ−２の「印字不能を設定する」メソッドを呼び出す（Ｓ３９４−２５）。印字画像オブジェクト４２２６Ａ−２は、自らの「印字可否」属性の値をＦａｌｓｅに設定する。「印字可否」属性は、値としてＴｒｕｅ又はＦａｌｓｅをとり、印字画像の合成の可否を示す。当該値の初期値はＴｒｕｅである。
【０１３０】
一方、組み合わせモードをユーザに設定させると判定した場合、出力物オブジェクト４２２３Ａは、ステップＳ３９４−２４の代わりに、組み合わせモードをユーザに選択させるための処理を実行する。例えば、出力物オブジェクト４２２３Ａは、組み合わせモード選択画面をオペレーションパネル１０２に表示させ、組み合わせモード選択画面を介して組み合わせモードを選択させる。厳密には、出力物オブジェクト４２２３Ａは、オペレーションパネル１０２の表示制御を行う非図示のクラスのインスタンス（以下、「ＵＩオブジェクト」という。）に対し、組み合わせモード選択画面の表示を要求する。ＵＩオブジェクトは、組み合わせモード選択画面における選択結果を出力物オブジェクト４２２３Ａに通知する。出力物オブジェクト４２２３Ａは、選択結果に応じて、ステップＳ３９４−２５に相当する処理を実行する。
【０１３１】
「印字画像の組み合わせを判定する」より復帰すると、出力物オブジェクト４２２３Ａは、自らの「印字画像の重なりを判定する」メソッドを呼び出す（Ｓ３９４−３）。「印字画像の重なりを判定する」メソッド内において、出力物オブジェクト４２２３Ａは、各印字画像オブジェクト４２２６の「座標を取得する」メソッド、「高さを取得する」メソッド、及び「幅を取得する」メソッドを呼び出す（Ｓ３９４−３１〜Ｓ３９４−３６）。各印字画像オブジェクト４２２６Ａは、それぞれの「座標」属性の値、「高さ」属性の値、及び「幅」属性の値を返却する。「座標」属性の値は、印字画像を合成させる位置の座標である。「高さ」属性の値及び「幅」属性の値は、印字画像の高さ又は幅である。
【０１３２】
出力物オブジェクト４２２３Ａは、各印字画像オブジェクト４２２６Ａより取得された座標、高さ、及び幅と、自らの「重なり条件」属性とに基づいて、二つの印字画像を印刷物に合成した場合に重なるか否か（印字画像間の重畳の有無）を判定する。「重なり条件」属性には、二つの印字画像が重なっている場合を示す条件が値として記録されている。例えば、「二つの印字画像の少なくともいずれか一方の頂点が他方の印字画像の領域に含まれていること」が重なり条件とされる。当該重なり条件に基づく判定例を図２４及び図２５に示す。
【０１３３】
図２４は、二つの印字画像は重なると判定される例を示す図である。同図において（１）は、印字画像１の一つの頂点と印字画像２の一つの頂点とが他方の印字画像の領域に含まれている例である。（２）は、印字画像１の４つの頂点が印字画像２に含まれている例である。（３）は、印字画像２の４つの頂点が印字画像１に含まれている例である。
【０１３４】
また、図２５は、二つの印字画像は重ならないと判定される例を示す図である。同図において（１）は、印字画像１と印字画像２とにおいて接している箇所は無い例である。（２）は、印字画像１の頂点と印字画像２の頂点とが接している例である。（３）は、印字画像１の辺と印字画像２の辺とが接している例である。
【０１３５】
なお、各印字画像の各頂点の座標等は、各印字画像オブジェクト４２２６Ａより取得された座標、高さ、及び幅に基づいて算出される。
【０１３６】
例えば、図２６は、印字画像の各頂点の座標の算出例を示す図である。同図では、印字画像の座標は、左下頂点と一致する例が示されている。この場合、印字画像１の座標は（Ｘ１、Ｙ１）であり、高さはＨ１であり、幅はＬ１であるとすると、左上の頂点は（Ｘ１，Ｙ１＋Ｈ１）、右上の頂点は（Ｘ１＋Ｌ１，Ｙ１＋Ｈ１）、右下の頂点は（Ｘ１＋Ｌ１，Ｙ１）として求まる。同様に、印字画像２の座標は（Ｘ２、Ｙ２）であり、高さはＨ２であり、幅はＬ２であるとすると、左上の頂点は（Ｘ２，Ｙ２＋Ｈ２）、右上の頂点は（Ｘ２＋Ｌ２，Ｙ２＋Ｈ２）、右下の頂点は（Ｘ２＋Ｌ２，Ｙ２）として求まる。
【０１３７】
印字画像は重ならないと判定すると、出力物オブジェクト４２２３Ａは、ステップＳ３９４−３７〜Ｓ３９４−３９を実行せずに、ステップＳ３９４−４及びＳ３９４−５を実行する。すなわち、ステップＳ３９４−４及びＳ３９４―５において、出力物オブジェクト４２２３Ａは、各印字画像オブジェクト４２２６Ａの「描画する」メソッドを呼び出す。各印字画像オブジェクト４２２６Ａは、自らに関連付けられている印字画像を、出力物オブジェクト４２２３Ａに関連付けられている入力物オブジェクト４２２１Ａが保持する画像データ（図１２のステップＳ３５７において読み取られた画像データ）に合成する（重畳させる）。したがって、同一の画像データ（出力面）に対して各印字画像が合成される。合成処理において、印字画像の位置は、印字画像オブジェクト４２２６Ａの「座標」属性の値によって決定される。但し、「印字可否」属性の値がＦａｌｓｅである印字画像オブジェクト４２２６Ａは、「描画する」メソッドを呼び出されても印字画像の合成処理は行わない。
【０１３８】
一方、印字画像は重なると判定すると、出力物オブジェクト４２２３Ａは、自らの「ユーザに設定させるか判定する」メソッドを呼び出し、重なりモードをユーザに設定させるか否かを判定する（Ｓ３９４−３７）。重なりモードとは、印字画像が重なる場合の対処方法をいう。本実施の形態において、重なりモードには優先モード、キャンセルモード、及び座標設定モードの三つのモードがある。優先モードは優先度の高い印字画像のみを描画（合成）するモードである。キャンセルモードは全ての印字画像を描画しないモードである。座標設定モードは印字画像を重ならない位置に配置するモードである。
【０１３９】
なお、ユーザに設定させるか否かの判定内容は、出力物クラス４２２３の実装クラスにおいて固定的に実装されていてもよいし、ＨＤＤ１３３等に永続化されている設定ファイル等に基づいて行われるものであってもよい。
【０１４０】
ユーザに設定させないと判定した場合、出力物オブジェクト４２２３Ａは、自らの「重なりモードを判断する」メソッドを呼び出す（Ｓ３９４−３８）。「重なりモードを判断する」メソッド内において、出力物オブジェクト４２２３Ａは、自らの「重なりモード」属性の値に基づいて重なりモードを判定する。「重なりモード」属性の値が座標設定モードを示すものである場合、出力物オブジェクト４２２３Ａは、重なっている印字画像に係る印字画像オブジェクト４２２６Ａのいずれかの「座標位置を設定する」を呼び出すことにより、当該印字画像オブジェクト４２２６Ａの「座標」属性を変更させる（Ｓ３９４−３９）。座標の変更方法は特定のものに限定されず、印字画像の重なりが解消されればよい。
【０１４１】
例えば、図２７は、印字画像の重なりを解消させるための座標の変更例を示す図である。同図において、（１）は、二つの印字画像が重なっている様子が示されている。（２）は、（１）においてＸ座標が大きい方の印字画像を他方の印字画像と重ならないように右方向へずらした例を示す。すなわち、同図では、印字画像２のＸ座標（Ｘ２）は、印字画像１のＸ座標（Ｘ１）より大きい。したがって、印字画像２のＸ座標の値を、印字画像１の右側のＸ座標の値（Ｘ１＋Ｌ１）とすることにより、二つの印字画像の重なりを解消している。
【０１４２】
図２７における印字画像１を印字画像オブジェクト４２２６Ａ−１に係る印字画像とし、印字画像２を印字画像オブジェクト４２２６Ａ−２に係る印字画像とすると、出力物オブジェクト４２２３Ａは、座標（Ｘ１＋Ｌ１，Ｙ２）を引数として印字画像オブジェクト４２２６Ａ−２の「座標位置を設定する」を呼び出す（Ｓ３９４−３９）。印字画像オブジェクト４２２６Ａ−２は、自らの「座標」属性に（Ｘ１＋Ｌ１，Ｙ２）を設定する。
【０１４３】
続くステップＳ３９４−４及びＳ３９４−５では、上述した処理が実行される。
【０１４４】
上記した印字画像合成処理が終了すると、出力物オブジェクト４２２３Ａは、図１２のステップＳ３６３において入力物の入力の終了を通知されているので出力は実行可能と判断し、その判断結果を出力要素オブジェクト４２２４Ａ−２に返却する（Ｓ３９４−６）。ステップＳ３９５以降は、図１３において説明した通りである。但し、第二の実施の形態では、ステップＳ３９５における印刷結果（出力面）には、印字画像が合成されている。
【０１４５】
なお、出力物オブジェクト４２２３Ａは、一回の印字画像の合成処理が終了すると「描画フラグ」属性の値をＴｒｕｅとする。「描画フラグ」属性は、印字画像合成処理を行ったか否かを示すフラグ情報であり、その初期値はＦａｌｓｅである。出力物オブジェクト４２２３Ａは、出力要素オブジェクト４２２４Ａより出力の実行可否判断を要求されたとき（Ｓ３９３、Ｓ４０５、Ｓ４１７等）に、「描画フラグ」属性の値がＦａｌｓｅであれば印字画像合成処理を行い、「描画フラグ」属性の値がＴｒｕｅであれば印字画像合成処理は行わない。したがって、ステップＳ４０５及びＳ４１７のタイミングでは、出力物オブジェクト４２２３Ａは、印字画像合成処理は行わない。斯かる動作仕様はメモリの消費量の抑制の観点において有効である。但し、各タイミング（Ｓ３９３、Ｓ４０５、Ｓ４１７等）において毎回印字画像合成処理を実行するようにしてもよい。この場合、全ての出力要素に対して印字画像が合成される。
【０１４６】
続いて、図２８は、第二の実施の形態においてコピージョブを実行する際のドメインロジック層における処理手順を説明するための汎用的なフローチャートである。図２８中、図１４と同一ステップには同一ステップ番号を付し、その説明は省略する。
【０１４７】
図２８では、ステップＳ５４２−１が追加されている。すなわち、出力要素オブジェクト４２２４Ａに対応する出力要素（印刷面）が印刷される前に、ステップＳ５４２−１において、上記ステップＳ３９４−１〜Ｓ３９４−５において説明した印字画像合成処理が実行される。
【０１４８】
また、図２９は、印字画像合成処理を説明するためのフローチャートである。同図は、図２２において説明した処理手順をフローチャートとして表現したものである。したがって、図２９中、図２２と同一ステップには同一ステップ番号を付し、その説明は省略する。また、同一ステップ番号が付されていないステップについても、その内容は図２２において説明している。したがって、ここでは、同一ステップ番号が付されていないステップについて、図２２との対応を明確とするための説明を行う。
【０１４９】
ステップＳ３９４−０は、出力物オブジェクト４２２３Ａが「描画フラグ」属性の値に基づいて、印字画像の合成処理を既に行ったか否かを判定するステップである。
【０１５０】
ステップＳ３９４−２３１及びステップＳ３９４−３７１は、組み合わせモード又は重なりモードをユーザに設定させる処理を一つのステップとして表現したものである。
【０１５１】
ステップＳ３９４−３８は、重なりモードが優先モードである場合、優先度の低い印字種類に係る印字画像オブジェクト４２２６Ａの「印字不能を設定する」メソッドを呼び出す処理である。
【０１５２】
上述したように、第二の実施の形態によれば、ＭＦＰプロファイル４０において印字画像合成機能を実現することができる。よって、ＭＦＰプロファイル４０上に実装されるアプリケーションの利便性を向上させることができる。
【０１５３】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【０１５４】
１          複合機
２０        ＯＳ
２１        ドライバプログラム
３０        ＪＶＭ
３１        ＣＤＣ
３２        Ｆｏｕｎｄａｔｉｏｎ  Ｐｒｏｆｉｌｅ
４０        ＭＦＰプロファイル
４１        プレゼンテーション層
４２        ドメインロジック層
４３        サービス層
５０        ネイティブモジュール
６０        アプリケーション
６１        プリントアプリ
６２        コピーアプリ
６３      スキャンアプリ
６４        ＦＡＸアプリ
１０１      コントローラ
１０２      オペレーションパネル
１０３      ファクシミリコントロールユニット
１０４      撮像部
１０５      印刷部
１１１      ＣＰＵ
１１２      ＡＳＩＣ
１２１      ＮＢ
１２２      ＳＢ
１３１      ＭＥＭ−Ｐ
１３２      ＭＥＭ−Ｃ
１３３      ＨＤＤ
１３４      メモリカードスロット
１３５      メモリカード
１４１      ＮＩＣ
１４２      ＵＳＢデバイス
１４３      ＩＥＥＥ１３９４デバイス
１４４      セントロニクスデバイス
４１１      サービス検索クラス
４１２      入出力形式クラス
４１３      要求属性値群クラス
４１４      サービスクラス
４１５      ドキュメントクラス
４１６      ジョブクラス
４２１      要求管理部
４２２      Ｉ／Ｏファンクション部
４２３      Ｉ／Ｏリソース管理部
４２４      システム管理部
４１４１      サービス属性値群クラス
４１５１      ドキュメント属性値群クラス
４１６１    ジョブ属性値群クラス
４２１１    成果物クラス
４２２１    入力物クラス
４２２２    原画像クラス
４２２３    出力物クラス
４２２４    出力要素クラス
４２２５    出力束クラス
４２２６    印字画像クラス
４２３１    入力リソースクラス
４２３２    出力リソースクラス
４２４１    機内監視クラス
【先行技術文献】
【特許文献】
【０１５５】
【特許文献１】特開２００７−３２５２５１号公報
【図１】
2010283617.tif 000003
【図２】
2010283617.tif 000004
【図３】
2010283617.tif 000005
【図４】
2010283617.tif 000006
【図５】
2010283617.tif 000007
【図６】
2010283617.tif 000008
【図７】
2010283617.tif 000009
【図８】
2010283617.tif 000010
【図９】
2010283617.tif 000011
【図１０】
2010283617.tif 000012
【図１１】
2010283617.tif 000013
【図１２】
2010283617.tif 000014
【図１３】
2010283617.tif 000015
【図１４】
2010283617.tif 000016
【図１５】
2010283617.tif 000017
【図１６】
2010283617.tif 000018
【図１７】
2010283617.tif 000019
【図１８】
2010283617.tif 000020
【図１９】
2010283617.tif 000021
【図２０】
2010283617.tif 000022
【図２１】
2010283617.tif 000023
【図２２】
2010283617.tif 000024
【図２３】
2010283617.tif 000025
【図２４】
2010283617.tif 000026
【図２５】
2010283617.tif 000027
【図２６】
2010283617.tif 000028
【図２７】
2010283617.tif 000029
【図２８】
2010283617.tif 000030
【図２９】
2010283617.tif 000031