以下、本願発明を実施するための最良の形態について図面を用いて説明する。
図1は、画像形成装置401の主要部の構成の例を示すブロック図である。画像形成装置401はコントローラユニット100を含み、コントローラユニット100には、画像入力デバイスであるスキャナ170や画像出力デバイスであるプリンタ195が接続されるとともに、操作部112が接続される。コントローラユニット100は、スキャナ170で読み取られた画像データをプリンタ195により印刷出力するコピー機能を実現するための制御を行う。
CPU101は、ROM103に格納されているブートプログラムによりオペレーションシステム(OS)を立ち上げる。CPU101は、このOS上で、ストレージ104に格納されているプログラムを実行し、これによって各種処理を実行する。RAM102はCPU101の作業領域として用いられる。RAM102は、作業領域を提供するとともに、画像データを一時記憶するための画像メモリ領域を提供する。ストレージ104は、プログラムや画像データを格納する。
CPU101には、システムバス107を介して、ROM103およびRAM102が接続される。さらに、CPU101には操作部I/F(インターフェース)106、ネットワークI/F(インターフェース)110、USBホストI/F113、画像バスI/F(インターフェース)105が接続される。操作部I/F106は、タッチパネルを有する操作部112とのインターフェースであり、操作部112に表示すべき画像データを操作部112に対して出力する。また、操作部I/F106は、操作部112においてユーザにより入力された情報をCPU101に送出する。ネットワークI/F110は、画像形成装置をLANに接続するためのインターフェースである。
USBホストI/F113は、USBストレージ114と通信するインターフェース部である。USBホストI/F113は、ストレージ104に格納されているデータをUSBストレージ114に記憶させるための出力部である。また、USBホストI/F113は、USBストレージ114に格納されているデータを入力し、CPU101にそれを伝える。USBストレージ114は、データを格納する外部記憶装置であり、USBホストI/F113に対して着脱可能である。USBホストI/F113には、USBストレージ114を含む複数のUSBデバイスが接続可能である。
RTC115は、現在時刻を制御する。このRTC115で制御する時刻情報はジョブ投入時間の記録などに利用される。
画像バスI/F105は、システムバス107と、画像データを高速で転送する画像バス108とを接続し、データ形式を変換するためのバスブリッジである。画像バス108は、PCIバスまたはIEEE1394等によって構成される。画像バス108上には、デバイスI/F120、スキャナ画像処理部180、プリンタ画像処理部190が設けられる。デバイスI/F120には、スキャナ170およびプリンタ195が接続され、デバイスI/F120は、画像データの同期系/非同期系の変換を行う。スキャナ画像処理部180は、入力画像データに対し補正、加工、編集を行う。プリンタ画像処理部190は、プリント出力画像データに対してプリンタ195に応じた補正、解像度変換などを行う。
図2は、画像形成装置の拡張アプリケーションの実行環境を示すソフトウェアブロック図である。本実施例において、拡張アプリケーションとは、コピーやファクス、プリントといった画像形成装置の基本機能以外の機能を実現するためのアプリケーションである。たとえば、ユーザが指定した時刻にユーザにより設定されたアドレスやフォルダパス、ファイルパスにアクセスし、当該アドレスやフォルダパス、ファイルパスで特定されるデータをダウンロードして印刷する機能などである。
図2の各モジュールは、CPU101がストレージ104に記憶されているプログラムをRAM102にロードし、プログラムを実行することで実現される。
オペレーティングシステムであるOS201では、プリンタやFAX、スキャナと言った画像処理ユニットを制御するためのネイティブプログラム210が動作する。さらに、OS201では、拡張アプリケーションの実行環境である仮想マシン(Virtual Machine:VM)230が動作する。VM230は、拡張アプリケーションを制御するプログラムを理解し実行するモジュールである。拡張アプリケーションは、VM230上で動作する。
VM230で動作するプログラムは、CPU101で動作するコマンドとは異なり、VM230専用のコマンドで動作する。このコマンドをバイトコードと呼ぶ。一方でCPU専用のコマンドをネイティブコードと呼ぶ。VMには、バイトコードをそのまま逐次解釈処理するタイプと、バイトコードをネイティブコードに変換して実行するタイプがある。この実施例のVM230は前者のタイプであるが、後者のタイプであってもよい。一般的にCPUの種別が異なると、他のCPUで動作する命令を使うことができない様に、VMでも異なるVMを動作させるための命令を使うことはできない。またこの実施例のVM230は、CPU101上で動作するソフトウェアモジュールであるが、ハードウェアモジュールであってもよい。
ネイティブプログラム210内には、プリンタやFAX、スキャナと言った画像処理ユニットを制御するためのネイティブスレッド214と、仮想マシン230を動かすためのVMスレッド215がある。VMスレッドはVM230の数に対応する数存在する。ここでは、211、212,213の3つのスレッドが生成されている。
VMシステムサービス220は、拡張アプリケーションから共通利用されるユーティリティライブラリである。拡張アプリケーション240からVMシステムサービス220の機能を呼び出すことにより、拡張アプリケーションを開発する手間を省く、または画像形成装置の各モジュールへアクセスすることができる。VMシステムサービス220には、VMとして最低限動作させる標準VMシステムサービス221と、画像形成装置の各モジュールにアクセスや、OSの機能を提供する拡張VMシステムサービス222がある。標準VMシステムサービス221は、拡張アプリケーションをロードする機能も含む。VMシステムサービス220は、VM230が拡張アプリケーション内のバイトコードで指示されているAPIを実行することで、APIに関連づけられているVMシステムサービス220が呼び出される。
VM230は、拡張アプリケーション240を実行する。VM230は、拡張アプリケーションのスレッド毎に生成される。この図では拡張アプリケーションA241で2つのスレッドを動かすためのVM A−1 231と、VM A−2 232、拡張アプリケーションB242で1つのスレッドを動かすためのVM B−1が生成されている。
なお、図2に示す拡張アプリケーションの起動は以下の方法でおこなわれる。画像形成装置のメインメニュー画面に表示された拡張アプリケーションのアイコンをユーザが選択したことを、操作部112を通じて操作部I/F106が検知する。そして、操作部I/F106が、拡張アプリケーションのアイコンが選択されたことをCPU101に通知する。CPU101は、操作部I/F106からの通知に基づき、ユーザによって選択された拡張アプリケーションを起動する。
図3は、本実施例の画像形成装置のCPU101上で動作するソフトウェアモジュールの構成図である。図3に示すモジュールは、図2に示すネイティブスレッド214が実行する処理を行うモジュールである。
サーブレットサービス304は、ネットワークI/F110を通してHTTPアクセスされた際に、そのリクエストを受け付け、各モジュール(アプリケーション管理部302か標準機能制御部301)に処理を振り分けるモジュールである。
UI制御部303は、操作部112に画面を表示し、ユーザからの操作を受け付けて、その操作情報を適切なモジュール(アプリケーション管理部302か標準機能制御部301)に通知するモジュールである。
アプリケーション管理部302は、拡張アプリケーションのインストールや起動等の管理を行うモジュールである。
アプリケーション実行制御部305は、アプリケーション管理部302で起動されたアプリケーションの実行制御を行うモジュールである。具体的には、VMスレッド215、VMシステムサービス220、VM230、拡張アプリケーション240を制御する。
ストレージ制御部306は拡張アプリケーション240のプログラムや設定情報を記録するモジュールである。
アプリケーション実行制御部305は、ストレージ制御部306にアクセスして拡張アプリケーションのプログラムを読み出す。
各モジュールは、ストレージ制御部306にアクセスし、設定値の参照、設定を行う。
標準機能制御部301は、画像形成装置の標準機能であるコピーやFAXの制御や、その他の画像成形装置に必要な制御(例えばUSBホストパスI/F113の制御)を行うモジュールである。
タイマー管理部307は、RTC115から現在時刻情報を取得し、規定の時刻が経過したことを検知し、アプリケーション管理部302に通知する。アプリケーション管理部302は、タイマー管理部307から通知を受け、アプリケーションのタイマー処理の実行をアプリケーション実行制御部305に依頼する。
図4は、本実施例の画像形成装置を含む印刷システムの構成の例を示す図である。この印刷システムは画像形成装置401、ホストPC402、サーバ403、イーサネット(登録商標)404によって構成される。
画像形成装置401には、イーサネット404経由で、ホストPC402から拡張アプリケーションがインストールされる。ホストPC402は、拡張アプリケーションのインストールデータを有しており、画像形成装置401が提供する拡張アプリケーションのインストール手段を用いて画像形成装置401に拡張アプリケーションをインストールする。サーバ403は、印刷する画像データを有しており、画像形成装置401からの画像データ取得要求を受けて、画像データを画像形成装置401に送信する。
本実施例において、画像形成装置401にインストールされる拡張アプリケーションは、ユーザが指定した時刻にサーバ403の指定されたフォルダにアクセスし、印刷データを取得し、当該印刷データに基づく印刷を実行するアプリケーションである。なお、本アプリケーションによる印刷はユーザがメインメニューから当該拡張アプリケーションのアイコンを選択し、実行を指示した場合にも実行される。
初めに、画像形成装置401に拡張アプリケーションをインストールする手順を説明する。図5は、ホストPC402が有する拡張アプリケーションのインストールデータを、画像形成装置401にインストールする際の処理をしめすシーケンス図である。当該処理は、ホストPC402が画像形成装置401にアクセスすることで開始される。
まずS501において、ホストPC402は、画像形成装置に対して認証要求を送信する。ホストPC402は、Webブラウザ機能等を利用し、画像形成装置401にアクセスする。そして、画像形成装置401が提供する認証画面に必要な情報(たとえば、ユーザID,パスワード)を入力し、送信する。これにより、認証要求と、認証に必要な情報が画像形成装置401に送信される。
S502で認証要求を受けたサーブレットサービス304は、受信した認証情報に基づく認証を行いホストPC402に応答する。S502において、サーブレットサービス304は受信した認証情報を不図示の認証用モジュールに渡し、認証用モジュールから認証結果を受け取る。そして、サーブレットサービス304は、認証結果をホストPC402に返す。この時、サーブレットサービス304は認証用モジュールが発行した認証許可を示す文字列(Token)を認証結果とともにホストPC402に返す。
認証許可を受けたホストPC402はS503で、インストール開始要求を画像形成装置401に送信する。この時、ホストPC402が有する拡張アプリケーションのデータとS502で取得したTokenをサーブレットサービス304に送信する。
S504で、インストール開始要求を受けたサーブレットサービス304は、Tokenが正しいことを確認する。
そして、サーブレットサービス304は、アプリケーション管理部302に拡張アプリケーションのインストール要求を送信する。S504において、サーブレットサービス304は、ホストPC402から受信した、拡張アプリケーションのインストール要求をアプリケーション管理部302に渡す。
インストール要求を受けたアプリケーション管理部302は、S505でストレージ制御部306にアプリケーションデータの書き込み要求を送信する。ストレージ制御部306は、アプリケーションデータ書き込み要求を受け、ストレージ104にアプリケーションデータを書き込む。
ストレージ制御部306は、ストレージ104へのアプリケーションデータの書き込み完了後、S506でアプリケーション管理部302に書き込みの完了を通知する。
S507でアプリケーション管理部302は、インストールデータに含まれるタイマー情報をタイマー管理部307に登録する。
S508において、タイマー管理部307がタイマーの登録を完了すると、タイマー管理部307はアプリケーション管理部302に登録の完了を通知する。タイマー情報については図12にて後述する。S508まで完了すると、画像形成装置401への拡張アプリケーションのインストールが完了する。
一方で、画像形成装置401への拡張アプリケーションのインストール中のS509でホストPC402は、インストール状況取得要求を画像形成装置401に通知する。この時、ホストPC402はS502で取得したTokenを使ってインストール状況取得要求を画像形成装置401に通知する。
サーブレットサービス304は受信したTokenが正しいことを確認し、問題なければS510でアプリケーション管理部302にインストール状況を問い合わせる。インストール状況の問い合わせを受けたアプリケーション管理部302は、現在のインストール状況を返す。拡張アプリケーションのインストールが完了しておらず、インストール中のためS511においてアプリケーション管理部302はインストール中を返す。S512において、サーブレットサービス304は、アプリケーション管理部302から取得した状態をホストPC402に通知する。
S513からS516で再度ホストPC402からインストール状況の確認を行う。ここでは、インストールが完了しているため、インストール完了が通知される。なお、S509以降で実行されるインストール状況の確認は所定間隔で行われるポーリング処理である。インストールが完了するまでは、画像形成装置401からインストール中が通知され、インストールが完了した後にインストール完了がホストPC402に通知される。
以上の処理により、ホストPC402の有する拡張アプリケーションのインストールデータが、画像形成装置401にインストールされる。
ここで、画像形成装置401にインストールされる拡張アプリケーションのインストールデータの構成を説明する。図10は、拡張アプリケーションのインストールデータの構成の一例を示す図である。
1001はアーカイブである。このアーカイブは、拡張アプリケーションを構成するすべてのデータを1つに纏めたデータである。拡張アプリケーションを構成するファイルは、大きく3つに分けることができる。1つは拡張アプリケーションの動作をプログラム言語で記述したスクリプト(1002〜1005)。2つ目は、アプリケーションで利用する画像データや表示メッセージなどを格納するリソースファイル(1006〜1007)。3つ目は、アプリケーション名などを宣言するmetaファイル1008である。なお、アーカイブは複数のスクリプトで構成される。たとえば、操作部112に表示されるアイコンが押下された時の動作を記載するMainスクリプト1002や、サーブレットサービス304の処理を行うサーブレットスクリプト1003、タイマー処理を行うハンドラースクリプト1004などである。さらに、アーカイブには、上記スクリプトが共通で利用する共通スクリプト1005が記憶されている。拡張アプリケーションを実行する際、必要なスクリプトだけがメモリにロードされるため、無駄なメモリ消費を抑えることができる。
図11は、アプリケーションを構成するmetaファイル1008の一例である。1101はアプリケーションを識別するIDである。1102はアプリケーション名である。1103は定期的に起動するアプリケーションのハンドラ処理のインターバルを示す。図11では、IDが1の“print form”というアプリケーションが10分毎に起動し、印刷を実行するか否かを判定することを示している。1103で示されるインターバルが、インストール処理のS507によってタイマー制御部に登録される。
図12は、タイマー制御部に登録されているインターバル情報を管理するテーブルの一例を示す図である。図12のintervalの単位は“分”とする。
1201は、アプリケーションのIDと、そのアプリケーションのインターバルを紐づける、インターバル情報を示す。1202は、アプリケーションID1のアプリケーションのインターバルが10分であることを示す。1203は、アプリケーションID2のアプリケーションのインターバルが10分であることを示す。1204は、アプリケーションID5のアプリケーションのインターバルが20分であることを示す。すなわち、画像形成装置401は、ID1とID2のアプリケーションを10分毎に起動し、ID5のアプリケーションを20分毎に起動する。そして、起動されたアプリケーションは、アプリケーションのMainスクリプトによる処理の実行を行うか否かを判定する。このように、あらかじめ決められた周期でタイマーハンドラを起動させることで、各拡張アプリケーションを常時起動していなくても、ユーザにより指定された時刻に拡張アプリケーションによる処理を実行することができる。
図6は、拡張アプリケーションの設定画面601の例を示す図である。図6に示す画面は、図5に示すシーケンスを終了し、画像形成装置401に拡張アプリケーションがインストールされた後、ホストPC402から画像形成装置401にアクセスすることで、ホストPC402のディスプレイに表示される。この設定画面は画像形成装置401とイーサネット404で接続されたホストPC402上で動作するWebブラウザに表示される。
設定画面601は、基本設定としてボタン名604、ファイルのパス情報605、実行前確認画面表示606を設定することができる。
ボタン名604は、画像形成装置401の操作部112のメインメニュー画面に表示されるアイコンの名称を設定する領域である。
ファイルのパス情報605は、印刷対象のファイルのパス情報が設定される。ファイルのパス情報は、ファイルを特定するURL情報であってもよいし、ファイルが格納されているフォルダのパスやファイルパスであってもよい。画像形成装置401は、指定されたURL、フォルダパス、ファイルパス等にアクセスし、印刷データを取得する。
実行前確認画面表示606では、画像形成装置401の操作部112のメインメニュー画面に表示されるアイコンを押下した際に、実行確認画面を表示するか否かが設定される。なお、実行確認画面の表示が設定されていても、ユーザが指定した時刻に印刷を開始するスケジュール設定を利用した印刷では実行確認画面を表示しないとする。
設定画面601には、用紙サイズ、両面、カラーモード、部数、給紙部といったプリント設定607の項目も含まれる。設定画面601は、拡張アプリケーションが印刷を実行する際の印刷設定を設定する領域である。
さらに、設定画面601では、指定した曜日/時間に印刷を実行する為のスケジュール設定を行うことができる。設定608は、スケジュール設定を有効にするか否かの設定をすることができる。設定608にレ点が表示されている場合、設定609を設定することができるようになる。一方で、設定608にレ点が表示されていない状態では、設定609を設定することはできない。
設定609は、拡張アプリケーションによる印刷が実行される時刻を設定する領域である。ユーザは、拡張アプリケーションによる印刷を実行する曜日と時刻を設定する。たとえば、図6では、日曜日の午前1時30分からと、月曜日の午後5時45分から印刷が実行されることが設定されている。
設定画面601で「OK」ボタン602が押下されると、設定画面601の設定と紐付いたアイコンが画像形成装置401の操作部112のメインメニュー画面に表示される。設定画面601で「キャンセル」ボタン603が押下されると設定画面601の設定を破棄し、設定画面601が閉じられる。
図7は、図6に示す設定画面をホストPC402に表示させ、拡張アプリケーションの設定を行うときの処理を示すシーケンス図である。ここでは拡張アプリケーションとして、ユーザが登録したフォーム画像データを印刷する拡張アプリケーションを例に説明する。アプリケーションによって細かい処理内容は異なるが、基本的な処理はここで示すステップと同じ処理になる。
拡張アプリケーションの設定は、ホストPC402上で動作するWebブラウザから画像形成装置401に接続し、Webブラウザを介して行われる。なお、画像形成装置401のWebブラウザから設定を行うとしてもよい。
まず、Webブラウザはサーブレットサービス304に対してアプリケーションを設定するための設定用URLを通知し、当該URLに対応する処理をリクエストする(S701)。
サーブレットサービス304は、Webブラウザから通知されたURLをアプリケーション管理部302に渡し、設定画面を表示するための処理をアプリケーション管理部302に依頼する(S702)。
アプリケーション管理部302は、リクエストされているURLから該当アプリケーションを特定し、該当アプリケーションのVM起動処理を行う(S703)。
次にアプリケーション管理部302は、アプリケーションサーブレットを実行する。この時、アプリケーション管理部302は、Webブラウザから通知されたURLと情報を拡張アプリケーションに通知する(S704)。
拡張アプリケーションは、要求されたURLのリクエストに対するレスポンス処理を行う(S705)。ここでは、設定用URLに対するHTMLリソースを返す準備を行う。このHTMLリソースには、フォーム印刷処理に必要な図8に示す情報を参照・設定するためのHTML FORMが記述されている。
次に、拡張アプリケーションは準備したHTMLリソースをアプリケーション管理部302に送信し、アプリケーションサーブレットを終了する(S706)。
アプリケーション管理部302は、受けたHTMLリソースをそのままサーブレットサービス304に送信する(S707)。
続いて、アプリケーション管理部302は、拡張アプリケーションから終了の通知受け、VM終了処理を行う(S708)。
サーブレットサービス304は、アプリケーション管理部302から受信したHTMLリソースをWebブラウザに送信する(S709)。WebブラウザがHTMLリソースに基づく画面をホストPC402のディスプレイに表示することで、図6に示す設定画面が表示される。
ユーザはWebブラウザに表示された画面を編集し、アプリケーションの設定を変更する(S710)。ここでは、新しく印刷フォームを登録したとする。
Webブラウザはユーザの操作によって設定情報登録リクエストをサーブレットサービス304に要求する(S711)。
サーブレットサービス304は、Webブラウザから受信した要求に基づき、アプリケーション管理部302に処理依頼する(S712)。アプリケーション管理部302は、サーブレットサービス304から設定情報登録リクエストを受信し、当該リクエストに対応するアプリケーションを特定し、当該アプリケーションを処理するためのVMを起動する(S713)。アプリケーション管理部302は、アプリケーションサーブレットを実行する(S714)。このとき、アプリケーション管理部302は、サーブレットサービス304から受信した設定情報登録リクエストと設定された情報を拡張アプリケーションに送信する。
拡張アプリケーションは、アプリケーション管理部302から受信した設定情報登録リクエストとその設定情報に基づき、設定情報の登録処理を行う(S715)。拡張アプリケーションは、設定情報の登録が完了すると、設定情報登録リクエストに対応する処理が完了したことを示す登録処理結果をアプリケーション管理部302に通知する。
アプリケーション管理部302は、拡張アプリケーションから受信した登録処理結果をそのままサーブレットサービス304に送信する(S717)。さらに、サーブレットサービス304は、アプリケーション管理部302から受信した登録処理結果をそのままWebブラウザに送信する(S718)。
アプリケーションは登録したフォームのアイコンを登録するために、アプリケーション管理部302にアイコン情報更新通知を送り、アプリケーションサーブレットを終了する(S719)。アプリケーション管理部302は、アプリケーションサーブレットの終了を受け、VM終了処理を実行する(S720)。アプリケーション管理部302は、アイコン更新処理を行う(S721)。アイコン更新処理とは、図6のボタン名604で設定された名称のボタンをメインメニュー画面に表示させるための処理である。アプリケーション管理部302はUI制御部303を制御し、設定された拡張アプリケーションのボタンをメインメニュー画面に表示させる。UI制御部303は、ボタン画像を生成し、生成したボタン画像と起動するアプリケーションのアプリケーションIDを紐づけて記憶させる。これにより、ユーザが選択したアイコンがどの拡張アプリケーションに対応するアイコンかを識別することができるようになる。
図8は、拡張アプリケーションである、フォーム印刷アプリケーションが、Webブラウザに提供するHTMLリソースの一例を示す図である。図8はHTMLリソースの一例であり、これに限定するものではない。図8では、すでにボタン名やファイルのパス情報、印刷設定やスケジュール設定が設定された状態のHTMLリソースである。拡張アプリケーションで印刷設定が登録される前のHTMLリソースは、各設定値が記録されておらず、設定項目だけが記憶されたデータである。図7に記載のシーケンスが実行されることで、図8に示す設定がなされた状態のリソースが完成する。
設定データ801は、拡張アプリケーションの設定画面601で「OK」ボタン602が押下された際にストレージ104に書き込まれる。
802はボタン名、804は実行前確認画面を表示するか否かの設定値、805は印刷対象のファイルやフォルダのパス情報を示し、拡張アプリケーションの設定画面601中の604、605、606で設定された値が反映される。図8では、ボタン名称が「コンテンツ印刷」、実行前確認画面を表示することが設定されている。
また、806はそれぞれ用紙サイズ、両面、カラーモード、部数、給紙部の設定を示し、拡張アプリケーションの設定画面601中の607で設定された値が反映される。図8では用紙サイズがA4、両面印刷、カラーモードは自動判定、印刷部数は1部、給紙部はトレイ2と設定されている。
807はスケジュールの設定を行うか否かの設定値及び、各曜日におけるスケジュールの設定値を示す。ここでは、拡張アプリケーションの設定画面601の609のように、日曜日のAM1:30、月曜日のPM5:45にスケジュールを設定した際の設定データの例を示す。火曜日から土曜日についてはスケジュール設定がなされていないため、時刻情報がブランクになっている。
次に、図9を用いて、アプリケーションの実行に関する処理を説明する。図9は、ユーザが画像形成装置401の画面に表示される拡張アプリケーションのボタンを選択し、印刷を実行する際の処理を示すシーケンス図である。本実施例では、拡張アプリケーションをフォーム印刷アプリケーションと記載する。
操作部112は拡張アプリケーションのアイコンが選択されたことを検知する(S901)。
操作部112は拡張アプリケーション240に対しアプリケーション実行を指示する(S902)。操作部112はユーザにより選択されたアイコンに紐づく拡張アプリケーションに対してアプリケーションの実行指示を送信する。
拡張アプリケーション240は、アプリケーション実行指示を受信して、アイコンに紐付いたパス情報をもとにサーバ403に対し、ファイル情報取得要求を行う(S903)。
サーバ403は、拡張アプリケーション240からファイル情報取得要求を受けると、サーバ403内のファイルから対象のファイルの特定する(S904)。パス情報でファイルが指定されていた場合は設定されたパスのファイルが特定される。一方で、パス情報でフォルダが指定されていた場合はそのフォルダに含まれる複数のファイルが対象ファイルとして特定される。なお、URLが指定されていた場合、当該URLのWebページを印刷ファイルとして特定する。
次にサーバ403はS904で特定した対象ファイルの情報を拡張アプリケーション240に送信する(S905)。S905において送信される対象ファイルの情報とは、特定されたファイルの名称や当該ファイルの保存日時、ファイルのデータサイズなど、後述するS906で操作部112に表示される情報である。
拡張アプリケーション240はサーバ403から対象ファイル情報を受信すると、操作部112に対し確認画面と対象ファイルの表示指示を行う(S906)。
操作部112は拡張アプリケーション240から確認画面と対象ファイルの表示指示を受けると、設定画面601で設定したプリント設定と対象ファイルの情報を含む確認画面の表示を行う(S907)。操作部112に表示される確認画面には、特定された対象ファイルの名称や保存日時、データサイズなどが表示される。ユーザは確認画面を見ることで、どのファイルが印刷されるかを確認することができる。確認画面には、上記対象ファイルの情報に加え、「OK」ボタンが表示される。「OK」ボタンは、ユーザが選択した拡張アプリケーション240による印刷実行を指示するためのボタンである。さらに、確認画面には「キャンセル」ボタンが表示される。ユーザが「キャンセル」ボタンを選択することで、印刷を実行せずにメニュー画面に戻ることができる。
操作部112は確認画面で「OK」ボタンが選択されたことを検知する(S908)。
確認画面の「OK」ボタンが選択されたことを検知すると操作部112は拡張アプリケーション240に対し印刷要求を送信する(S909)。
拡張アプリケーション240は操作部112から印刷要求を受けると、操作部112に対し印刷中画面の表示を指示する(S910)。操作部112はS916で終了通知を受信するまで印刷中画面を表示する(S911)。図16は、印刷中画面の一例を示す図である。ここで1601は、現在投入しているドキュメントの投入進捗状態を示す。1602は、印刷するファイル数と現在投入中のファイル番号を示す。この例では全部で5ファイルを印刷し、現在2番目のファイルを投入中であることを示す。1603は、ジョブの投入を中断してアプリケーションの終了を指示するボタンである。コンテンツ印刷アプリケーション実行中に、ユーザがスキャンしたり、別の印刷を行いたいというような場合にこのボタンを選択する。そのようにすることで、拡張アプリケーションによるジョブを停止してアプリケーションを終了し、ユーザはスキャンなど画像形成装置401を利用できる。
拡張アプリケーション240は、サーバ403に対してファイル取得要求を行う(S912)。S912において、拡張アプリケーション240は当該拡張アプリケーションに設定されたパスへのアクセス要求をサーバ403に送信する。先にも説明したように、このパスは、あるファイルのパスであっても、フォルダパスであってもよい。
サーバ403は拡張アプリケーション240からファイルファイル取得要求を受けると、サーバ403は拡張アプリケーション240に対し、S904で特定したファイルのデータ送信を行う(S913)。ここでは、実際に印刷する画像データを取得する。
拡張アプリケーション240はサーバ403からファイルデータを受信する(S914)。そして、拡張アプリケーション240は、受信したファイルデータの印刷を実行する(S915)。対象のファイルが複数存在する場合は、S914、S915の処理が複数繰り返される。なお、複数のファイルを印刷する場合には、全部のファイルのデータ受信が完了する前であっても、逐次印刷を開始する。
また、S915で印刷実行が終了すると、拡張アプリケーション240は操作部112に対し終了通知を行う(S916)。
次に、ユーザがスケジュール設定により設定した時刻に印刷を実行するための処理を説明する。
図13は、アプリケーションのタイマーハンドラ処理を実行するシーケンスを示す図である。本シーケンスは、画像形成装置401に拡張アプリケーションがインストールされて以降、実行されるシーケンスである。
タイマー管理部307は定期的にインターバルとして設定された時間が経過したか否かを確認する(S1301)。インターバルとして設定された時間とは、図12に示すテーブルで管理されるインターバル情報である。
アプリケーションのハンドラを起動してからインターバルとして設定された時間が経過している場合、アプリケーションのハンドラ起動要求をアプリケーション管理部302に行う(S1302)。この時、ハンドラ起動要求には、どのアプリケーションのハンドラを起動するかを指定するアプリケーションIDを一緒に通知する。ここでは、アプリケーションID1、2で設定されたインターバルが経過したとする。
アプリケーション管理部302は、タイマー管理部307からハンドラ起動要求を受けてハンドラ開始処理を行う(S1303)。なお、アプリケーション管理部302は、タイマー管理部307から通知されたアプリケーションIDのアプリケーションについて一つずつハンドラを起動させる。ハンドラ開始処理は、アプリケーションハンドラ処理中に画像形成装置がスリープ状態に入り、アプリケーションハンドラ処理が中断されないように、スリープ移行制御を抑制するための処理である。
次にアプリケーション管理部302は、ハンドラ起動要求1302に含まれるアプリケーションIDで指定されているアプリケーションのハンドラの実行をアプリケーション実行制御部305に依頼する(S1304)。図13では、アプリケーションID1の拡張アプリケーションに対してハンドラ実行を依頼する。
アプリケーション管理部302は、アプリケーション実行制御部で実行されるハンドラの実行を監視するハンドラ実行監視処理をS1305で行う。このハンドラ実行監視処理については図24で後述する。
アプリケーション実行制御部305は、アプリケーションハンドラ実行要求を受け、指定されたアプリケーションハンドラ処理を実行する(S1306)。ここで、ハンドラは、時刻が指定された拡張アプリケーションのスケジュール設定で設定されたジョブの実行時刻を迎えたか否かを判定する。図13では設定された時刻を迎えていない場合を例に説明する。
アプリケーション実行制御部305は、ハンドラ処理実行後、ハンドラ処理の終了をアプリケーション管理部302に通知する(S1307)。終了通知を受けたアプリケーション管理部302は、ハンドラ実行監視処理を終了し、ハンドラ起動要求1302に含まれる次のアプリケーションIDの実行制御を行う。図13では、アプリケーション管理部302はアプリケーション2のハンドラを処理する。
アプリケーション管理部302は、アプリケーション実行制御部305に、アプリケーションID2のアプリケーションのハンドラ実行を指示する(S1308)。アプリケーション実行制御部305は、アプリケーション管理部302から指示されたアプリケーションIDの拡張アプリケーションのハンドラを起動する。アプリケーション管理部302が、ハンドラの実行監視処理を開始する(S1309)。一方で、起動されたハンドラは現在時刻がアプリケーション2のスケジュール設定で設定された時刻を迎えたか否かを判定する。図13では、アプリケーションID2のアプリケーションについても、スケジュール設定で設定された時刻を迎えていないとする。
アプリケーション実行制御部305は、アプリケーション管理部302にハンドラ処理が完了したことを通知する(S1311)。アプリケーション管理部302は、S1309で開始したハンドラ実行管理処理を終了する(S1312)。ハンドラ実行監視処理が終了することで、画像形成装置のスリープ移行を可能にするため、スリープ移行制御が実行されるようになる。
S1313からS1317は定期的に行われるポーリング処理であり、タイマー制御部は定期的に経過時間を確認する。S1316までは経過時間がインターバル情報1201に登録されているアプリケーションのインターバル時間に満たないためハンドラの起動要求等の処理はおこなわない。
S1317からS1332までは、アプリケーション1、2と5のインターバル時間が経過した時の動作である。そのため、S1317以降では、アプリケーション1、2、5のハンドラが順番に起動されて、処理を行っている。S1319〜S1323に記載の処理は、S1303〜S1307に記載の処理と同様である。S1324〜S1327に記載の処理は、S1308〜S1311に記載の処理と同様である。
アプリケーション管理部302は、アプリケーション実行制御部305に対してアプリケーションID5のアプリケーションについてハンドラの実行を指示する(S1328)。そして、アプリケーション管理部302は、ID5のアプリケーションのハンドラの実行監視処理を開始する(S1329)。アプリケーション実行制御部305は、アプリケーションID5の拡張アプリケーションのハンドラを起動し、ハンドラ処理を実行する(S1330)。S1330で行われる処理もS1306やS1310と同様、拡張アプリケーションのスケジュール設定された時間を迎えたか否かを判定する処理である。ここでも、時刻はスケジュール設定された時刻を迎えていないものとして説明をする。アプリケーション実行制御部405はハンドラ処理の終了をアプリケーション管理部302に通知する(S1331)。アプリケーション管理部はハンドラの終了に必要な処理を実行する(S1332)。
このようにアプリケーションによる印刷を実行するか否かを判定するハンドラを定期的に実行することで、拡張アプリケーションを常駐させずとも、ユーザにより設定された時刻にアプリケーションのメイン処理を実行することができる。また、拡張アプリケーションをメモリ上に常駐させず所定時間が経過したときだけメモリ上に展開することで、拡張アプリケーションが展開されていない間の消費メモリを削減することができる。さらに、図13では複数のアプリケーションのタイマーハンドラを同時に実行せず、逐次実行する。このようにすることで、複数同時にアプリケーションが実行されるのを防ぎ、一度に消費されるメモリ量を削減することができる。
ここで、アプリケーションハンドラを起動した際に、スケジュール設定された時刻を迎えていた場合の処理を説明する。図14は、拡張アプリケーションのスケジュール印刷機能実行時の処理を示すシーケンス図である。
S1401からS1404は、図13のS1301からS1304と同じである。
タイマー管理部307は、所定時間が経過したら、設定されたインターバル時間を経過したか否かを判定する(S1401)。設定されたインターバル時間を経過した場合、タイマー管理部307はアプリケーション管理部302にインターバル時間を経過した拡張アプリケーションのハンドラの起動を要求する(S1402)。アプリケーション管理部302は、ハンドラ開始処理を実行する(S1403)。これにより、拡張アプリケーションのハンドラ処理を実行している間に画像形成装置401がスリープ状態に移行するのを抑制することができる。アプリケーション管理部302は、タイマー管理部307から通知されたアプリケーションIDであるアプリケーションID1のアプリケーションハンドラの実行をアプリケーション実行制御部305に指示する(S1404)。アプリケーション管理部302はハンドラ実行監視処理を開始する(S1405)。
S1406は拡張アプリケーションであるフォーム印刷アプリケーションのハンドラ処理である。アプリケーション実行制御部305は、拡張アプリケーションのハンドラを実行し、スケジュール設定された時刻を迎えたか否かを判定する(S1406)。
図14では、画像形成装置401のRTC115から取得される時刻がスケジュール設定されている時刻を過ぎているとする。アプリケーション実行制御部305はフォーム印刷を行うためアプリケーション管理部302にMainスクリプト起動依頼する(S1407)。そして、アプリケーション実行制御部305は、ハンドラ処理の終了をアプリケーション管理部302に通知する(S1408)。アプリケーション管理部302は、アプリケーション実行制御部305からの通知に基づき、ハンドラ処理を終了させる(S1409)。
Mainスクリプト起動依頼を受けたアプリケーション管理部302は、Mainスクリプト実行可能確認を行う(S1410)。これは、ユーザが画像形成装置を操作中に突然アプリケーションが起動することで、操作を妨げることを防ぐことを目的とし、Mainスクリプトの実行タイミングを調整するための処理である。例えば、Mainスクリプト実行可能確認において、ユーザが操作部112を操作しているか否かを判定する。ユーザが操作部112を操作している場合、アプリケーション管理部302は、無操作時間が所定時間経過するまでMainスクリプトの実行指示を送信しない。また、S1410において、アプリケーション管理部302は、アプリケーション実行制御部305が他のアプリケーションのMainスクリプトの実行中でないことを確認する。これは、複数のアプリケーションのMainスクリプトが同時に実行されることを防ぐための処理である。
Mainスクリプトの実行可能確認は上記の方法以外の方法であってもよい。たとえば、画像形成装置401が印刷や原稿の読み取りを実行しているか、不図示の人感センサにより画像形成装置401の前に人がいることを検知しているかなどであってもよい。
S1410において、Mainスクリプトの実行が可能であると判定された場合、アプリケーション管理部302はアプリケーション実行制御部305にMainスクリプト実行を依頼する(S1411)。アプリケーション実行制御部305は、S1412でMainスクリプトを実行し、それにより図9のS909以降で示す印刷処理が行われる。Mainスクリプト処理が完了すると、アプリケーション実行制御部305はMainスクリプトの実行終了をアプリケーション管理部302に通知する(S1413)。
このように制御することで、拡張アプリケーションのMainスクリプトを常にメモリに展開してなくても、スケジュール設定により実行すると判定されたタイミングで展開すれば印刷を実行することができるようになる。
ここで、図15の模式図を用いて、登録されたパスにより特定されるファイルを印刷する際の処理の流れを説明する。図15は、複数ページドキュメントを印刷する際、各ページがどのように処理されるかの一例を示す図である。アプリケーションは登録されているサーバから、複数ページで構成されるドキュメントをダウンロードする(1501)。ダウンロード中のデータをプリント機能が参照するインターフェースに投入する(1502)。拡張アプリケーションはインターフェースに投入されたデータを、プリント機能の使用するメモリにスプールする(1503)。拡張アプリケーションは、スプール用のメモリの空きを確認し、データを渡す。プリント機能は、スプールされたデータを読み出してレンダリングし、ビットマップ画像を生成する(1504)。プリント機能はレンダリングにより生成されたビットマップ画像をプリントする(1505)。画像形成装置は、画像が印刷された用紙を排紙し処理が完了する(1506)。アプリケーションは、ダウンロードした全データの投入が終わった時点で終了する。アプリケーション終了後も、スプールされているデータの印刷は継続される。
以降、拡張アプリケーションを用いた印刷に係る処理の詳細についてフローチャートを用いて説明する。
図21は、図14のS1406で示すコンテンツ印刷アプリケーションのタイマーハンドラ処理を示すフローチャートである。本フローチャートに記載の処理は、図10に示す拡張アプリケーションのインストールデータのHandler Script1004に記載のプログラムをCPU101が実行することで実現される。
まずS2101において、CPU101は中断情報が記憶されているか否かを判定する。中断情報は、図19のS1906において記録される情報であり、拡張アプリケーションによる印刷が中断された場合に、いずれのファイルまで印刷が完了したかを示す情報である。
ここで、図22を用いて中断情報について説明する。図22は、中断情報の一例を示す図である。ここでは、ユーザにより設定されたパスのフォルダにfile1.pdf、file2.pdf、file3.pdfの3つのファイルが格納されているとする。拡張アプリケーションは3つのファイルを順にダウンロードし、印刷する。ここで、拡張アプリケーションがfile1.pdf,file2.pdfのファイルのダウンロードを完了し、file1.pdfの印刷を完了し、file2.pdfの印刷途中で停止指示がなされたとする。このとき、画像形成装置401は、file2.pdfの印刷を完了しアプリケーションを終了する。中断情報には、図22に示すように印刷が完了したfile1.pdf、file2.pdfが記憶される。どのファイルの印刷が完了したかを中断情報として記憶することで、拡張アプリケーションの中断後、タイマーハンドラの起動時に、中断情報を参照し、いずれのファイルの印刷まで完了したかを確認することができる。
S2101において中断情報が記憶されていると判定された場合、CPU101はS2103に記載の処理を実行する。中断情報が記憶されていなければ、CPU101はS2102に記載の処理を実行する。
S2102において、CPU101はRTC115から現在の曜日、時刻を取得し、前回タイマーハンドラが起動されてから、今回タイマーハンドラが起動されるまでの間に、ユーザにより設定された時刻を迎えたか否かを判定する。ユーザにより設定された時刻とは、図6に示す設定画面のスケジュール設定において、設定された時刻である。CPU101は、RTC115が取得した曜日と同じ曜日を指定した印刷のスケジュールが登録されているかを判定する。RTC115が取得した曜日と同じ曜日を指定した印刷のスケジュールが登録されている場合、前回タイマーハンドラを起動してから今回タイマーハンドラが起動されるまでの間に設定された時刻を迎えたか否かを判定する。CPU101は、RTC115から取得した時刻よりもインターバルとして設定された時間だけ前の時刻から、RTC115が取得した時刻までの間に設定された時刻を迎えたか否かを判定する。
設定された時刻を迎えている場合、CPU101はS2103に記載の処理を実行する。一方で、設定されている時刻を迎えていない場合、CPU101は図21に記載の処理を終了する。
S2103では、CPU101はMainスクリプトの起動をアプリケーション管理部302に依頼し、処理を終了する。
図21に示すように、タイマーハンドラの起動時に中断情報がある場合に、Mainスクリプトを起動するようにすることで中断した時の印刷処理を再度行うことができる。また、S2102の処理で、所定の時刻経過ではなく、外部情報装置と通信して印刷要求があることを確認するようにしてもよい。このようにすることで、外部情報装置と連動した印刷機能を提供することもできる。
次に、アプリケーション管理部302がアプリケーション実行制御部305から拡張アプリケーションのMainスクリプトの実行を指示された場合に行われる、Mainスクリプトの実行が可能かを確認する処理について説明する。本処理は、図14のS1410で実行される処理の詳細である。
図23に記載の処理は画像形成装置401がネイティブのプログラムとして記憶しているプログラムをCPU101が実行することで実現される処理である。本処理は、実行が指示されたアプリケーションと異なるアプリケーションのMainスクリプトの実行中や、ユーザが画像形成装置401を操作している間に拡張アプリケーションによる印刷を実行しないよう制御するためのものである。
まず、S2301において、Mainスクリプト起動依頼が来ているかどうかを調べる。起動依頼があればS2302に進み、無ければ図23に記載の処理を終了する。
S2302で、CPU101は既に他のMainスクリプトが実行されているか否かを判定する。他のMainスクリプトが実行されている場合CPU101はS2302に処理を戻す。他のMainスクリプトが実行されていなければ、CPU101はS2303に処理を進める。Mainスクリプトが展開されるメモリ容量を抑えるため、他のMainスクリプトの実行中はS2303の処理を行わないよう、Mainスクリプトが完了するまでS2302に記載の処理を繰り返し行う。
S2303で、CPU101は一定時間内に操作部112を操作されたか否かを判定する。一定時間以内にユーザによる操作がなされている場合、CPU101は処理をS2302に戻す。一定時間内に操作がなされていない場合、CPU101は処理をS2303に進める。ユーザが最後に操作してから所定時間が経過していない場合、ユーザが画像形成装置401を操作していることが考えられる。そのため、ユーザによる画像形成装置401の操作が終わるまで、S2302、S2303を繰り返し行い、ユーザが画像形成装置401を使用し終わってからMainスクリプトを実行する。
S2304では、CPU101はアプリケーション管理部302を制御し、Mainスクリプト実行をアプリケーション実行制御部305に依頼する。
このように制御することで、ユーザ操作中にアプリケーションが起動してユーザ操作を妨げることを抑止することが出来、なおかつ、Mainスクリプトが複数実行されることを防ぐことで、消費するメモリを抑えることが出来る。
次に、拡張アプリケーションのMainスクリプトが実行する処理を説明する。
図20は、コンテンツ印刷アプリケーションのフォルダ印刷処理を示すフローチャートである。CPU101が図10に示す拡張アプリケーションのインストールデータに格納されるMainスクリプト1002を実行することで以下の処理が実現される。
まずS2001において、CPU101は設定されているパスで特定されるフォルダにあるファイルのリストを取得する。たとえば、設定されているパスで特定されるフォルダ内に“file1.pdf”、“file2.pdf”、“file3.pdf”の3つがある場合、それら3つのファイル名を取得する。
S2002において、CPU101は中断情報が記憶されているか否かを判定する。中断情報が記憶されている場合、拡張アプリケーションは、中断により実行されなかったフォルダの印刷を行うためS2003以降の処理を実行する。一方で、中断情報がない場合、CPU101はS2006に処理を進める。
S2003において、CPU101は中断情報を読み込む。
S2004において、CPU101はS2001で取得したファイルリストから、中断情報に含まれている印刷が終わったファイルリストに一致するファイルを除外する。たとえば、S2001において“file1.pdf”、“file2.pdf”、“file3.pdf”のファイル名を取得したとする。一方で、S2002において取得した中断情報に“file1.pdf”、“file2.pdf”が記憶されていたとする。この場合、S2001で取得したリストに含まれる3つのファイル名のうち、“file1.pfd”、“file2.pdf”は印刷済みであることがわかる。そこで、S2001で取得したファイル名のリストから“file1.pfd”、“file2.pdf”を削除する。これにより、“file3.pdf”のみが印刷するファイル名として残る。
S2005において、CPU101は中断情報をストレージから削除する。
S2006において、CPU101はファイルリストにファイルがあるか否かを判定する。ファイルがある場合、CPU101はS2007に処理を進め、印刷を実行する。一方で、印刷するファイルがない場合には、図20に示す処理を終了する。CPU101は、ユーザにより指定されたパスにあるファイルをダウンロードに、プリント機能が参照することのできるインターフェースへのデータの書き込みを完了すると、拡張アプリケーションのMainスクリプトを終了する。
中断情報が記憶されていない場合、CPU101はファイルリストの最初に記載されているファイル名のファイルから順にS2007以降の処理を実行する。
S2007において、CPU101はファイルリストに記載されるファイルのデータを読み出す。たとえば、上記のようにファイルリストに“file3.pdf”が残っている場合、CPU101はユーザにより指定されたフォルダパスの”file3.pdf”を読み出す。S2007において、CPU101は当該ファイルのダウンロードを開始する。
S2008において、CPU101はダウンロードしたファイルのデータと、ユーザにより設定された印刷設定に基づき印刷ジョブを生成する。そして、CPU101は生成した印刷ジョブを画像形成装置の印刷機能を制御するアプリケーションに投入する。
上記のように制御することで、コンテンツ印刷アプリケーションのフォルダ印刷処理が一時停止された場合に、印刷済みのファイルを飛ばして続きから印刷することができる。
ここで、拡張アプリケーションにより画像データの印刷を行っているときに、ユーザが拡張アプリケーションの中断指示をした場合の処理について説明する。
図17は、図16の“Pause”ボタン1603を押下し、拡張アプリケーションによる印刷の中断指示をした場合に表示される中断処理中画面の一例である。複数ページドキュメントのデータ投入中(図15の1502)にアプリケーションを停止すると、ドキュメントの途中までが印刷された状態になってしまう。そこで“Pause”ボタン1603が押下された時は、アプリケーションを即時中断するのではなく、途中までダウンロードしたファイルについて全データの投入が終わるのを待ってから終了する。
画像形成装置は印刷中のファイルの最後のページのデータをプリント機能のインターフェースに投入し、図17に示す画面を非表示にする。中断処理中画面を非表示にしたあとは、コピー、プリント、スキャンなど複数の機能から使用する機能を選択するメインメニュー画面や、上記いずれかの機能の設定画面、ユーザ認証に必要な情報を受け付ける画面などが操作部112に表示される。
この画面の1701は、現在投入しているドキュメントの投入進捗状態を示す。この投入が終わった時点で、アプリケーションは終了する。“Abort”ボタン1702は、途中までの印刷になってしまっても構わない場合に、即時停止を実行するボタンである。このボタンが選択された場合は、データ投入中であっても、アプリケーションが中断される。
拡張アプリケーションが中断された場合、印刷中のファイルを最終ページまで印刷して、拡張アプリケーションによる印刷を中止する。
図18は、フォルダ内の2つのファイルを印刷している時に、各ページがどのように処理されるかを示す図である。最初にファイル1が投入され、ファイル1の投入が終わった時点でファイル2が投入される。この時、ファイル1はまだ印刷中で、ファイル2はスプールされているだけで、印刷を待つ状態にある。ファイル1の印刷中で、ファイル2のダウンロード中に中断指示がなされたとする。画像形成装置は、ファイル1を最後のページまで印刷し、ファイル2は印刷をしない。そして、画像形成装置は、ファイル1の印刷が完了したことを中断情報として記憶する。
図19は、図16の“Pause”ボタン1603を押下した時の中断処理のフローを示す。本フローチャートに記載の処理は、拡張アプリケーションのMain Script1002に記載されたプログラムをCPU101が実行することで実現される。なお、本実施例では、拡張アプリケーションによって印刷されるファイルごとにジョブが生成されるとする。すなわち、ユーザによって設定されたパスで特定されるフォルダに複数のファイルがある場合、スケジュール設定で設定された時刻を迎えると、複数のジョブが順次生成され、順次印刷されるとする。
まず、S1901においてCPU101はジョブを投入中か否かを判定する。S1901において、ジョブの投入中とは、拡張アプリケーションがユーザにより設定されたパスにより特定されたフォルダをダウンロードし、プリント機能へのインターフェースに書き込んでいる状態を指す。たとえば、図18においてファイル1801は画像形成装置401のプリント機能への投入が完了しているが、ファイル1802はダウンロードし、画像形成装置401のプリント機能への投入が完了していない。そのため、CPU101はS1901においてジョブが投入中であると判定する。いずれのジョブも投入中でない場合、CPU101はS1906に処理を進める。
一方で、ジョブの投入中であればS1902に処理を進める。S1902で、CPU101は投入中のジョブがプリント中かどうかを判定する。たとえば、図18の場合、投入中のジョブはファイル2を印刷するためのジョブである。しかし、印刷中のジョブはファイル1を印刷するためのジョブである。そのため、図18のような場合、CPU101は投入中のジョブをプリント中ではないと判定する。
投入中のジョブをプリント中の場合、CPU101はS1904に記載の処理を実行し、投入中のジョブをプリント中でない場合、CPU101はS1903に処理を進める。
S1903で、CPU101は印刷が開始されていないファイルや、投入中のファイルの印刷をキャンセルし、S1906に処理を進める。たとえば、図18のような場合には、ファイル2のダウンロードを中断する。なお、S1903では、投入中のファイルに加えて、投入後のファイルであっても印刷が開始されていないファイルがあればそのファイルの印刷をキャンセルする。
一方で、S1904で、CPU101は“Abort”ボタン1702が選択されたか否かを判定する。“Abort”ボタン1702が選択された場合、CPU101はS1908に処理を進める。“Abort”ボタン1702が選択されていない場合、CPU101は処理をS1905に進める。
S1905において、CPU101はファイルデータの投入が終わったかどうかを判定する。ファイルデータの投入が終わったとは、拡張印刷アプリケーションがサーバから1ファイル分の画像データの取得を完了し、ネイティブアプリケーションであるプリンタ機能のインターフェースに当該データの投入を終えたことである。
ジョブの投入が終わっていない場合、CPU101はS1904に処理を戻す。ジョブの投入が完了すると、CPU101はS1906に処理を進める。
S1906で、CPU101はコンテンツ印刷アプリケーションの中断情報として、ファイルデータの投入が終わったファイルリストをストレージに記録して終了する。S1906において、印刷が完了されるファイルのリストを中断情報として記憶することで、拡張アプリケーションは中断された後に、中断により印刷することのできなかった残りのデータを印刷することができる。
図24は、図13のS1305におけるハンドラ実行監視処理のフローを示す。図24に示す処理を実行するためのプログラムは、ROM103またはストレージ104に記憶されており、CPU101が当該プログラムを実行することで処理が実現される。
CPU101は当該処理を開始して所定の時間が経過したらS2401に示す処理を実行する。
S2401において、CPU101はアプリケーション実行制御部305に依頼したハンドラの実行が終了したか否かを判定する。終了していない場合S2402に進み、終了している場合、図24に示す処理を終了する。
S2402において、所定の時間経過してもハンドラ処理が終了していない場合、CPU101はハンドラを強制終了させる。アプリケーション管理部302が、拡張アプリケーションのハンドラ実行を指示し、所定の時間が経過してもハンドラの実行が完了しない場合、ハンドラによる処理が正常に行われていない可能性がある。そこで、CPU101は、ハンドラの実行を指示した後、ハンドラ実行監視処理を開始する。ハンドラ実行開始処理を開始して、所定の時間が経過してもハンドラの実行が完了しない場合、ハンドラを強制終了する。
このハンドラ実行監視処理により、いずれかのアプリケーションのハンドラの暴走によって、他のアプリケーションのハンドラの実行を妨げられることを防止することができる。
以上の処理により、拡張アプリケーションによる印刷がユーザにより停止された場合に、設定された時刻を待たずに、停止された印刷を再開することができる。
(その他の実施形態)
なお、上記の実施例では、ユーザがアプリケーションの実行中断を指示すると、拡張アプリケーションから画像形成装置401の印刷を実行するアプリケーションへのデータの投入が中断される場合を説明した。ユーザの中断指示に基づいて、実行中の印刷が中断されるとしてもよい。
たとえば、“file1.pdf”を10部印刷する設定がされた拡張アプリケーションによる印刷の実行中、5部目の印刷中にユーザが印刷の中断を指示したとする。このとき、画像形成装置401は、5部目の印刷が完了すると、印刷を中断する。すなわち6部目以降が印刷されずに印刷が停止される。そして、いずれのファイルの何部目まで印刷が完了したかを、図19のS1906で生成された中断情報に記憶をする。たとえば、上記の場合であれば、“file1.pdf”の5部目まで印刷が完了したことを記憶する。CPU101は図20のS2001でフォルダ内のファイルリストに加え、ユーザが設定した印刷部数の情報を取得する。そして、S2004において、CPU101はファイルリストの情報と設定された印刷部数、中断情報で示されるファイル名と印刷済みの部数の情報から、どのファイルを何部印刷するかを決定する。その後、CPU101はS2007以降で、ファイルリストに記憶されたファイル名のファイルのデータをダウンロードし、ダウンロードされたデータとS2004で決定した印刷部数に従って印刷を再開する。上記の場合は、file1.pdfの6部目から印刷を再開する。
このようにすることで、あるファイルを複数部印刷するときに、途中で印刷の実行が停止された場合であっても、印刷が完了していない分の印刷から処理を再開することができる。
本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)をネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム又は装置のコンピュータ(又はCPUやMPU等)がプログラムコードを読み出して実行する処理である。この場合、そのコンピュータプログラム、及び該コンピュータプログラムを記憶した記憶媒体は本発明を構成することになる。