(57)【要約】【課題】  浮動体と表とをその内容の欠落なしにより適切にレイアウトする。【解決手段】  浮動体が登録される度にページボックス上にレイアウト可能な領域のうち浮動体を除く領域をレイアウト可能領域として設定しておき、表をレイアウトする際に設定したレイアウト可能領域を上から順に取得し（図１２（ａ））、レイアウト可能領域の幅に表の幅が収まるか否かを判定する。表の幅が収まるときにはその時点で取得したレイアウト可能領域内に表をレイアウトする。表の幅が収まらないときには行を替えて次のレイアウト可能領域を取得し（図１２（ｂ））、計２回に亘って処理を繰り返す。こうした繰り返し処理にも拘わらずレイアウト可能領域の幅に表の幅が収まらないときには、クリア特性を適用して浮動体が全く包含しない行まで行替えしたレイアウト可能領域を取得し、このレイアウト可能領域に表をレイアウトする（図１２（ｃ））。【選択図】        図１２
2005208810.tif 000002
【特許請求の範囲】
【請求項１】
所定の言語で記述された構造化文書を解析して出力する文書解析装置であって、
前記構造化文書が指定されたとき、該指定された構造化文書を受け付けて解析する解析手段と、
該解析した構造化文書中に含まれる要素を順次レイアウトし、該構造化文書中に浮動要素が含まれると共に該浮動要素がレイアウトされる行と同一の行の領域にレイアウトされる表要素が含まれるときには、該表要素が該浮動要素に重ならないよう該表要素をレイアウトするレイアウト手段と、
該レイアウトされた要素を描画して出力する出力手段と
を備える文書解析装置。
【請求項２】
前記レイアウト手段は、前記浮動要素がレイアウトされる行の領域のうち該浮動要素の領域を除いたレイアウト可能領域を設定し、該設定したレイアウト可能領域に前記表要素をレイアウトする手段である請求項１記載の文書解析装置。
【請求項３】
前記レイアウト手段は、前記設定したレイアウト可能領域に前記表要素をレイアウトできないときには、前記浮動要素を包含しない行まで行替えしてレイアウト可能領域を設定し、該設定したレイアウト可能領域に該表要素をレイアウトする手段である請求項２記載の文書解析装置。
【請求項４】
前記レイアウト手段は、同一の行の領域に複数の浮動要素がレイアウトされたときに該複数の浮動要素により複数のレイアウト可能領域が設定されたとき、前記表要素がレイアウト可能となるまで所定回数に亘って順にレイアウト可能領域を替えて該表要素をレイアウトする処理を繰り返し、該所定回数に亘ってレイアウト可能領域を替えたにも拘わらず該表要素が該複数のレイアウト可能領域のいずれにもレイアウトできないときには、該複数の浮動要素のすべてを包含しない行のレイアウト可能領域を設定し、該設定したレイアウト可能領域に該表要素をレイアウトする手段である請求項３記載の文書解析装置。
【請求項５】
前記所定回数は、１回または２回である請求項４記載の文書解析装置。
【請求項６】
前記構造化文書は、前記所定の言語としてマークアップ言語により記述された文書である請求項１ないし５いずれか記載の文書解析装置。
【請求項７】
前記マークアップ言語は、ＸＨＴＭＬである請求項６記載の文書解析装置。
【請求項８】
請求項１ないし７いずれか記載の文書解析装置を備える印刷装置。
【請求項９】
所定の言語で記述された構造化文書を解析して出力する文書解析方法であって、
（ａ）前記構造化文書が指定されたとき、該指定された構造化文書を受け付けて解析し、
（ｂ）該解析した構造化文書中に含まれる要素を順次レイアウトし、該構造化文書中に浮動要素が含まれると共に該浮動要素がレイアウトされる行と同一の行の領域にレイアウトされる表要素が含まれるときには、該表要素が該浮動要素に重ならないよう該表要素をレイアウトし、
（ｃ）該レイアウトされた要素を描画して出力する
文書解析方法。
【請求項１０】
所定の言語で記述された構造化文書を解析して出力する文書解析装置に用いられるプログラムであって、
前記構造化文書が指定されたとき、該指定された構造化文書を受け付けて解析するモジュールと、
該解析した構造化文書中に含まれる要素を順次レイアウトし、該構造化文書中に浮動要素が含まれると共に該浮動要素がレイアウトされる行と同一の行の領域にレイアウトされる表要素が含まれるときには、該表要素が該浮動要素に重ならないよう該表要素をレイアウトするモジュールと、
該レイアウトされた要素を描画して出力するモジュールと
を備えるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文書解析装置およびその方法並びに文書解析装置用のプログラム、印刷装置に関し、詳しくは、所定の言語で記述された構造化文書を解析して出力する文書解析装置およびその方法並びに文書解析装置用のプログラム、印刷装置に関する。
【背景技術】
【０００２】
従来、この種の文書解析装置としては、ＨＴＭＬ（Ｈｙｐｅｒ  Ｔｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）などのマークアップ言語により記述された構造化文書で指定された要素を解析しレイアウトして出力するものが提案されている（例えば、特許文献１参照）。
【０００３】
こうした構造化文書中に指定された要素をレイアウトする際、通常、段落などの前後に改行を伴うブロック毎にそのブロック内にテキストや画像などのボックスを行単位で作成してレイアウトしていく。このとき、構造化文書中に表要素が含まれているときには、この表要素を段落などと同様にブロックとして扱って表の構成単位であるセルを格子状にレイアウトする。また、構造化文書中に浮動要素が含まれているときには、右詰か左詰かの指定に従って現在の行の左または右にボックスを詰めてレイアウトする。レイアウトされた浮動要素は、ブロックのレイアウトに影響を与えることがなく、例えば、複数の段落に跨って存在することもできる。
【特許文献１】特開２０００−２４２６４１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上述の文書解析装置では、構造化文書中に表要素と浮動要素と含まれると、浮動要素と表要素とが重ねてレイアウトされてしまい、表の内容（データ）が欠落してしまう場合がある。これは、前述したように表要素は段落などと同様にブロックとして扱われ、浮動要素はブロックのレイアウトに影響を与えないから、浮動要素と表要素とがレイアウトされる位置によっては表要素と浮動要素とが重なってしまうことに基づく。
【０００５】
本発明の文書解析装置およびその方法並びに印刷解析装置用のプログラムは、こうした問題を解決し、構造化文書に含まれる表要素と浮動要素とをその内容を欠落させることなくより適切にレイアウトして出力することを目的の一つとする。また、本発明の印刷装置は、構造化文書に含まれる表要素と浮動要素とをその内容を欠落させることなくより適切にレイアウトして印刷することを目的の一つとする。
【課題を解決するための手段】
【０００６】
本発明の文書解析装置およびその方法並びに文書解析装置用のプログラム、印刷装置は、上述の目的の少なくとも一部を達成するために以下の手段を採った。
【０００７】
本発明の文書解析装置は、
所定の言語で記述された構造化文書を解析して出力する文書解析装置であって、
前記構造化文書が指定されたとき、該指定された構造化文書を受け付けて解析する解析手段と、
該解析した構造化文書中に含まれる要素を順次レイアウトし、該構造化文書中に浮動要素が含まれると共に該浮動要素がレイアウトされる行と同一の行の領域にレイアウトされる表要素が含まれるときには、該表要素が該浮動要素に重ならないよう該表要素をレイアウトするレイアウト手段と、
該レイアウトされた要素を描画して出力する出力手段と
を備えることを要旨とする。
【０００８】
この本発明の文書解析装置では、構造化文書が指定されたとき、この指定された構造化文書を受け付けて解析し、解析した構造化文書中に含まれる要素を順次レイアウトし、構造化文書中に浮動要素が含まれると共にこの浮動要素がレイアウトされる行と同一の行の領域にレイアウトされる表要素が含まれるときには、この表要素が浮動要素に重ならないよう表要素をレイアウトする。したがって、表要素と浮動要素が同一の行の領域にあるときにその内容を欠落させることなくより適切にレイアウトして出力することができる。
【０００９】
こうした本発明の文書解析装置において、前記レイアウト手段は、前記浮動要素がレイアウトされる行の領域のうち該浮動要素の領域を除いたレイアウト可能領域を設定し、該設定したレイアウト可能領域に前記表要素をレイアウトする手段であるものとすることもできる。こうすれば、表要素と浮動要素とが重なることなく同一の行の領域にレイアウトすることができる。この態様の本発明の文書解析装置において、前記レイアウト手段は、前記設定したレイアウト可能領域に前記表要素をレイアウトできないときには、前記浮動要素を包含しない行まで行替えしてレイアウト可能領域を設定し、該設定したレイアウト可能領域に該表要素をレイアウトする手段であるものとすることもできる。こうすれば、表要素と浮動要素とが同一の行の領域に収まらないときでもその内容を欠落させることなくレイアウトすることができる。さらに、この態様の本発明の文書解析装置において、前記レイアウト手段は、同一の行の領域に複数の浮動要素がレイアウトされたときに該複数の浮動要素により複数のレイアウト可能領域が設定されたとき、前記表要素がレイアウト可能となるまで所定回数に亘って順にレイアウト可能領域を替えて該表要素をレイアウトする処理を繰り返し、該所定回数に亘ってレイアウト可能領域を替えたにも拘わらず該表要素が該複数のレイアウト可能領域のいずれにもレイアウトできないときには、該複数の浮動要素のすべてを包含しない行のレイアウト可能領域を設定し、該設定したレイアウト可能領域に該表要素をレイアウトする手段であるものとすることもできる。こうすれば、複数の浮動要素がレイアウトされている場合でも対処することができる。この態様の本発明の文書解析装置において、前記所定回数は、１回または２回であるものとすることもできる。こうすれば、装置の負荷を抑制できる。
【００１０】
また、本発明の文書解析装置において、前記構造化文書は、前記所定の言語としてマークアップ言語により記述された文書であるものとすることもできる。この態様の本発明の文書解析装置において、前記マークアップ言語は、ＸＨＴＭＬであるものとすることもできる。
【００１１】
本発明の印刷装置は、
上述した各態様のいずれかの本発明の文書解析装置
を備えることを要旨とする。
【００１２】
この本発明の印刷装置では、本発明の文書解析装置、即ち、基本的には、所定の言語で記述された構造化文書を解析して出力する文書解析装置であって、前記構造化文書が指定されたとき、該指定された構造化文書を受け付けて解析する解析手段と、該解析した構造化文書中に含まれる要素を順次レイアウトし、該構造化文書中に浮動要素が含まれると共に該浮動要素がレイアウトされる行と同一の行の領域にレイアウトされる表要素が含まれるときには、該表要素が該浮動要素に重ならないよう該表要素をレイアウトするレイアウト手段と、該レイアウトされた要素を描画して出力する出力手段とを備える文書解析装置を備えるから、本発明の文書解析装置と同様の効果、例えば、表要素と浮動要素が同一の行の領域にあるときにその内容を欠落させることなくより適切にレイアウトして印刷することができる効果などを奏することができる。
【００１３】
本発明の文書解析方法は、
所定の言語で記述された構造化文書を解析して出力する文書解析装置であって、
（ａ）前記構造化文書が指定されたとき、該指定された構造化文書を受け付けて解析し、
（ｂ）該解析した構造化文書中に含まれる要素を順次レイアウトし、該構造化文書中に浮動要素が含まれると共に該浮動要素がレイアウトされる行と同一の行の領域にレイアウトされる表要素が含まれるときには、該表要素が該浮動要素に重ならないよう該表要素をレイアウトし、
（ｃ）該レイアウトされた要素を描画して出力する
ことを要旨とする。
【００１４】
この本発明の文書解析方法によれば、構造化文書が指定されたとき、この指定された構造化文書を受け付けて解析し、解析した構造化文書中に含まれる要素を順次レイアウトし、構造化文書中に浮動要素が含まれると共にこの浮動要素がレイアウトされる行と同一の行の領域にレイアウトされる表要素が含まれるときには、この表要素が浮動要素に重ならないよう表要素をレイアウトするから、表要素と浮動要素が同一の行の領域にあるときにその内容を欠落させることなくより適切にレイアウトして出力することができる。
【００１５】
本発明の文書解析装置用のプログラムは、
所定の言語で記述された構造化文書を解析して出力する文書解析装置に用いられるプログラムであって、
前記構造化文書が指定されたとき、該指定された構造化文書を受け付けて解析するモジュールと、
該解析した構造化文書中に含まれる要素を順次レイアウトし、該構造化文書中に浮動要素が含まれると共に該浮動要素がレイアウトされる行と同一の行の領域にレイアウトされる表要素が含まれるときには、該表要素が該浮動要素に重ならないよう該表要素をレイアウトするモジュールと、
該レイアウトされた要素を描画して出力するモジュールと
を備えることを要旨とする。
【００１６】
この本発明の文書解析装置用のプログラムでは、文書解析装置にインストールすることにより、構造化文書が指定されたとき、この指定された構造化文書を受け付けて解析し、解析した構造化文書中に含まれる要素を順次レイアウトし、構造化文書中に浮動要素が含まれると共にこの浮動要素がレイアウトされる行と同一の行の領域にレイアウトされる表要素が含まれるときには、この表要素が浮動要素に重ならないよう表要素をレイアウトする。したがって、表要素と浮動要素が同一の行の領域にあるときにその内容を欠落させることなくより適切にレイアウトして出力することができる。
【発明を実施するための最良の形態】
【００１７】
次に、本発明を実施するための最良の形態を実施例を用いて説明する。
【実施例】
【００１８】
図１は、本発明の一実施例としてのカラーインクジェットプリンタ２０の構成の概略を示す構成図である。実施例のカラーインクジェットプリンタ２０は、図示するように、コンピュータ１０やデジタルテレビ１２，デジタルカメラ１４などと接続してデジタル画像（以下、画像という）の入力を司る入力インターフェース２２と、入力インタフェース２２に入力される画像の形式に基づいてデータの出力先を割り振る信号処理部２４と、マークアップ言語としてのＸＨＴＭＬ（ｅＸｔｅｎｓｉｂｌｅ  Ｈｙｐｅｒ  Ｔｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）により記述されたＸＨＴＭＬ文書を解析して要素の木構造としてのＤＯＭ（Ｄｏｃｕｍｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ）ツリーを作成すると共にＣＳＳ（Ｃａｓｃａｄｉｎｇ  Ｓｔｙｌｅ  Ｓｈｅｅｔｓ）により記述されたＣＳＳ文書を読み込んでスタイルオブジェクトを作成してメモリ５０に書き込む解析部３０と、解析部３０により作成されたＤＯＭツリーとスタイルオブジェクトとを用いてＸＨＴＭＬ文書に記述された要素（オブジェクト）としての表や画像やテキストを印刷用のページ毎にレイアウトしてページボックスとしてメモリ５０に書き込むレイアウタ３８と、レイアウタ３８によりレイアウトして得られるページボックスを用いてＲＢＧデータとしての印刷用画像を描画するレンダリングプラグイン（以下、ＲＰＩという）４０と、描画されたＲＧＢ（Ｒｅｄ  Ｇｒｅｅｎ  Ｂｌｕｅ）データの印刷用画面をＣＭＹＫ（Ｃｙａｎ  Ｍａｇｅｎｔａ  Ｙｅｌｌｏｗ  Ｂｌａｃｋ）データに変換する色変換部４２と、変換されたＣＭＹＫデータを誤差拡散処理などの画像処理を行なって２値化する２値化部４４と、２値化されたＣＭＹＫの各データを図示しない印刷ヘッドを備える印刷実行部４８にバンド単位で出力するために一時的にデータを蓄えるイメージバッファ４６とを備える。
【００１９】
信号処理部２４は、入力された信号が直ちに印刷可能な印刷用データの場合には印刷実行部４８のイメージバッファ４６にデータを出力し、ＲＧＢデータの場合にはメモリ５０の印刷用画面格納領域に出力し、ＸＨＴＭＬ文書で記述されたファイルの場合には解析部３０に出力する。
【００２０】
解析部３０は、ＸＨＴＭＬ文書の解析を指示することによりＤＯＭツリーを作成するコア３２と、コア３２からの指示に基づいてＸＨＴＭＬ文書を解析するＸＭＬパーサー３４と、作成されたＤＯＭツリーの各要素の初期化処理により依頼されたＣＳＳ文書を解析するＣＳＳプラグイン（以下、ＣＳＳＰＩという）３６とから構成されている。
【００２１】
次に、こうして構成された実施例のカラーインクジェットプリンタ２０の動作、特にＸＨＴＭＬ文書を印刷する際の動作について説明する。図２は、解析部３０により実行される解析レイアウト指示処理の一例を示すフローチャートである。この処理は所定時間毎（例えば、８ｍｓｅｃ毎）に繰り返し実行される。解析レイアウト指示処理が実行されると、まず、ＸＨＴＭＬ文書を特定するためのＵＲＬ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｃｅ  Ｌｏｃａｔｏｒ）の指定があるか否かを判定し（ステップＳ１００）、ＵＲＬの指定があるときにはそのＵＲＬをメモリ５０に領域設定されたＵＲＬ格納用バッファ領域に格納し（ステップＳ１１０）、ＵＲＬの指定がないときには次の処理に進む。ＵＲＬ指定は、例えば、操作者がデジタルテレビ１２で表示された印刷可能な項目のうちカラーインクジェットプリンタ２０で印刷しようとする項目を選択したときデジタルテレビ１２からのカラーインクジェットプリンタ２０に出力されることにより行なうものとすることができるし、コンピュータ１０から単にＵＲＬを選択してカラーインクジェットプリンタ２０に印刷要求することによっても行なうことができる。なお、コンピュータ１０からのＵＲＬ指定では、コンピュータ１０によってもＸＨＴＭＬ文書の解析やレイアウト，色変換や２値化などを行なうことができるが、コンピュータ１０によってはこうした処理を一切行なわず、ＵＲＬだけをカラーインクジェットプリンタ２０に送信する場合となる。
【００２２】
続いて、メモリ５０のＵＲＬ格納用バッファ領域にＵＲＬが格納されているか否かを判定すると共に（ステップＳ１２０）、ＸＨＴＭＬ文書を現在解析中であるか否かを判定する（ステップＳ１３０）。ＸＨＴＭＬ文書を現在解析中であるか否かの判定は、この解析レイアウト指示処理と同時に並列に解析部３０自身によって行なっているか否かを判定することにより、例えば解析開始時と解析終了時にフラグ操作するものとすればフラグを調べることにより行なうことができる。ＵＲＬが格納されており、現在ＸＨＴＭＬ文書の解析中ではないときには、後述する解析処理により作成されるＤＯＭツリーを格納するためのメモリ５０のＤＯＭツリー格納用領域やスタイルオブジェクトを格納するためのメモリ５０のスタイルオブジェクト格納用領域に空きがあるか否かを判定し（ステップＳ１４０）、空きがあると判定されると、メモリ５０のＵＲＬ格納用バッファ領域に格納されている最初のＵＲＬを読み出してそのＵＲＬにより特定されるＸＨＴＭＬ文書の解析を開始し（ステップＳ１５０）、ＵＲＬが格納されていないときやＵＲＬが格納されていても現在ＸＨＴＭＬ文書を解析している最中のときや現在ＸＨＴＭＬ文書を解析している最中になくてもＤＯＭツリー格納用領域やスタイルオブジェクト格納用領域に空きがないときには次の処理に進む。ＸＨＴＭＬ文書の解析は、図３に例示する解析処理に基づいて行なわれる。この解析処理ではＵＲＬにより特定されるＸＨＴＭＬ文書が解析されてＤＯＭツリーが作成され、ＸＨＴＭＬ文書に記述されたＣＳＳ文書を解析してスタイルオブジェクトが作成され、関連付けられてメモリ５０のＤＯＭツリー格納用領域とスタイルオブジェクト格納用領域とに記憶される。このとき、ＤＯＭツリーには識別情報としてＤＯＭツリーＩＤが付与され、スタイルオブジェクトには識別情報としてスタイルオブジェクトＩＤが付与される。解析処理の詳細については後述する。
【００２３】
次に、レイアウタ３８によってレイアウトが行なわれている最中であるか否かを判定し（ステップＳ１６０）、レイアウタ３８によるレイアウトが行なわれてる最中にないときには、後述するレイアウト処理によりレイアウトされたページボックスを格納するためのメモリ５０のボックス格納用領域に空きがあるか否かを判定し（ステップＳ１７０）、空きがあると判定されると、メモリ５０のＤＯＭツリー格納用領域に格納されたＤＯＭツリーのうち最初のＤＯＭツリーをＤＯＭツリーＩＤを用いて指定してレイアウタ３８にレイアウト開始指示を出力して（ステップＳ１８０）、この解析レイアウト指示処理を終了し、レイアウタ３８によってレイアウトが行なわれている最中にあるときやレイアウトが行なわれている最中になくてもボックス格納用領域に空きがないときにはレイアウト開始指示を出力せずに解析レイアウト指示処理を終了する。ここで、レイアウタ３８によってレイアウトが行なわれている最中にあるか否かの判定は、レイアウタ３８からレイアウト終了の信号を入力したか否かにより行なうことができる。レイアウト終了の信号の受信についてはレイアウタ３８の処理を説明する際に詳述する。
【００２４】
次に、解析部３０により実行される解析処理について説明する。解析処理は、前述したように図３に例示するフローチャートに基づいて行なわれる。説明の容易のために、図４に例示するＸＨＴＭＬ文書を用いて説明する。解析レイアウト指示処理によりＵＲＬを指定して解析開始の指示がなされると、ＵＲＬにより特定されるＸＨＴＭＬ文書を読み出し（ステップＳ２００）、読み出したＸＨＴＭＬ文書を解析してＤＯＭツリーを作成する（ステップＳ２１０）。このとき、作成するＤＯＭツリーには識別情報としてＤＯＭツリーＩＤ（例えば、ＵＲＬにＤＯＭを付して作成したＩＤなど）を付与する。ＸＨＴＭＬ文書の読み出しは、具体的には、コア３２がＵＲＬを指定してＸＭＬパーサー３４に解析依頼することによりＸＭＬパーサー３４が行なう。ＸＨＴＭＬ文書の解析およびＤＯＭツリーの作成は、具体的には、ＸＭＬパーサー３４がＸＨＴＭＬ文書を最初から順に解析して各要素を作成すると共にＤＯＭツリーに登録することにより行なう。なお、要素の作成はコア３２に対して行ない、要素の登録はメモリ５０のＤＯＭツリー格納用領域に関連付けて格納することにより行なう。図４に例示したＸＨＴＭＬ文書を解析して作成されたＤＯＭツリーを図５に示す。
【００２５】
こうしてＤＯＭツリーを作成すると、ＸＨＴＭＬ文書に指定されたＣＳＳ文書を読み出し（ステップＳ２２０）、読み出したＣＳＳ文書を解析してスタイルオブジェクトを作成する（ステップＳ２３０）。ここで、ＣＳＳ文書は、その内容がＸＨＴＭＬ文書に直接記述されたりＸＨＴＭＬ文書の外部にリンクされたりして存在しており、図４の例では、ＸＨＴＭＬ文書にＣＳＳ文書の内容が直接記述されている場合を示した。ＣＳＳ文書の読み出しは、具体的には、ＤＯＭツリーの各要素の初期化処理における依頼により依頼されたＣＳＳＰＩ３６が行なう。ＣＳＳ文書の内容がＸＨＴＭＬ文書に直接記述されている場合には、ＸＨＴＭＬ文書中のＣＳＳ文書に該当する部分を渡してＣＳＳＰＩ３６に依頼することにより行なわれ、ＣＳＳ文書が外部にリンクされている場合には、ｌｉｎｋタグ内のリンク先を指定してＣＳＳＰＩ３６に依頼することにより行なわれる。ＣＳＳ文書の解析およびスタイルオブジェクトの作成は、具体的には、ＣＳＳＰＩ３６がＣＳＳ文書を最初から順に解析して各ルールをメモリ５０のスタイルオブジェクト格納用領域に格納することにより行なう。
【００２６】
こうしてＤＯＭツリーとスタイルオブジェクトが作成されると、作成したＤＯＭツリーとスタイルオブジェクトの関連付け処理を実行し（ステップＳ２４０）、ＵＲＬ格納用バッファ領域から解析の対象のＵＲＬを削除して（ステップＳ２５０）、解析処理を終了する。
【００２７】
次に、レイアウタ３８の処理について説明する。図６は、解析部３０によりＤＯＭツリーを指定してレイアウト開始指示がなされたときにレイアウタ３８により実行されるレイアウト描画指示処理の一例を示すフローチャートである。レイアウト描画指示処理が実行されると、レイアウタ３８は、まず、指定されたＤＯＭツリーに基づいてレイアウトを開始する（ステップＳ３００）。レイアウトは、図７に例示するレイアウト処理により実行される。説明の都合上、ここで、レイアウト描画指示処理の説明を一旦中断してレイアウト処理について説明する。
【００２８】
レイアウト処理では、レイアウタ３８は、まず、ＤＯＭツリーの各要素を順にサーチして要素毎にスタイル情報（要素に指定された特性や対応するスタイルオブジェクトのルール）が関連付けられた論理的なボックスとしての要素ボックスを作成する（ステップＳ４００）。続いて、ページ毎に対応するページボックスを作成し（ステップＳ４０２）、要素ボックスをページボックスの下にレイアウト可能な領域（レイアウト可能領域）を取得する処理を行なう（ステップＳ４０４）。レイアウト可能領域の取得は、実施例では、レイアウト処理と同時に並列してレイアウタ３８により図８に例示するレイアウト可能領域設定処理を実行することにより設定されメモリ５０の所定領域に書き込まれたものを読み込むことにより行なわれる。図８のレイアウト可能領域設定処理では、図７のレイアウト処理の後述するステップＳ４２２の処理で要素ボックスとして浮動要素がレイアウトされたか否かを調べ（ステップＳ４５０）、浮動要素がレイアウトされていないときにはそのまま処理を終了し、浮動要素がレイアウトされたときにはその浮動要素のサイズを取得すると共に（ステップＳ４５２）、現在のレイアウト可能領域から浮動要素がレイアウトされた領域を除いて新たなレイアウト可能領域を設定する処理を行なって（ステップＳ４５４）、処理を終了する。図９に、浮動体Ａや浮動体Ｂがレイアウトされた際にレイアウト可能領域がデータとしてメモリ５０に書き込まれる様子を示し、図１０に、浮動体Ａがレイアウトされたときのブロックレイアウト可能領域の一例を示し、図１１に、浮動体Ａがレイアウトされたときにレイアウト可能領域設定処理により設定されるレイアウト可能領域の一例を示し、図１２に、浮動体Ａと浮動体Ｂとがレイアウトされたときにレイアウト可能領域設定処理により設定されるレイアウト可能領域の一例を示す。いま、始点（０，０），終点（Ｘｐ，Ｙｐ）の２点により定まる矩形領域のページボックスに始点（０，０），終点（Ｘ１，Ｙ１）の２点により定まる矩形領域を有する浮動体Ａがレイアウトされると共にこの浮動体Ａがレイアウトされた後に始点（Ｘ１，０），終点（Ｘ２，Ｙ２）の２点により定まる矩形領域を有する浮動体Ｂがレイアウトされた場合を考える。この場合、浮動体Ａがレイアウトされる前は、ページボックスにレイアウトされた浮動体は存在しないから、レイアウト可能領域はページボックスの領域に設定されている（図９（ａ）参照）。浮動体Ａがレイアウトされると、浮動体Ａを包含する行の領域と浮動体Ａを包含しない行の領域との２つの領域に分割され、２つのレイアウト可能領域が設定される（図９（ｂ），図１１参照）。このときでも、段落などのブロックをレイアウトする際には、浮動体はブロックのレイアウトに影響を与えないから、ブロックレイアウト可能領域は図１０に示す領域となる。このとき、通常、表もブロックとして扱われるから、ブロックレイアウト可能領域に表をレイアウトすると、浮動体Ａと表とが重ねてレイアウトされる場合が生じる。浮動体Ａがレイアウトされた後に浮動体Ｂがレイアウトされると、図１１（ａ）のレイアウト可能領域は浮動体Ｂを包含する行の領域と浮動体Ｂを包含しない行の領域の２つのレイアウト可能領域に分割され計３つのレイアウト可能領域が設定される（図９（ｃ），図１２参照）。こうして分割された複数のレイアウト可能領域は、行順（始点のＹ座標の値が小さい順）にソートされてメモリ５０の所定領域に書き込まれる（図９（ｂ），（ｃ）参照）。ステップＳ４０４の処理は、こうしてメモリ５０の所定領域に書き込まれたレイアウト可能領域のうち行が先頭（始点のＹ座標の値が最も小さい）のレイアウト可能領域を取得する処理となる。
【００２９】
こうしてレイアウト可能領域を取得すると、対象となる要素ボックスが表要素であるか否かを調べ（ステップＳ４０６）。要素ボックスが表要素であると判定されたときには、表の構成を解析してスタイル情報に基づいてレイアウトする表の行に含まれるセルの列幅の合計、即ち表の幅を設定し（ステップＳ４０８）、試行数Ｎを値１に設定（初期化）すると共に（ステップＳ４１０）、設定した表の幅がレイアウト可能領域の幅に収まるか否かを判定する（ステップＳ４１２）。セルの列幅の設定は、実施例では、セルの内容（テキストや画像のサイズなど）に依存しないでセルの列幅の設定を行なう固定表組み（ｔａｂｌｅ−ｌａｙｏｕｔ特性が「ｆｉｘｅｄ」）と、セルの内容に依存してセルの列幅の設定を行なう自動表組み（ｔａｂｌｅ−ｌａｙｏｕｔ特性が「ａｕｔｏ」）との二通りがある。固定表組みにおけるセルの列幅の設定は、基本的には、最初の行のセルの幅に関する特性（ｗｉｄｔｈ特性）を調べてｗｉｄｔｈ特性が「ａｕｔｏ」以外、即ち、何らかの値（絶対的な長さやレイアウト可能領域の幅に対する割合）が指定されているセルについては、その指定された値を該当するセルの列幅として設定し、ｗｉｄｔｈ特性が「ａｕｔｏ」に指定されているセルについては、ｗｉｄｔｈ特性が「ａｕｔｏ」以外に指定された前述のセルについて設定した列幅の合計（境界やセル間のスペースも加えた幅）とレイアウト可能領域の幅との偏差の幅をｗｉｄｔｈ特性に「ａｕｔｏ」が指定された残りのセルに配分（例えば、均等配分）することにより行なわれる。一方、自動表組みにおけるセルの列幅の設定は、基本的には、レイアウト可能領域の幅の範囲でセルの内容をできる限り一行でレイアウトするよう各セルの列幅を設定し、列幅が指定されたセルについてはその指定された列幅を設定することにより行なわれる。こうして設定された表の幅が取得したレイアウト可能領域の幅に収まると判定されると、このレイアウト可能領域に設定した表の幅に従ってセルをレイアウトする（ステップＳ４２２）。一方、表の幅が取得したレイアウト可能領域の幅に収まらないと判定されると、試行数Ｎを値１だけインクリメントすると共に（ステップＳ４１４）、試行数Ｎが値２よりも大きいか否かを判定し（ステップＳ４１６）、試行数Ｎが値２よりも大きくない、即ち値２以下と判定されると、次の行のレイアウト可能領域、即ち、始点のＹ座標の値が次に小さいレイアウト可能領域を取得して（ステップＳ４１８）、ステップＳ４０８で設定した表の幅が取得したレイアウト可能領域の幅に収まるか否かを判定する処理を繰り返す（ステップＳ４１２）。試行数Ｎが値２よりも大きいと判定されると、クリア（ｃｌｅａｒ）特性を適用してレイアウト可能領域を取得、即ち、始点のＹ座標の値が最も大きいレイアウト可能領域を取得し（ステップＳ４２０）、取得したレイアウト可能領域で表をレイアウトする処理を行なう（ステップＳ４２２）。なお、レイアウトの最中にレイアウトボックスがページボックスのページ境界をオーバーしてこれ以上登録できないときには、改ページの判定がなされ（ステップＳ４２４）、次ページのページボックスが作成されて残余の要素ボックスに対してレイアウト処理が開始される。
【００３０】
例えば、図１２に例示するように、二つの浮動体Ａ，Ｂがレイアウトされたページボックスに表をレイアウトする際、まず、図１２（ａ）のレイアウト可能領域を取得して表の幅がレイアウト可能領域の幅に収まるか否かを調べ、表の幅がレイアウト可能領域の幅に収まらないと判定されると、試行数Ｎを値１だけインクリメントして（Ｎ＝２）次の行のレイアウト可能領域、即ち図１２（ｂ）のレイアウト可能領域を取得し、再び表の幅がレイアウト可能領域の幅に収まるか否かを調べる。このレイアウト可能領域にも表の幅が収まらないと判定されると、試行数Ｎ２を更に値１だけインクリメントするが、このとき試行数Ｎは値２よりも大きくなるから、クリア（Ｃｌｅａｒ）特性が適用されて浮動体Ａ，Ｂを共に包含しない行のレイアウト可能領域を取得して、この取得したレイアウト可能領域に表をレイアウトするのである。このように、浮動体を除いたレイアウト可能領域を設定して表をレイアウトことにより、浮動体と表とが重ねてレイアウトされてその内容が欠落するのを防止しているのである。
【００３１】
ステップＳ４０６で要素ボックスが表要素以外の要素であると判定されたときにはスタイル情報に基づいてレイアウトボックスを作成してページボックスの下にレイアウトできなくなるまで要素の内容をレイアウトする（ステップＳ４２２）。要素ボックスが浮動要素であるときには、右詰め（ｒｉｇｈｔ）か左詰め（ｌｅｆｔ）かのいずれかの指定によって、ページボックスの辺と他の浮動体（ボックス）の辺のいずれかに接触するまで右または左に詰められてレイアウトされる。浮動体がレイアウトされると前述した図８のレイアウト可能領域設定処理によりレイアウトされた浮動体の領域を除く新たなレイアウト可能領域が設定されることになる。要素の内容のレイアウトは、例えば、要素の内容がイメージの場合には、画像サイズを取得してイメージボックスを作成すると共にレイアウトボックスとしての行を作成してイメージボックスを行に登録することにより行なわれ、要素の内容がテキストの場合には、行を作成し、行に入るだけのテキストボックスを作成して行に登録することを繰り返すことにより行なわれる。取得した画像サイズによりイメージボックスをレイアウトできなかったり、テキストのすべてを登録することができないときには、改ページの判定がなされ（ステップＳ４２４）、次ページに対応するページボックスが作成され、レイアウトできなかったイメージボックスや残りのテキストを行に登録する。
【００３２】
こうしてすべての要素ボックスに対してレイアウトが完了すると（ステップＳ４２６）、指定されたＤＯＭツリーをメモリ５０のＤＯＭツリー格納用領域から削除すると共に（ステップＳ４２８）、レイアウト終了を解析部３０に出力して（ステップＳ４３０）、レイアウト処理を終了する。これにより、解析部３０により作成される新たなＤＯＭツリーの格納領域が確保される。
【００３３】
レイアウト描画指示処理（図６）の説明に戻る。レイアウトを開始すると、最初のページ分のレイアウトが完了するのを待って（ステップＳ３１０）、レイアウトが完了したページを指定してＲＰＩ４０に描画開始指示を出力する（ステップＳ３２０）。ページ分のレイアウトが完了したか否かの判定は、次ページに対応するページボックスが作成されたか否かにより、１ページだけしかないときにはレイアウト処理が終了したか否かにより行なうことができる。描画開始指示されたＲＰＩ４０は、図１３に例示する描画処理を実行し、ページボックスに従ってテキストや画像をメモリ５０の印刷用画像格納領域を用いてＲＧＢデータとして描画し（ステップＳ５００）、描画が終了したときに色変換部４２に色変換指示を出力すると共に（ステップＳ５１０）、描画終了をレイアウタ３８に出力する（ステップＳ５２０）。なお、画像の描画については、画像ファイルを読み出し、ファイル形式によっては展開等を行なって描画する。図１４に、図４に例示するＸＨＴＭＬ文書中の浮動要素と表要素とを解析した場合の印刷結果を示す説明図を示す。浮動体画像を包含する行の領域のうち浮動体画像の領域を除いたレイアウト可能領域に表をレイアウトできないときには（図１４（ａ）参照）、浮動体画像を包含しない行の領域に行替えしたレイアウト可能領域に表がレイアウトされる（図１４（ｂ）参照）。
【００３４】
描画開始指示を出力した後はそのページの描画が終了するのを待って（ステップＳ３３０）、そのページに対応するページボックスを削除する（ステップＳ３４０）。このように、ページの描画が終了する毎にそのページに対応するページボックスを削除することにより、ボックス格納用領域に不要なページボックスが格納された状態が継続されるのを回避することができる。こうしてページボックスを削除すると、次ページがあるか否かを判定し（ステップＳ３５０）、次ページがあるときにはステップＳ３１０の処理に戻る。即ち、次ページに対するページ分のレイアウトが完了しているか否かを判定し、レイアウトが完了していないときには完了するまで待ってレイアウトが完了したページを指定してＲＰＩ４０に描画開始指示を出力するのである。こうしてすべてのページを描画し、次ページがなくなると、レイアウト描画指示処理を終了する。
【００３５】
以上説明した実施例のカラーインクジェットプリンタ２０によれば、浮動体が含まれるレイアウトボックス内に表をレイアウトするとき、浮動体の領域を除くレイアウト可能領域を取得して表をレイアウトするから、浮動体と表とが重なった状態で印刷されるのを防止することができる。しかも、浮動体が包含する行のボックスに表をレイアウトしようとすると、表の幅がレイアウト可能領域の幅に収まらないときには、その浮動体が包含しない行に行替えしたレイアウト可能領域を再取得して表をレイアウトするから、その内容の欠落をより確実に防止して表をレイアウトして印刷することができる。さらに、レイアウト可能領域の取得の回数（試行数Ｎ）が値２よりも大きくなったときに、クリア（ｃｌｅａｒ）特性を適用して浮動体が全く含まれない行のレイアウト可能領域を取得して表をレイアウトするから、レイアウト処理の負荷が過剰となるのを抑制できる。
【００３６】
ここで、実施例のカラーインクジェットプリンタ２０のコア３２とＸＭＬパーサー３４とＣＳＳＰＩ３６とからなる解析部３０が解析手段に相当し、レイアウタ３８がレイアウト手段に相当し、ＲＰＩ４０と色変換部４２と２値化部４４とイメージバッファ４６と印刷実行部４８とが出力手段に相当する。
【００３７】
実施例のカラーインクジェットプリンタ２０では、試行数Ｎが値２を越えたときにクリア（ｃｌｅａｒ）特性を適用したレイアウト可能領域を取得して表をレイアウトするものとしたが、試行数Ｎが値１あるいは値３以上の値を越えたときにクリア特性を適用したレイアウト可能領域（始点のＹ座標が最も大きいレイアウト可能領域）を取得して表をレイアウトするものとしてもよい。なお、試行数Ｎが値１を越えたときにクリア特性を適用する場合では、図７のステップＳ４１４〜Ｓ４１８の処理は実行する必要がない。
【００３８】
実施例のカラーインクジェットプリンタ２０では、構造化文書としてＸＨＴＭＬで記述された文書を解析して印刷するものとしたが、他のマークアップ言語により記述された文書を解析して印刷するものとしてもよい。また、マークアップ言語以外の言語により記述された文書を解析して印刷するものとしても差し支えない。
【００３９】
実施例のカラーインクジェットプリンタ２０では、入力インタフェース２２に接続される機器としてコンピュータ１０やデジタルテレビ１２やデジタルカメラ１４などを挙げたが、如何なる機器を接続するものとしても差し支えない。
【００４０】
実施例では、ＸＨＴＭＬ文書を解析して印刷するカラーインクジェットプリンタを用いて説明したが、カラーレーザプリンタやモノクロのインクジェットプリンタやレーザープリンタなどの種々のプリンタを用いるものとしてもよい。また、こうしたプリンタ以外に、ＸＨＴＭＬ文書を解析して出力（例えば、表示出力）する通常のコンピュータに用いるものとしても差し支えない。
【００４１】
以上、本発明を実施するための最良の形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において、種々なる形態で実施し得ることは勿論である。
【産業上の利用可能性】
【００４２】
本発明は、印刷機器産業やコンピュータ産業などの産業に利用可能である。
【図面の簡単な説明】
【００４３】
【図１】実施例のカラーインクジェットプリンタ２０の構成の概略を示す構成図。
【図２】解析レイアウト指示処理の一例を示すフローチャート。
【図３】解析処理の一例を示すフローチャート。
【図４】具体例のＸＨＴＭＬ文書の一例を示す説明図。
【図５】具体例のＤＯＭツリーの一例を示す説明図。
【図６】レイアウト描画指示処理の一例を示す説明図。
【図７】レイアウト処理の一例を示す説明図。
【図８】レイアウト可能領域設定処理の一例を示す説明図。
【図９】レイアウト可能領域がデータとしてメモリ５０に書き込まれる様子を説明する説明図。
【図１０】浮動体Ａがレイアウトされたときのブロックレイアウト可能領域の一例を示す説明図。
【図１１】浮動体Ａがレイアウトされたときにレイアウト可能領域設定処理により設定されるレイアウト可能領域の一例を示す説明図。
【図１２】浮動体Ａ，Ｂがレイアウトされたときにレイアウト可能領域設定処理により設定されるレイアウト可能領域の一例を示す説明図。
【図１３】描画処理の一例を示す説明図。
【図１４】印刷結果の一例を示す説明図。
【符号の説明】
【００４４】
１０  コンピュータ、１２  デジタルテレビ、１４  デジタルカメラ、２０  カラーインクジェットプリンタ、２２  入力インターフェース、２４  信号処理部、３０  解析部、３２  コア、３４  ＸＭＬパーサー、３６  ＣＳＳＰＩ、３８  レイアウタ、４０  ＲＰＩ、４２  色変換部、４４  ２値化部、４６  イメージバッファ、４８  印刷実行部、５０  メモリ。
【図１】
2005208810.tif 000003
【図２】
2005208810.tif 000004
【図３】
2005208810.tif 000005
【図４】
2005208810.tif 000006
【図５】
2005208810.tif 000007
【図６】
2005208810.tif 000008
【図７】
2005208810.tif 000009
【図８】
2005208810.tif 000010
【図９】
2005208810.tif 000011
【図１０】
2005208810.tif 000012
【図１１】
2005208810.tif 000013
【図１２】
2005208810.tif 000014
【図１３】
2005208810.tif 000015
【図１４】
2005208810.tif 000016