以下、本発明を実施するための最良の形態について図面を用いて説明する。図1は、本実施形態に係る画像処理システムの構成を示すブロック図である。図1において、オフィス内に構築されたLAN102には、複数種類の機能(複写機能、印刷機能、送信機能等)を実現する複合機であるMFP100と、クライアントPC101が接続されている。また、LAN102には、プロキシサーバ103と、文書管理サーバ106、文書管理サーバ106のためのデータベース105、携帯情報端末107が、無線または有線で接続されている。LAN102は、プロキシサーバ103を介してネットワーク104に接続されている。
クライアントPC101、プロキシサーバ103の各種端末はそれぞれ、汎用コンピュータに搭載される標準的な構成要素(例えば、CPU、RAM、ROM、ハードディスク、ネットワークI/F、ディスプレイ、キーボード、マウス等)を有している。例えば、クライアントPC101は、印刷データをMFP100へ送信することで、その印刷データに基づく印刷物をMFP100で印刷することが可能である。なお、図1の構成は一例であり、同様の構成要素を有する複数のオフィスがネットワーク104上に接続されていても良い。
ネットワーク104は、典型的にはインターネットやLANやWANや電話回線、専用デジタル回線、ATMやフレームリレー回線、通信衛星回線、ケーブルテレビ回線、データ放送用無線回線等のいずれかで実現されている。もちろん、それらの組み合わせにより実現されるいわゆる通信ネットワークであっても良いことは言うまでもなく、データの送受信が可能であれば良い。
図2は、図1におけるMFP100の機能構成を示すブロック図である。図2において、MFP100は、画像読み取り部110、記憶装置(以下、「BOX」と記す)111、記録装置112、データ処理装置115、入力装置113、表示装置116、ネットワークI/F114で構成される。
画像読み取り部110は、Auto Document Feeder(以下、「ADF」と記す、不図示)を有し、束状の或いは1枚の原稿の画像を光源で照射し、反射画像をレンズで固体撮像素子上に結像する。固体撮像素子は所定解像度(例えば600dpi)および所定輝度レベル(例えば8ビット)の画像読み取り信号を生成し、画像読み取り信号からラスターデータよりなる画像データが構成される。
通常の複写機能を実行する際には、画像読み取り部110で得たビットマップ画像データをデータ処理装置115によって、後述するスキャン画像処理して記録信号に変換し、記録装置112で画像形成(印刷出力)する。複数枚複写の場合には、1頁分の記録信号を一旦BOX111に記憶保持した後、記録装置112に順次出力して、記録紙上に記録画像を形成する。
MFP100は、PC102もしくは不図示の汎用PCからドライバを利用して出力されてくるPDLデータを、LAN102とネットワークI/F114を介して受信し、当該受信したPDLデータに基づく画像を、記録装置112によって記録し得る。すなわち、PC102からドライバを経由して出力されるPDLデータは、LAN102からネットワークI/F114を経てデータ処理装置115に入力される。そこで言語を解釈・処理することで記録可能な記録信号に変換された後、MFP100において、記録紙上に記録画像として記録される。
BOX111は、画像読み取り部110からのデータやPC102からドライバを経由して出力されるPDLデータをレンダリングしたデータを保存できる機能を有している。また、MFP100は、MFP100に設けられたキー操作部(入力装置113)を通じて操作され、操作入力の状態を表示装置116によって表示し得る。
〔第1の実施例〕
図3を用いて、本発明の第1の実施例におけるアプリケーション画像データの生成フローを説明する。図3は、ビットマップ画像データから、携帯情報端末107で表示するための所定のフォーマットのデータ(以下、「アプリケーション画像データ」)と呼ぶ)を生成するためのフローチャートである。ビットマップ画像データは、MFP100の画像読み取り部110により取得、または、PC102上においてアプリケーションソフトで作成されたドキュメントをMFP100内部でレンダリングして生成される。
まず、ステップS301において、データ処理装置115は、ビットマップ画像データを属性毎のオブジェクトに分割するオブジェクト分割処理を行う。オブジェクト分割後のオブジェクトの属性種類は、文字、写真、グラフィック(図面、線画、表、ライン)、背景を指す。
ステップS302において、分割された各々のオブジェクトに対して、オブジェクトの種類(文字、写真、グラフィック、背景)を判定する。写真または背景と判定されたオブジェクトについては、ステップS303において、当該オブジェクトのビットマップ画像をJPEG圧縮する。一方、文字またはグラフィックと判定されたオブジェクトについては、ステップS304において、ベクトル化処理を行って、パス化されたデータ(ベクトルデータ)に変換する。
次に、ステップS305において、該オブジェクトが文字かどうかを判定し、文字の場合には、更にステップS308において、OCR処理を施し、文字コード化されたデータ(OCR結果の文字コードデータ)も取得する。S303及びS304で得た各オブジェクトのデータ(JPEGデータ、ベクトルデータ)と、S308で得た文字コードデータとを一つのファイルにまとめた後、ステップS306において、各オブジェクトに対して、最適なメタデータを付与する。
メタデータが付与された各々のオブジェクトは、ステップS307において、携帯情報端末107が表示可能なアプリケーション画像データに生成される。最後に、ステップS309において、データ処理装置115は、生成したアプリケーション画像データを携帯情報端末107に送信する。
<ビットマップ画像データ作成>
図4と図5を用いて、本実施例におけるビットマップ画像データ(文書画像データ)の作成について説明する。図4は、MFP100の画像読み取り部110を使用した場合のビットマップ画像データ作成のフローチャート、図5は、PC102上のアプリケーションを使用した場合のフローチャートである。図4または図5で生成されたビットマップ画像データに対して、上述した図3の処理が実行される。
MFP100の画像読み取り部110を使用した場合には、図4のステップS401において画像を読み込む。読み込まれた画像は、既にビットマップ画像データである。ステップS402において、そのビットマップ画像データに対して、画像読み取り部110に依存するスキャナ画像処理を行う。ここで言うスキャナ画像処理とは、例えば、色処理やフィルタ処理を指す。
PC102上のアプリケーションを使用した場合には、まず、図5のステップS501において、PC102上のアプリケーションを使用して作成したデータが、PC102上にあるプリントドライバを介してプリントデータに変換され、MFP100に送信される。ここで言うプリントデータとは、PDLを意味し、例えば、LIPS(商標)、Postscript(商標)等のページ記述言語を指す。次にステップS502において、MFP100内部に存在するインタープリタを介して、ディスプレイリストが生成される。そのディスプレイリストをステップS503において、レンダリングすることにより、ビットマップ画像データが生成される。
<メタデータ付与(S306)>
図6のフローチャートを用いて、図3のステップS306に示すメタデータの付与処理の詳細について説明する。まず、ステップS601において、S301で分割されたオブジェクトのそれぞれについて、各オブジェクトの周囲で一番近くに存在する文字オブジェクトを選択する。次に、ステップS602において、選択された文字オブジェクトに対して、形態素解析を行う。次に、ステップS603において、ステップS602で形態素解析結果により抽出された単語をメタデータとして各オブジェクトに付加する。なお、メタデータは、形態素解析だけではなく、画像特徴量抽出、構文解析等によっても作成できる。さらに、MFP100に内蔵されたBOX、およびデータベース105に既に保存されている文書、および、それに含まれるオブジェクトを対象に類似画像検索を行って、類似度の高い類似画像のオブジェクトとの関連付けを行っても良い。
<オブジェクト分割(S301)>
図7と図8を用いて、ステップS301のオブジェクト分割について、詳細に説明する。図7は、オブジェクト分割処理によって、ビットマップ画像データを複数のオブジェクトに分割した結果の一例である。図8は、オブジェクト分割したときの各オブジェクトのブロック情報および入力ファイル情報を表す。
ステップS301において、入力画像(図7の左)に対してオブジェクト分割処理を行うことにより、属性ごとに矩形ブロックに分割する(図7の右)。前述のように、矩形ブロックの属性としては、文字、写真、グラフィック(図面、線画、表、ライン)がある。
オブジェクト分割処理には、例えば以下のような手法がある。まず、MFP100内のRAM(不図示)に格納されたイメージデータを白黒に2値化し、黒画素輪郭で囲まれる画素塊を抽出する。さらに、このように抽出された黒画素塊の大きさを評価し、大きさが所定値以上の黒画素塊の内部にある白画素塊に対する輪郭追跡を行う。白画素塊に対する大きさ評価、内部黒画素塊の追跡というように、内部の画素塊が所定値以上である限り、再帰的に内部画素塊の抽出、輪郭追跡を行う。画素塊の大きさは、例えば画素塊の面積によって評価される。このようにして得られた画素塊に外接する矩形ブロックを生成し、矩形ブロックの大きさ、形状に基づき属性を判定する。例えば、縦横比が1に近く、大きさが一定の範囲の矩形ブロックは文字領域矩形ブロックの可能性がある文字相当ブロックとする。また、近接する文字相当ブロックが規則正しく整列しているときに、これら文字相当ブロックを纏めた新たな矩形ブロックを生成し、新たな矩形ブロックを文字領域矩形ブロックとする。また扁平な画素塊、もしくは、一定大きさ以上でかつ四角形の白画素塊を整列よく内包する黒画素塊をグラフィック領域矩形ブロック、それ以外の不定形の画素塊を写真領域矩形ブロックとする。
ステップS301では、このようにして生成された矩形ブロックのそれぞれについて、図8に示す、属性等のブロック情報および入力ファイル情報を生成する。図8において、ブロック情報には各ブロックの属性、位置の座標X、座標Y、幅W、高さH、OCR情報が含まれる。属性は1〜3の数値で与えられ、1は文字領域矩形ブロック、2は写真領域矩形ブロック、3はグラフィック領域矩形ブロックを示す。
座標X、Yは入力画像における各矩形ブロックの始点のX、Y座標(左上角の座標)である。幅W、高さHは矩形ブロックのX座標方向の幅、Y座標方向の高さである。OCR情報は、前記ステップS308のOCR処理で文字コード化されたデータへのポインタ情報の有無を示す。さらに入力ファイル情報として矩形ブロックの個数を示すブロック総数Nも保存しておく。
これらの矩形ブロックごとのブロック情報は、特定領域でのベクトル化に利用される。またブロック情報によって、特定領域とその他の領域を合成する際の相対位置関係を特定でき、入力画像のレイアウトを損なわずにベクトル化された領域とビットマップのままの領域を合成することが可能となる。
<ベクトル化(S304)>
図9のフローチャートを用いて、図3のステップS304のベクトル化処理について詳細に説明する。まず、ステップS901において、データ処理装置115は、特定領域が文字領域矩形ブロックであるか否か判断し、文字領域の矩形ブロックであればステップS902以下のステップに進む。一方、特定領域が文字領域矩形ブロックでないときは、ステップS912に移行する。
ステップS902〜S907では、パターンマッチング等の手法を用いて文字認識処理を行い、対応する文字コードを得る。例えば、ステップS902において、データ処理装置115は、特定領域に対し横書き、縦書きの判定(組み方向判定)を行うために、特定領域内で画素値に対する水平・垂直の射影を取る。次に、ステップS903において、ステップS902の射影の分散を評価する。水平射影の分散が大きい場合は横書き、垂直射影の分散が大きい場合は縦書きと判断する。ステップS904において、ステップS903の評価結果に基づき、組み方向を判定し、行の切り出しを行い、その後文字を切り出して文字画像を得る。文字列および文字への分解は、横書きならば水平方向の射影を利用して行を切り出し、切り出された行に対する垂直方向の射影から、文字を切り出す。縦書きの文字領域に対しては、水平と垂直について逆の処理を行う。行、文字切り出しに際して、文字のサイズも検出し得る。
次に、ステップS905において、ステップS904で切り出された各文字について、文字画像から得られる特徴を数十次元の数値列に変換した観測特徴ベクトルを生成する。特徴ベクトルの抽出には種々の公知手法があり、例えば、文字をメッシュ状に分割し、各メッシュ内の文字線を方向別に線素としてカウントしたメッシュ数次元ベクトルを特徴ベクトルとする方法がある。ステップS906において、ステップS905で得られた観測特徴ベクトルと、あらかじめフォントの種類ごとに求められている辞書特徴ベクトルとを比較し、観測特徴ベクトルと辞書特徴ベクトルとの距離を算出する。ステップS907において、ステップS906で算出された距離を評価し、最も距離の近いフォントの種類を認識結果とする。
次に、ステップS908において、ステップS907における距離評価の最短距離が所定値よりも大きいか否かにより、類似度を判断する。最短距離が所定値以上の場合(類似度が低い場合)は、辞書特徴ベクトルにおいて、形状が類似する他の文字に誤認識している可能性が高い。そこで最短距離が所定値以上の場合(類似度が低い場合)は、ステップS907の認識結果を採用せず、ステップS911の処置に進む。最短距離が所定値より小さいとき(類似度が高い場合)は、ステップS907の認識結果を採用し、ステップ909に進む。
ステップS909では、文字フォントの種類を認識する。文字認識の際に用いる、フォントの種類数分の辞書特徴ベクトルを、文字形状種すなわちフォント種に対して複数用意しておく。これを、パターンマッチングの際に、文字コードとともにフォント種を出力することで、文字フォントを認識し得る。次に、ステップS910において、文字認識およびフォント認識よって得られた文字コードおよびフォント情報を用いて、各々あらかじめ用意されたアウトラインデータを用いて、各文字をベクトルデータに変換する。なお、入力画像がカラーの場合は、カラー画像から各文字の色を抽出してベクトルデータとともに記録する。
一方、ステップS911では、文字をグラフィックと同様に扱い、該文字をアウトライン化する。すなわち誤認識を起こす可能性の高い文字については、見かけ上ビットマップに忠実なアウトラインのベクトルデータを生成する。また、ステップS912では、特定領域が文字領域矩形ブロックでないとき(すなわちグラフィック領域矩形ブロックのとき)、画像の輪郭に基づいてベクトル化の処理を実行する。以上の処理により、文字領域矩形ブロックおよびグラフィック領域矩形ブロックに属するイメージ情報をベクトルデータに変換出来る。
<グラフィック領域矩形ブロックのベクトル化(S912)>
図10、図11、図12を用いて、ステップS912のグラフィック領域矩形ブロックのベクトル化処理について詳細に説明する。グラフィック領域矩形ブロックのベクトル化処理は、該領域内で抽出された黒画素塊の輪郭に基づいてベクトル化を行う。図10は、ベクトル化処理における角抽出の処理を示す図、図11は、ベクトル化処理における輪郭線まとめの処理を示す図である。図12は、グラフィック領域のベクトル化処理の詳細フローチャートである。
図12のステップS1201において、データ処理装置115は、線画等を直線および/または曲線の組み合わせとして表現するために、曲線を複数の区間(画素列)に区切る「角」を検出する。角とは曲率が極大となる点であり、図10に示すように、曲線上の画素Piが角か否かの判断は以下のように行う。すなわち、Piを起点とし、曲線に沿ってPiから両方向に所定画素(k個とする)ずつ離れた画素Pi−k、Pi+kを線分Lで結ぶ。画素Pi−k、Pi+k間の距離をd1、線分Lと画素Piとの距離をd2、曲線の画素Pi−k 、Pi+k間の弧の長さをAとする。d2が極大となるとき、あるいは比(d1/A)が閾値以下となるときに画素Piを角と判断する。角によって分割された画素列を、直線あるいは曲線で近似する。直線への近似は最小二乗法等により実行し、曲線への近似は3次スプライン関数などを用いる。画素列を分割する角の画素は近似直線あるいは近似直線における、始端または終端となる。さらにベクトル化された輪郭内に白画素塊の内輪郭が存在するか否かを判断し、内輪郭が存在するときはその輪郭をベクトル化し、内輪郭の内輪郭というように、再帰的に反転画素の内輪郭をベクトル化する。以上のように、輪郭の区分線近似を用いれば、任意形状の図形のアウトラインをベクトル化することができる。元原稿がカラーの場合は、カラー画像から図形の色を抽出してベクトルデータとともに記録する。
ステップS1202では、ステップS1201で求めた輪郭線が近接している場合はそれらをまとめて太さを持った線とする処理を行う。図11に示すように、ある注目区間で外輪郭PRjと、内輪郭PRj+1あるいは別の外輪郭が近接している場合、2個あるいは複数の輪郭線をひとまとめにし、太さを持った線として表現することができる。例えば、輪郭PRj+1の各画素Piから輪郭PRj上で最短距離となる画素Qiまでの距離PiQiを算出し、PiQiのばらつきが僅かである場合には、注目区間を画素Pi、Qiの中点Miの点列に沿った直線または曲線で近似し得る。近似直線、近似曲線の太さは、例えば距離PiQiの平均値とする。線や線の集合体である表罫線は、太さを持つ線の集合とすることにより、効率よくベクトル表現することができる。
ステップS1203において、各ベクトルデータの始点、終点を算出する。ステップS1204において、ステップS1203で求められた始点、終点情報を用いて、図形要素を検出する。図形要素とは、区分線が構成している閉図形であり、検出に際しては、始点、終端となっている共通の角の画素においてベクトルを連結する。すなわち、閉形状を構成する各ベクトルはその両端にそれぞれ連結するベクトルを有しているという原理を応用する。
ステップS1205において、ベクトルデータより両端に連結していない不要なベクトルを除去し、閉図形を構成するベクトルを抽出する。ステップS1206において、閉図形を構成するベクトルについて、いずれかのベクトルの端点(始点または終点)を開始点とし、一定方向、例えば時計回りに、順にベクトルを探索する。すなわち、他端点において他のベクトルの端点を探索し、所定距離内の最近接端点を連結ベクトルの端点とする。閉図形を構成するベクトルを1まわりして開始点に戻ったとき、通過したベクトルを全て一つの図形要素を構成する閉図形としてグループ化する。また、閉図形内部にある閉図形構成ベクトルも全てグループ化する。さらにまだグループ化されていないベクトルの始点を開始点とし、同様の処理を繰り返す。
ステップS1207において、ステップS1205で除去された不要ベクトルのうち、ステップS1206で閉図形としてグループ化されたベクトルに端点が近接しているベクトルを検出し、一つの図形要素としてグループ化する。これによって、図形要素内に存在する他の図形要素、もしくは区分線をグループ化し、一つの図形オブジェクトとすることが出来る。また、図形要素内に他の図形要素、区分線が存在しない場合は図形要素を図形オブジェクトとする。
以上の処理によってグラフィック領域矩形ブロックを、ベクトル化された一つのオブジェクトに変換することが出来る。
<アプリケーション画像データ生成(S307)>
図13と図14を用いて、ステップS307のアプリケーション画像データ生成について詳細に説明する。図13は、本実施例に係るベクトル化処理結果のデータ構成を示すマップである。図14は、アプリケーション画像データ生成処理の詳細を示すフローチャートである。
まず、ステップS1401において、ステップS304のベクトル化で生成された中間データを取得する。本実施形態において、中間データは、以下のようなドキュメント・アナリシス・アウトプット・フォーマット(以下、「DAOF」)と呼ぶ形式で保存されているものとする。
図13に示すように、DAOFは、ヘッダ1301、レイアウト記述データ部1302、文字認識記述データ部1303、表記述データ部1304、画像記述データ部1305よりなる。ヘッダ1301には、処理対象の入力画像に関する情報が保持される。レイアウト記述データ部1302には、入力画像中の矩形ブロックの属性である文字、グラフィック(線画、図面 、表、ライン)、写真等の情報と、これら属性が認識された各矩形ブロックの位置情報が保持される。文字認識記述データ部1303には、文字領域矩形ブロックのうち、文字認識して得られる文字認識結果が保持される。表記述データ部1304には、表の属性を持つグラフィック領域矩形ブロックの表構造の詳細が格納される。画像記述データ部1305には、ベクトル化の処理が指示された特定領域においては、ベクトル化処理により得られたブロックの内部構造や、画像の形状や文字コード等あらわすデータの集合が保持される。一方、ベクトル化処理の対象ではない特定領域以外の矩形ブロックでは、オブジェクトに分割されたビットマップ画像データそのものが保持される。
次に、ステップS1402において、後述する文書構造ツリー生成を行う。ステップS1403において、文書構造ツリーを元に、DAOF内の実データを取得し、後述するアプリケーション画像データを生成する。
<文書構造ツリー生成(S1402)>
図15、図16、図17を用いて、ステップS1402の文書構造ツリー生成について説明する。図15は、文書構造ツリー生成の処理を示すフローチャートである。図16は、文書構造ツリー生成処理の対象となる文書の例を示す図で、図17は、文書構造ツリー生成の処理によって生成される文書構造ツリーを示す図である。
図15に示す文書構造ツリー生成の処理における全体制御の基本ルールとして、処理の流れはミクロブロック(単一矩形ブロック)からマクロブロック(矩形ブロックの集合体)へ移行する。以後「矩形ブロック」は、ミクロブロックおよびマクロブロック両者を意味するものとする。
まず、ステップS1501において、データ処理装置115は矩形ブロック単位で、縦方向の関連性に基づき、矩形ブロックを再グループ化する。ここで、関連性とは、距離が近い、ブロック幅(横方向の場合は高さ)がほぼ同一であることなどの特徴によって定義される。また、距離、幅、高さなどの情報はDAOFを参照し、抽出する。なお、図15の処理は繰り返し実行されることがあるが、処理開始直後はミクロブロック単位での判定となる。
例えば、図16の文書では、最上部に矩形ブロックT1、T2が横方向に並列されている。矩形ブロックT1、T2の下には矩形T3、T4、T5、T6が存在し、更にその下には横方向セパレータU1が存在し、横方向セパレータU1の下に矩形ブロックT7、T8、T9、T10が存在する。矩形ブロックT3、T4は、最上部の矩形ブロックT1とT2の下側の領域における左半部において上下の縦方向に配列され、矩形ブロックT5とT6は右半部において上下に配列されている。ステップS1501の縦方向の関連性に基づくグルーピングの処理を実行すると、矩形ブロックT3とT4が1個のグループ(矩形ブロック)S1にまとめられ、矩形ブロックT5とT6が1個のグループ(矩形ブロック)S2にまとめられる。グループS1、S2は同一階層となる。矩形ブロックS3、S4はセパレータU1の下に存在し、ステップ1501の縦方向の関連性に基づくグルーピング処理を実行すると、矩形ブロックS3とS4が1個のグループ(矩形ブロック)W3にまとめられる。
次に、ステップS1502において、縦方向のセパレータの有無をチェックする。セパレータは、DAOF中でライン属性を持つオブジェクトであり、明示的にブロックを分割する機能をもつ。セパレータを検出すると処理対象の階層において、セパレータを境界として入力画像の領域を左右に分割する。図16では縦方向のセパレータは存在しない。
次に、ステップS1503において、縦方向のグループ高さの合計が入力画像の高さに等しくなったか否か判断する。すなわち縦方向(例えば上から下)に処理対象の領域を移動しながら、横方向のグルーピングを行うとき、入力画像全体の処理が終了したときには、グループ高さ合計が入力画像高さになることを利用し、処理の終了判断を行う。グルーピングが終了したときはそのまま処理終了し、グルーピングが終了していなかったときはステップS1504に進む。
次に、ステップS1504において、横方向の関連性に基づくグルーピングの処理を実行する。これによって、例えば図16の矩形ブロックT1とT2が1個のグループ(矩形ブロック)W1にまとめられ、矩形ブロックS3とS4が1個のグループ(矩形ブロック)W2にまとめられる。T7とT8が1個のグループ(矩形ブロック)S3にまとめられ、T9とT10が1個のグループ(矩形ブロック)S4にまとめられる。グループS3とS4は同一階層、グループW1とW2とW3は同一階層となる。ここでも、処理開始直後はミクロブロック単位での判定となる。
次に、ステップS1505において、横方向のセパレータの有無をチェックする。セパレータを検出すると、処理対象の階層において、入力画像の領域を、セパレータを境界として上下に分割する。図16では横方向のセパレータU1が存在する。以上の処理結果は図17のツリーとして登録される。
図17において、入力された1ページのビットマップ画像データV1は、最上位階層にグループW1、W2、W3、セパレータU1を有する。グループW1には第2階層の矩形ブロックT1、T2が属する。グループW2には、第2階層のグループS1とS2が属し、グループS1には、第3階層の矩形ブロックT3とT4が属し、グループS2には、第3階層の矩形ブロックT5とT6が属する。グループW3には、第2階層のグループS3とS4が属し、グループS3には、第3階層の矩形ブロックT7とT8が属し、グループS4には、第3階層の矩形ブロックT9とT10が属する。本実施例において、V1はページを表し、V1の下位階層にあるものがオブジェクトとなる。
最後に、ステップS1506において、横方向のグループ長合計が入力画像の幅に等しくなったか否か判断する。これによって横方向のグルーピングに関する終了判断を行う。横方向のグループ長がページ幅となっている場合は、文書構造ツリー生成の処理を終了する。横方向のグループ長がページ幅となっていないときは、ステップS1501に戻り、再びもう一段上の階層で、縦方向の関連性チェックから繰り返す。
図18に本実施例におけるアプリケーション画像データのフォーマットの一例を示す。本実施例では、アプリケーション画像データのフォーマットとして、Scalable Vector Graphics(以下、「SVG」)形式を用いて説明する。なお、本実施例ではアプリケーション画像データをSVG形式で表記しているが、文書の意味や構造を記述・保持できる画像フォーマットであれば良く、これに限定されるものではない。
図18では説明のため、各オブジェクトの表記を枠1801と1802、及び1804で囲い示す。各オブジェクトは、オブジェクトの領域を示す領域情報と、DAOF内の実データから取得する描画要素を持つ。また、領域情報のみで描画要素を持たないオブジェクト(例えば図17のV1、V2など)を持つことも可能である。1801は写真属性を示し、そこには写真オブジェクトの領域の示す領域情報と、描画要素としてビットマップ情報が示されている。1802は文字属性を示し、文字オブジェクトのベクトルデータと、1803にステップS308のOCR処理で得られる文字コードデータ及びステップS304のベクトル化処理で得られる文字サイズが示される。また、前記ステップS304のベクトル化処理で得られる文字領域の組み方向(縦書き、もしくは横書き)についても記すことが可能である。続く1804は、線画などのグラフィックオブジェクトを表す。
<携帯情報端末のハードウェア構成>
図19は、本実施例における携帯情報端末107の構成例を示すブロック図である。携帯情報端末107は、メインボード1900、LCD1901、タッチパネル1902、ボタンデバイス1903から構成される。また、LCD1901とタッチパネル1902をまとめてタッチUI1904と呼ぶこととする。
メインボード1900の主な構成要素は以下の通りである。CPU1905、無線LANモジュール1906、電源コントローラ1907、ディスプレイコントローラ(DISPC)1908、パネルコントローラ(PANELC)1909、ROM1910、RAM1911、二次電池1912、タイマー1913。それぞれのモジュール1905〜1913は、バス(不図示)によって接続されている。
CPU1905は、バスに接続される各デバイスを制御すると共に、ROM1910に記憶された後述のソフトウェアモジュール2000を、RAM1911に展開して実行するプロセッサである。RAM1911は、CPU1905のメインメモリ、ワークエリア、LCD1901に表示するビデオイメージ用エリア、およびMFP100から送信されるアプリケーション画像データの保存領域として機能する。
ディスプレイコントローラ1908は、CPU1905の要求に応じて、RAM1911に展開されたビデオイメージ出力を高速に切り替えるとともに、LCD1901に同期信号を出力する。結果として、RAM1911のビデオイメージが、DISPC1908の同期信号に同期してLCD1901に出力され、LCD1901上にイメージが表示される。
パネルコントローラ1909は、CPU1905の要求に応じて、タッチパネル1902およびボタンデバイス1903を制御する。その制御によって、タッチパネル1902上の指又はスタイラスペンなどの指示物の押下位置や、ボタンデバイス1903上の押下されたキーコードなどが、CPU1905に通知される。押下位置情報は、タッチパネル1902の横方向の絶対位置を示す座標値(以下X座標)と、縦方向の絶対位置を示す座標値(以下Y座標)から成る。タッチパネル1902は複数ポイントの押下を検知することが可能で、その場合CPU1905には押下点数分の押下位置情報が通知される。
電源コントローラ1907は、外部電源(不図示)と接続され電力の供給を受ける。これによって、電源コントローラ1907に接続された二次電池1912を充電しながら、且つ、携帯情報端末107全体に電力を供給する。外部電源から電力が供給されないときは、二次電池1912からの電力を携帯情報端末107全体に供給する。
無線LANモジュール1906は、CPU1905の制御に基づいて、前記LAN102に接続された無線アクセスポイント(不図示)上の無線LANモジュールとの無線通信を確立し、携帯情報端末107との通信を仲介する。無線LANモジュール1906には、例えばIEEE802.11bなどがある。
タイマー1913は、CPU1905の制御に基づいて、図20のジェスチャイベント発生部2001へのタイマー割込を発生させる。ジェスチャイベント発生部2001については後述する。また、携帯情報端末107には地磁気センサ(不図示)や加速度センサ(不図示)がバス(不図示)に接続されている。タイマー1913は、CPU1905の制御に基づいて、携帯情報端末107の傾きを検知し、携帯情報端末107が所定以上の傾きを得ると、携帯情報端末107の向きを変更し、描画部2003にLCD1901への描画の指示を送る。CPU1905は、前記携帯情報端末107の向きが変更されるとき、LCD1901の幅および高さを入れ替えて、以降の処理を行う。
<携帯情報端末のソフトウェア構成>
図20は、携帯情報端末107のCPU1905で実行処理されるソフトウェアモジュール2000の構成を示すブロック図である。ソフトウェアモジュール2000を構成する各モジュールについて説明する。
ジェスチャイベント発生部2001は、ユーザのタッチ入力を受けて、後述する各種ジェスチャイベントを発生させる。ジェスチャイベント発生部2001は、発生したジェスチャイベントを、ジェスチャイベント処理部2002へ送信する。ジェスチャイベント処理部2002は、ジェスチャイベント発生部2001で発生したジェスチャイベントを受信して、各ジェスチャイベントと、前記アプリケーション画像データに記述された文書構造に応じた処理を実行する。描画部2003は、ジェスチャイベント処理部2002の実行結果に応じて、MFP100から送信される前記アプリケーション画像データをLCD1901へ描画する。アプリケーション画像データの表示の方法については後述する。
<ジェスチャイベント>
図21を用いて、ジェスチャイベント発生部2001で発生するジェスチャイベント名の一覧と、各イベントが発生したときに、ジェスチャイベント処理部2200へ送信する情報について説明する。なお、以下では、ユーザのタッチ入力の例として指を使った場合を示すが、タッチ入力はスタイラスペンなどによる入力でも良い。
図21(a)は、タッチ押下イベントであり、最新のタッチ座標の座標値とタッチ座標数が送信される。タッチ座標とは、タッチパネル1902にユーザの指が触れている1点の座標のことで、X座標とY座標で表される1組の座標値を持つ。また、タッチ座標数とは、タッチパネル1902にユーザの指が接触したタッチ座標の数を示している。なお、タッチ座標は、タッチパネル1902へユーザの指が触れたとき、指が移動したとき、指が離れたとき、タイマー1913からの割り込みが発生したときに更新される。
図21(b)は、スワイプイベントであり、最新のタッチ座標の座標値と、最新と直前の座標値の差分から計算した移動距離が送信される。ここで、スワイプとは、指先をタッチパネル1902に接触させたまま、1方向に移動(滑らすような)動作のことをいう。
図21(c)は、ピンチインイベントであり、最新の2点のタッチ座標の中心座標値、及び、2点のタッチ座標を結ぶ直線の縮小距離から計算したピンチインの縮小率が送信される。ここで、ピンチインとは、2つの指先をタッチパネル1902に接触させたまま、互いに近づける(つまむような)動作のことをいう。図21(d)は、ピンチアウトイベントであり、最新の2点のタッチ座標の中心座標値、及び、2点のタッチ座標を結ぶ直線の拡大距離から計算したピンチアウトの拡大率が送信される。ここで、ピンチアウトとは、2つの指先をタッチパネル1902に接触させたまま、互いに遠ざける(指を広げるような)動作のことをいう。
図21(e)は、2点スワイプイベントであり、最新の2点のタッチ座標の座標値、及び、2点のタッチ座標の最新と直前の座標値の差分から計算した移動距離が送信される。2点スワイプイベントは、2点のタッチ座標が同じ方向に移動している場合に発生する。図21(f)は、ローテートイベントであり、最新の2点のタッチ座標の座標値から計算した回転の中心座標値、及び、2点のタッチ座標の最新と直前の座標値から計算した回転角度が送信される。ここでローテートとは、2つの指先をタッチパネル1902に接触させたまま、2つの指先をタッチパネル1902に対して回転させる動作のことを言う。
図21(g)は、フリックイベントであり、最新のタッチ座標の座標値、及び、最新と直前の座標値から計算した指の移動速度が送信される。ここでフリックとは、スワイプ中に指を離す(指をはじくような)動作のことをいう。図21(h)は、タッチ解除イベントであり、タッチパネル1902からユーザの指が離れたときの最新のタッチ座標の座標値、及び、座標数が送信される。
図21(i)は、ダブルタップイベントであり、最新のタッチ座標の座標値が送信される。ここでダブルタップとは、所定の時間内に後述のシングルタップイベントが発生したことを言う。図21(j)は、シングルタップイベントであり、最新のタッチ座標の座標値が送信される。ここでシングルタップとは、前述のタッチ押下イベントの後、所定の時間内にタッチ解除イベントが発生したことを言う。
図21(k)は、ロングタップイベントであり、最新のタッチ座標の座標値が送信される。ここでロングタップとは、前述のタッチ押下イベントの後、所定の時間以上経過してからタッチ解除イベントが発生したことを言う。図21(l)は、タッチアンドホールドイベントであり、最新のタッチ座標の座標値が送信される。ここで、タッチアンドホールドイベントとは、タッチパネル1902にユーザの指が触れてから一度も移動することなく所定の時間以上経過したことを言う。
<携帯情報端末におけるアプリケーション画像データ受信>
図22と図23を用いて、本実施例における携帯情報端末107のアプリケーション画像データ受信時の処理について説明する。図22は、携帯情報端末107がアプリケーション画像データを受信した際のフローチャートである。図23は、本実施例における携帯情報端末107のタッチUI1904の画面表示例である。
まず、ステップS2200において、携帯情報端末107は、無線LANモジュール1906を介してMFP100からアプリケーション画像データを受信すると、RAM1911に受信したアプリケーション画像データを保存する。次に、ステップS2201において、RAM1911に保存したアプリケーション画像データの構文を解析し、先頭ページと、それに含まれるオブジェクトを読み込む。次に、ステップS2202において、描画部2003は読み込んだ先頭ページに含まれる背景、文字、写真、グラフィックの全てのオブジェクトを、オブジェクトの始点の座標と幅、高さに応じてレンダリングしてタッチUI1904の表示状態を更新する。
このとき、先頭ページは、図23のページ2300に示すように、タッチUI1904の幅に合わせて表示倍率が制御される。また、前記表示倍率に縮小したときのページの高さがタッチUI1904よりも小さい場合は、タッチUI1904の中央に表示されるように、タッチUI1904上の座標において、ページ2300の始点が制御される。また、前記表示倍率に縮小したときのページ2300の高さがタッチUI1904よりも大きい場合は、タッチUI1904上の座標において、ページ2300の始点がタッチUI1904の始点(例えば画面の左上)に合うように制御される。このように、タッチUI1904においてページ全体を表示する表示制御方法を、本実施例では「ページ表示モード」と呼ぶ。なお、本実施例のアプリケーション画像データにおいて、文字オブジェクトは、図18の1802に示した通り、ベクトルデータと共に1803の文字コードデータを保持している。本実施例の描画部2003は、ページ内に文字オブジェクトがある場合、ページ2300のレンダリングにベクトルデータのみを用い、一方で、後述する文字折り返し画像のレンダリングに文字コードデータを用いる。
<アプリケーション画像データの操作に係るソフトウェアモジュール>
図23と図24を用いて、本実施例における携帯情報端末107のアプリケーション画像データの操作制御に係わるソフトウェアモジュールについて説明する。図24は、ジェスチャイベント処理部2002において、アプリケーション画像データの操作制御に係わるソフトウェアモジュールの構成を示すブロック図である。
ジェスチャイベント処理部2002は、ジェスチャイベント発生部2001から、図21に示すジェスチャイベントを受信する。表示変更イベント処理部2400は、ジェスチャイベント処理部2002が受信するジェスチャイベントの内、シングルタップイベント(図21(j))に対する処理を行う。表示変更イベント処理部2400は、シングルタップイベントを受信すると、シングルタップイベントのタッチ座標の座標値が、図23のモード切替ボタン2301、次へボタン2302、前へボタン2303の何れの上にあるかを判定する。そして、シングルタップイベントのタッチ座標がモード切替ボタン2301上である場合は、後述するモード切替処理を行う。また、前記タッチ座標が次へボタン2302上である場合は、後述する次選択処理(次へボタン選択処理)を行い、前記タッチ座標が前へボタン2303上である場合は、後述する前選択処理(前へボタン選択処理)を行う。次選択処理と前選択処理は、表示変更イベント処理部2400内の表示順番制御部2402と表示範囲制御部2403において行われる。
スワイプイベント処理部2401は、図21(b)のスワイプイベントに対する処理を行う。ジェスチャイベント処理部2002がスワイプイベントを受信すると、スワイプイベントの移動距離に応じて、タッチUI1904上の座標において、ページ2300および後述する文字折り返し画像の始点を移動させる。そして、その上でタッチUI1904の表示状態を更新する。また、スワイプイベント処理部2401内の移動範囲制限部2404において、後述する移動範囲制限処理を行って、タッチUI1904に表示されるページ2300の移動範囲を制限する。
拡大・縮小イベント処理部2405は、図21(c)のピンチインイベントと、図21(d)のピンチアウトイベントに対する処理を行う。ジェスチャイベント処理部2002は、ピンチインイベントやピンチアウトイベントを受信すると、前記二つのイベントの縮小率もしくは拡大率に応じてページ2300および後述する文字折り返し画像のレンダリング時の文字サイズを変化させる。その上でタッチUI1904の表示状態を更新する。また、拡大・縮小イベント処理部2405内の縮小時表示モード切替部2406において、後述する縮小時表示モード切替処理を、拡大時表示モード切替部2407において、後述する拡大時表示モード切替処理を行う。
オブジェクト選択処理部2408は、図21(i)のダブルタップイベントに対する処理を行う。ジェスチャイベント処理部2002がダブルタップイベントを受信すると、ダブルタップイベントのタッチ座標の座標値を用いて後述するオブジェクト選択処理を行う。なお、前記オブジェクト選択処理は、前記ページ表示モードでのみ動作するようオブジェクト選択イベント処理部2408によって制御される。
<表示モード切替>
図23と図25、図26、図33を用いて、表示変更イベント処理部2400において行われるモード切替処理について説明する。図25は、モード切替処理のフローチャートであり、モード切替ボタン2301がユーザによりタップ指示されるのに応じて実行される。図26と図33は、本実施例における携帯情報端末107のタッチUI1904の画面表示例である。
まず、ステップS2500において、表示変更イベント処理部2400は、モード切替ボタンが指示された時点で、携帯情報端末107に設定中の表示モードを取得する。表示モードとは、携帯情報端末107がアプリケーション画像データをタッチUI1904に表示する方法を示し、本実施例の携帯情報端末107は次の3つの表示モードを有する。第一に、ページ全体を表示するのに適したページ表示モードである。第二に、図26に示すようにページ内の一部の領域(すなわちページ画像内の各オブジェクト)を拡大表示するのに適した部分領域表示モードである。第三に、図33に示すように文字オブジェクトの文字を読むのに適した折り返し表示モードである。
前述した通り、アプリケーション画像データを携帯情報端末107が受信した直後はページ表示モードが設定されている。部分領域表示モードは、図26に示す通り、ページ2300内の各オブジェクトが大きく表示されるようにページ2300の表示倍率と始点を制御する表示モードである。文字オブジェクト2601を拡大表示対象のオブジェクトとして選択したときに表示される画面を図26(b)に示す。なお、図26(a)のオブジェクト2601を囲む破線は、説明をわかり易くするために描いたもので、ページ2300上には存在しない。また、本実施例では、図26(b)に示すように、拡大表示対象のオブジェクト2601の領域が透明で且つそれ以外の領域が半透明グレーである半透明マスク2600を、ページ2300の上に重ねて表示する。こうすることによって、対象のオブジェクトだけが見やすくなる。このような半透明マスクを重ねて表示することにより、対象のオブジェクト以外が暗く表示されるので、対象のオブジェクトが強調表示され、ユーザは表示対象になっているオブジェクトの領域を特定しやすくなる。
表示変更イベント処理部2400は、モード切替ボタン2301が指示されたときに設定中の表示モードが、部分領域表示モードもしくは折り返し表示モードである場合にはステップS2501に、ページ表示モードである場合にはステップS2504を実行する。折り返し表示モードは、図33に示す通り、文字オブジェクトが持つ前記文字コードデータを、タッチUI1904に合わせてレンダリングする表示モードである。折り返し表示モードへは、部分領域表示モードによって文字コードデータを持つ文字オブジェクトが強調表示されている場合に遷移できる。折り返し表示モードの詳細は後述する。
ステップS2501において、表示変更イベント処理部2400は、図26の半透明マスク2600を非表示設定(半透明マスクOFF)にして、ページ表示モードへの切り替えを行う。ステップS2502において、表示変更イベント処理部2400は、前述した通り、タッチUI1904の幅に合わせてページ2300の表示倍率を制御すると共に、ページ2300の始点を制御して、ページの表示範囲を決定する。ステップS2503において、表示変更イベント処理部2400は、当該決定されたページの表示範囲に基づいて、タッチUI1904の表示状態を更新する。
また、モード切替ボタン2301が指示されたときに設定中の表示モードがページ表示モードであった場合には、ステップS2504において、表示変更イベント処理部2400は、表示モードを部分領域表示モードへ切り替える。そして、半透明マスク2600を表示する設定(半透明マスクON)に変更する。次に、ステップS2505において、表示変更イベント処理部2400は、ページ2300内の先頭オブジェクトを読み込み、先頭オブジェクトの始点、幅、高さを取得する。ここで先頭オブジェクトとは、アプリケーション画像データの文書構造ツリーにおいて、最初に読み込まれるオブジェクトである。
表示変更イベント処理部2400内の表示範囲制御部2403は、ステップS2506において、後述する部分領域表示範囲決定処理を行った後、ステップS2503で、当該決定された表示範囲に基づいてタッチUI1904の表示状態を更新する。なお、S2506の部分領域表示範囲決定処理では、ステップS2505で読み込んだオブジェクトの属性に応じて、ページの表示倍率や始点を制御し、タッチUI1904に表示する部分領域の表示範囲を決定する。また、このとき表示対象となっているオブジェクトの部分領域以外の領域にはグレーの半透明マスクがかけられるので、ユーザは、表示対象となっているオブジェクトを識別しやすくなる。
<部分領域表示範囲決定(S2506)>(第1の表示制御)
表示範囲制御部2403で行われるステップS2506の部分領域表示範囲決定処理の詳細について、図27のフローチャートを用いて説明する。まず、ステップS2700において、表示範囲制御部2403は、読み込んだオブジェクトの属性を判定する。属性が文字の場合はステップS2701に進み、属性が表である場合はステップS2711に進み、それ以外の属性である場合はステップS2712に進む。
ステップS2701において、表示範囲制御部2403は、文字属性である当該表示対象のオブジェクトが、箇条書きであるかどうかを判定する。ここでいう箇条書きのオブジェクトとは、各文字列もしくは行の先頭に点や数字といった行頭文字が存在するオブジェクトを指すものとする。なお、前記行頭文字は、OCR結果から取得することができる。オブジェクトが箇条書きでなく、通常の文字列であった場合にはステップS2702に進み、箇条書きであった場合にはステップS2712に進む。
ステップS2702において、表示範囲制御部2403は、オブジェクトの文字の組み方向を取得する。オブジェクトの組み方向は、ステップS304のベクトル化の過程で得られている。ステップS2703において、表示範囲制御部2403は、文字の組み方向を判定し、組み方向が縦書きである場合にはステップS2704に進み、横書きである場合にはステップS2705に進む。文字の組み方向が縦書きの場合、ステップS2704において、表示範囲制御部2403は、当該オブジェクトの高さがタッチUI1904の高さに入るようにページの表示倍率を設定する。また、文字の組み方向が横書きの場合、ステップS2705において、表示範囲制御部2403は、当該オブジェクトの幅がタッチUI1904の幅に入るようにページの表示倍率を設定する。
次に、ステップS2706において、ステップS2704またはステップS2705で設定した表示倍率に拡縮したオブジェクトの全体がタッチUI1904に表示できるかどうかを判断する。オブジェクト全体がタッチUI1904よりも大きく、全体を表示できない場合にはステップS2707に進み、一方、オブジェクト全体がタッチUI1904よりも小さく、全体を表示できる場合にはステップS2710に進む。
ステップS2707において当該オブジェクトにおける文字の組み方向を判定し、縦書きであると判定した場合はステップS2708に進み、横書きであると判定した場合はステップS2709に進む。ステップS2708において、表示範囲制御部2403は、オブジェクト全体がタッチUI1904に表示できない縦書きの文字領域を表示するので、当該オブジェクトの右上端がタッチUI1904の右上端に合うように、前記ページ2300の始点位置を設定する。すなわち、縦書きの場合の先頭行が表示されるように表示位置を設定する。ステップS2709において、表示範囲制御部2403は、オブジェクト全体がタッチUI1904に表示できない横書きの文字領域を表示するので、当該オブジェクトの左上端がタッチUI1904の左上端に合うように、前記ページ2300の始点を設定する。すなわち、横書きの場合の先頭行が表示されるように表示位置を設定する。また、ステップS2710において、オブジェクト全体がタッチUI1904の画面内に収まるので、表示範囲制御部2403は、当該オブジェクトの中央がタッチUI1904の中央に合うようにページ2300の始点を設定する。
なお、ステップS2700でオブジェクトの属性が表であると判定した場合には、ステップS2711において、表示範囲制御部2403は、表のヘッダ位置を検出する。ヘッダの位置は、例えば、先頭行(一番上の行)と先頭列(一番左の列)の文字のフォント種がボールドであるか否か、ベクトル化した際のベクトルデータの近似曲線の太さ、表罫線の太さ、表の各セルの背景色などによって判断することができる。ステップS2711で検出した表のヘッダ位置が先頭行である場合には、ステップS2703からステップS2705に進む。また、表のヘッダ位置が先頭列である場合には、ステップS2703からステップS2704に進む。また、ステップS2707では、表のヘッダは一番上の行か一番左の列に存在することが一般的であるため、ステップS2709に進み、オブジェクトの左上端がタッチUIの左上端に合うようにページの始点を設定する。このようにすることで、表のヘッダが表示されるように表示位置が設定されることになる。
また、ステップS2700でオブジェクトの属性がその他の属性(文字・表以外の属性)と判定された場合、ステップS2712において、表示範囲制御部2403は、当該オブジェクト全体がタッチUI1904に入るように、ページの表示倍率を設定する。ステップS2701で箇条書きであると判断された場合も同様である。そして、ステップS2710において、オブジェクトの中央がタッチUI1904の中央に合うようにページ2300の始点を設定する。
<次へボタン選択処理>
次へボタン2302がユーザによりタップされたときに実行される次選択処理(次へボタン選択処理)について、図28のフローチャートと図30のフローチャートと図32を用いて説明する。まず、ステップS2800において、表示変更イベント処理部2400は、次へボタン2302がタップされたときに携帯情報端末107に設定されている表示モードを取得する。取得した表示モードが部分領域表示モードである場合には、ステップS2801に進み、ページ表示モードである場合にはステップS2805に進む。
ステップS2801において、表示順番制御部2402は、現在読み込んでいるページの全オブジェクトから、文書構造ツリーに基づいて次に表示すべきオブジェクトを選択し、そのオブジェクトを読み込む。本実施例において、文書ツリー構造上の表示順番は、文書ツリー構造において、先頭の上位階層のオブジェクト、そのオブジェクトの下位階層に属するオブジェクトの順である。更に、その下位階層のオブジェクトの表示が全て終わった後に、次の上位階層のオブジェクト、その下位階層のオブジェクト、という順序で表示する。
例えば、図17の文書構造ツリーにおいて、V1はページを表し、最初に読み込まれるオブジェクトはW1である。W1のオブジェクトが部分領域表示モードでタッチUI1904に表示されている状態で、次選択処理が行われると、W1は下位階層を持つため、T1のオブジェクトが読み込まれる。さらに、T1のオブジェクトが表示されている状態で次選択処理が行われると、T1は下位階層を持たず、同階層にT2が存在するため、T2が読み込まれる。T2のオブジェクトが表示されている状態で次選択処理が行われると、T2は下位階層を持たず、同階層に次のオブジェクトは存在しないため、次の上位階層のW2が読み込まれる。なお、本実施例において、描画要素を持たないW1を選択して読み込むとしているが、描画要素を持つT1やT2だけを選択するようにしても良いことは言うまでもない。また例えば、文字属性のオブジェクトのみなど、特定の属性を持つオブジェクトのみの選択や、特定の属性のみを除外して選択することも可能である。さらに、W1やS1といったそれ単体では描画要素を持たず、下位下層に描画要素を持つオブジェクトのみを選択することも可能である。
ステップS2802において、表示順番制御部2402は、ステップS2801で当該ページにおける次のオブジェクトを読み込めたか否かを判定する。ステップS2801で次のオブジェクトが読み込めた場合(選択可能なオブジェクトがあった場合)は、当該読み込んだオブジェクトを処理対象としてステップS2506に進む。ステップS2802において、次のオブジェクトが読み込めなかった場合(次に選択可能なオブジェクトが無かった場合)は、既にページ内の最終オブジェクトが読み込まれている状態である。この場合、ステップS2802で当該ページの全てのオブジェクトの表示処理が終了したと判断し、ステップS2810に進み、次ページV2を読み込む。ステップS2811にて表示したページが最終ページであった場合は、ステップS2812に進み、先頭ページV1を読み込む。
ステップS2810にて次ページのオブジェクトを読み込めた場合は、ステップS2813に進み、ユーザより指示された次へボタン2302のタップ時間を計測し、所定時間以上ロングタップされたかどうかを判断する。ロングタップが所定時間以上継続された場合、ステップS2814に進み、現在位置表示モードに遷移し、現在位置及び全体のオブジェク分割結果の表示を行う。この処理の詳細は図30のフローチャートにて説明する。
ステップS2813にてロングタップが所定時間以上行われず、タップ指示が終了した場合には、ステップS2506に進む。なお、ステップS2506の部分領域表示範囲決定処理は図27と同様であるため、ここでの説明は省く。そして、ステップS2803において、当該読み込まれたオブジェクトの属性および始点と幅、高さに基づいて制御されたページの表示倍率と始点を用いて、タッチUI1904の表示状態を更新する。
ステップS2805においては、表示モードがページ表示モードであるので、RAM1911に保存したアプリケーション画像データの構文を解析し、次のページと、それに含まれるオブジェクトを読み込む。ステップS2806において、表示順番制御部2402は、ステップS2805で次のページが読み込めた場合はステップS2807に進む。一方、既にRAM1911に保存したアプリケーション画像データの最終ページが読み込まれている状態であり、S2805で次に読み込み可能なページが無かった場合は、ステップS2808に進む。
ステップS2808では、RAM1911に保存したアプリケーション画像データの構文を解析し、先頭ページと、それに含まれるオブジェクトを読み込む。次に、ステップS2807において、表示範囲制御部2403は、前述した通り、タッチUI1904の幅に合わせてページの表示倍率を制御すると共に、ページの始点を制御して、ページの表示範囲を決定する。そして、ステップS2803では、当該決定されたページ表示範囲に基づいてタッチUI1904の表示状態を更新する。
<前へボタン選択処理>
前へボタン2302がユーザによりタップされたときに実行される前選択処理(前へボタン選択処理)について、図29のフローチャートを用いて説明する。前選択処理は、次選択処理とほぼ同じ構成であるため、ここでは異なるステップS2901、S2905、S2910についてのみ説明する。
ステップS2901において、表示順番制御部2402は、現在読み込んでいるページの全オブジェクトから、文書構造ツリーに基づいて次に表示すべきオブジェクトを選択し、そのオブジェクトを読み込む。本実施例において、前へボタン2302が指定されたときの文書ツリー構造上の表示順番は、文書ツリー構造において末尾の下位階層のオブジェクト、そのオブジェクトの上位階層のオブジェクトというように、下位階層から上位階層への順番であるとする。すなわち、下位階層のオブジェクトの表示が全て終わった後、その上位階層における他のオブジェクトの表示へと移るものとする。
例えば、図17において、最初に読み込まれるオブジェクトは末尾の下位階層オブジェクトであるT10である。部分領域表示モードで、T10のオブジェクトがタッチUI1904に表示されている状態で、前選択処理が行われると、同じ階層にT9が存在するため、T9のオブジェクトが読み込まれる。さらに、T9のオブジェクトが表示されている状態で前選択処理が行われると、同じ階層にその他のオブジェクトが存在しないため、その上位階層であるS4が読み込まれる。S4のオブジェクトが表示されている状態で前選択処理が行われると、S4は同じ階層にS3を持ち、更にS3は下位階層にオブジェクトを持つため、S3の下位階層の末尾にあるT8のオブジェクトが読み込まれる。なお、前選択処理においても、次選択処理と同様に、描画要素を持つオブジェクトだけを選択するようにしても良く、また、特定の属性を持つオブジェクトのみの選択や、特定の属性のみを除外して選択することも可能である。さらに、S4やW3といったそれ単体では描画要素を持たず、下位下層に描画要素を持つオブジェクトのみを選択することも可能である。
ステップS2910にて次ページのオブジェクトを読み込めた場合は、ステップS2813に進み、ユーザより指示された前へボタン2303のタップ時間を計測し、所定時間以上タップされたロングタップであるかどうかを判断する。ロングタップが所定時間以上継続された場合は、ステップS2814に進み、現在位置表示モードに遷移し、現在位置及び全体のオブジェク分割結果の表示を行う。この処理の詳細は図30のフローチャートにて説明する。ステップS2813にてロングタップが所定時間以上行われず、タップ指示が終了した場合には、ステップS2506に進む。なお、ステップS2506の部分領域表示範囲決定処理は図27と同様であるため、ここでの説明は省く。
ステップS2905においては、表示モードがページ表示モードであるので、RAM1911に保存したアプリケーション画像データの構文を解析し、前のページと、それに含まれるオブジェクトを読み込む。そして、ステップS2806に進む。
<現在位置表示と分割結果の表示>(第2の表示制御)
現在位置表示処理部2409で行われるステップS2814の現在位置表示と全体のオブジェクト分割結果の表示処理の詳細について、図30のフローチャートと、図32、図33を用いて説明する。
ステップS3000において、現在位置表示処理部2409は、選択指示を受け付けた時の携帯情報端末107に設定されている表示モードを取得し、部分領域表示モードかページ表示モードであるかどうかを判定する。表示モードが部分領域表示モードである場合には、ステップS3001に進み、ページ表示モードである場合には何も行わずに処理を終了する。
現在位置表示処理部2409は、ステップ3001において現在表示中のオブジェクトを取得し、ステップ3002において現在のオブジェクトが含まれるページの全オブジェクトの情報を取得する。ここでのオブジェクト情報とは、図8と図17にて説明したブロック情報と文章構造ツリーである。ステップ3003にて、現在位置表示処理部2409は、取得したオブジェクト情報に基づいて、当該ページの全オブジェクトが含まれる様に縮小表示を行う。続いて、ステップ3004にて、現在位置表示処理部2409は、取得したオブジェクト情報の文章構造ツリーより、各オブジェクトの表示順序を取得する。文書構造ツリーにおける順序の説明は図17にて説明したため省略する。各オブジェクトの表示順序を取得後にステップS3005に進む。
ステップS3005にて、現在位置表示処理部2409は、受信したジェスチャイベントの種類を判定し、その結果に依り、強調表示するオブジェクトを切り替える。受信したイベントが次へボタン2302又は前へボタン2303に対する所定時間以上のロングタップであった場合はステップS3006に進む。ステップS3006にて、現在位置表示処理部2409は、次に表示するオブジェクトと、現在表示中のオブジェクトと、それ以外のオブジェクトに関して、全体における分割位置や順序を識別可能な形式で表示する。
図32を用いて、次へボタン2302を所定時間以上ロングタップされた場合の表示例を説明する。ここでは、図17の順序を示す文書構造ツリー図を参照しつつ説明する。図32(A)は文章を読み進めている途中に表示されるオブジェクトである。ここでは、図32(A)に表示されるオブジェクトが、図17の文書構造ツリー上のオブジェクトT6に相当する。現在位置表示処理部2409は、次へボタン2302の所定時間以上のロングタップのイベントを受信した場合、T6を含むページV1(図17)が全体表示される様に縮小表示する。つまり、ページV1にて描画要素を持つ全オブジェクトT1〜T10に相当する、各矩形ブロック3211〜3220を図32(B)の様に表示する。
更に、次に表示するオブジェクトT7と、現在のオブジェクトT6と、その当該ページに含まれるその他の描画要素を持つオブジェクトT1〜T5とT8〜T10とを、表示順序とそのフォント色に依って識別可能な形式で、図32(B)の様に表示する。ここで、オブジェクトT7に相当する矩形ブロックは3217、オブジェクトT6に相当する矩形ブロックは3216、オブジェクトT1〜T5とT8〜T10に相当する矩形ブロックは3211〜3215と3218〜3220である。フォント色の例は、次に表示するオブジェクトT7(3217)の表示順序が赤字、現在のオブジェクトT6(3216)の表示順序が青字、それ以外の各オブジェクト(3211〜3215と3218〜3220)の表示順序が黒字である。強調表示する順序としては、次オブジェクト、現在オブジェクト、その他のオブジェクトである。また、順序の表示位置は、各オブジェクトの中心とする。そして、図28のステップS2815にて説明した様に、ロングタップが所定時間以上継続した場合は、ステップS2814にて図32(B)を表示する。また、タップ終了した(ユーザの指がUI画面から離れた)場合は、図32(C)の様に次オブジェクトT7に相当する矩形ブロック3231を部分領域表示する。
次に、前へボタン2303を所定時間以上ロングタップされた場合の表示例を図33にて、図17の順序を示す文書構造ツリー図を参照しつつ説明する。図33(C)は文章を読み進めている途中に表示されるオブジェクトである。ここでは、図33(C)に表示されるオブジェクトが、図17の文書構造ツリー上のオブジェクトT5に相当する。現在位置表示処理部2409は、前へボタン2303の所定時間以上のロングタップのイベントを受信した場合、T5を含むページV1(図17)の全体が表示される様に縮小表示する。つまり、ページV1にて描画要素を持つ全オブジェクトT1〜T10に相当する、各矩形ブロック3311〜3320を図33(B)の様に表示する。
更に、次に表示するオブジェクトT4と、現在のオブジェクトT5と、その当該ページに含まれるその他の描画要素を持つオブジェクトT1〜T3とT6〜T10とを、表示順序とそのフォント色に依って識別可能な形式で図33(B)の様に表示する。オブジェクトT4に相当する矩形ブロックは3314、オブジェクトT5に相当する矩形ブロックは3315と、オブジェクトT1〜T3とT6〜T10に相当する矩形ブロックは3311〜3313と3316〜3320である。フォント色の例は、次に表示するオブジェクトT4(3314)の表示順序が赤字、現在のオブジェクトT5(3315)の表示順序が青字、それ以外の各オブジェクト(3311〜3313と3316〜3320)の表示順序が黒字である。強調表示する順序としては、次オブジェクト、現在オブジェクト、その他のオブジェクトである。また、順序の表示位置は、各オブジェクトの中心とする。そして、図29のステップS2815にて説明した様に、ロングタップが所定時間以上継続した場合はステップS2814にて図33(B)を表示する。また、タップ終了した(ユーザの指がUI画面から離れた)場合は図33(A)の様に、次オブジェクトT4に相当する矩形ブロック3300を部分領域表示する。
ユーザが次へボタン2302、前へボタン2303を押下しながら、オブジェクト分割された文章を読み進めている最中に、どの位置を読んでいるのか不明になったり、ページ全体がどの様に構造認識されているかを知りたい場合がある。このような場合、本実施例によれば、現在表示中のオブジェクトのページ全体における位置及び順序を容易に把握することが可能となる。ユーザは、現在位置及び全体の構造認識結果を見ることで、構造化された文章を余計な負荷を覚えることなく快適に読み進めることが可能となる。
<縮小時表示モード切替>
ピンチイン操作等の縮小表示指示を受け付けた時に、縮小時表示モード切替部2406で行われる縮小時表示モード切替処理について、図31のフローチャートと図34を用いて説明する。まず、ステップS3100において、縮小時表示モード切替部2406は、ユーザにより操作が行われたときの携帯情報端末107に設定されている表示モードを取得する。取得した表示モードが部分領域表示モードである場合にはステップS3101に進み、ページ表示モードである場合にはステップS3107に進む。
ステップS3101において、縮小時表示モード切替部2406は、現在のページの表示倍率で表示したときの現在読み込まれているオブジェクトの幅が、タッチUI1904の画面の幅より小さいか否かを判定する。オブジェクトの幅がタッチUIの画面幅よりも小さい場合には、ステップS3102に進み、そうでない場合には何も行わずに処理を終了する。ステップS3102において、縮小時表示モード切替部2406は、現在のページの表示倍率で表示したときの現在読み込まれているオブジェクトの高さが、タッチUI1904の画面の高さより小さいか否かを判定する。このとき、前記オブジェクトの高さがタッチUIの画面高さよりも小さい場合には、ステップS3103に進み、そうでない場合には何も行わずに処理を終了する。
ステップS3103において、該オブジェクトを含むページの表示倍率が更に縮小されようとしているのかどうかを判断する。すなわち、縮小時表示モード切替部2406が受信したイベントがピンチインイベントであるか否かを判定する。ここで、ページがさらに縮小されようとしていると判断した場合には、ステップS3104に進み、そうでない場合には何も行わずに処理を終了する。
ステップS3104において、縮小時表示モード切替部2406は、現在位置表示モードに切り替えて、現在位置表示モードに遷移し、現在位置及び全体のオブジェク分割結果の表示を行う。この処理の詳細は図30にて説明した通りである。補足として、このときの画面遷移を図34にて説明する。図34(A)は、部分領域表示モードにて、あるオブジェクトを表示中とする。この画面において、ピンチイン操作が継続された場合に(S3103)、図34(B)を表示する。更にピンチイン操作が継続された場合に、図34(C)を表示する。図34(C)は各オブジェクト(3411〜3420)と、現在のオブジェクト(3416)と、前後のオブジェクト(3415、3417)とを、識別可能な形式で表示する。図34(C)の例では、現在のオブジェクト(3416)の表示順序を赤字、その前後のオブジェクト(3415、3417)の表示順序を青字、それ以外の各オブジェクト(3411〜3414、3418〜3420)の表示順序を黒字で、順に強調表示している。表示順序の表示位置は、各オブジェクトの中心とする。
ステップS3105にて、縮小時表示モード切替部2406はピンチインイベントが終了(指がUI画面から離れピンチイン操作が終了)したかどうかを判断し、ピンチイン操作が終了した場合には、ステップS3106に進む。ステップS3106において、縮小時表示モード切替部2406は部分領域表示モードに遷移し、縮小操作開始前の部分領域表示に戻る。
ユーザがオブジェクト分割された単位に文章を読み進めている最中に、どの位置を読んでいるのか不明になったり、ページ全体がどの様に構造認識されているかを知りたい場合がある。このような場合、本実施例によれば、ピンチインなどの縮小操作指示において、現在表示中のオブジェクトのページ全体における位置及び順序を容易に把握することが可能となる。ユーザは、現在位置及び全体の構造認識結果を見ることで、構造化された文章を余計な負荷を覚えることなく快適に読み進めることが可能となる。
なお、本実施例において、MFP100は携帯情報端末107に表示用のアプリケーション画像データを送付し、携帯情報端末107は受信したアプリケーション画像データを表示する構成としている。しかしながら、例えば、MFP100において、アプリケーション画像データを内部に保持する携帯情報端末107で実行可能なアプリケーションを生成し、携帯情報端末107に配信するような構成にしても良いことは言うまでもない。なお、そのときの携帯情報端末107で実行可能なアプリケーションは、本実施例で説明したソフトウェアモジュールであるジェスチャイベント処理部2002を内部に持って、アプリケーション画像データを制御する。
また、MFP100は、生成したアプリケーション画像データを文書管理サーバ106に送信すると共に、携帯情報端末107にそのアプリケーション画像データの場所を示すアドレスを送付するようにしても良い。この場合、携帯情報端末107はアプリケーション画像データの実体データは持たず、LAN102を通して、文書管理サーバ106のデータが保持されるデータベース105から随時ページやオブジェクトの情報を取得・表示する。
以上に説明した様に、本実施例によれば、文書表示手段において、文章構造を自動認識された文章をオブジェクト単位に読み進める最中に、ページ全体がどのように構造化されているのかを表示することが出来る。同時に、現在表示中のオブジェクトの全体に対する位置や読み順を、前後のオブジェクトと合わせて表示することが可能となる。スマートフォンなどの携帯情報端末にて文章を読み進める最中に、頻繁に行う操作である、次へ進む、前へ戻る、ピンチイン操作指示に応じた適切なタイミングで、これらを表示することが可能となる。ユーザは本実施例における文書表示手段を用いることで、文書構造を自動認識された文章を、より快適に読み進めることが可能となる。
〔その他の実施例〕
本発明は、複数の機器(例えばホストコンピュータ、インターフェース機器、リーダ、プリンタなど)から構成されるシステムに適用しても、一つの機器からなる装置(例えば、複写機、ファクシミリ装置など)に適用してもよい。また本発明の目的は、前述の実施例の機能を実現するプログラムコードを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータが記憶媒体に格納されたプログラムコードを読み出し実行することによっても達成される。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体およびプログラムコードを記憶した記憶媒体は本発明を構成することになる。
また、本発明には、プログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行い、その処理によって前述した実施例の機能が実現される場合も含まれる。さらに、コンピュータ可読の記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた場合についても、本発明は適用される。その場合、書き込まれたプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施例の機能が実現される。
また、上述した実施形態では、コンピュータがプログラムを実行することにより、各処理部として機能するものとしたが、処理の一部または全部を専用の電子回路(ハードウェア)で構成するようにしても構わない。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。