(57)【要約】【課題】  不要となったレイアウトノードを順次解放してメモリ資源の圧迫を防止し、省メモリ化を実現する。【解決手段】  文書解析手段１０４は構造化文書を解析し、描画要素の他の描画要素との参照・被参照関係が含まれる複数の仮ノードを生成し、ツリー構造に対応する文書ツリーを生成する仮ノード生成部１２２と、文書ツリーに含まれる一部の仮ノードに対応する本ノードの描画要素を描画する情報が含まれる本ノードを生成し、本ノードを含む部分ツリーを生成する本ノード生成部１２４と、を備え、レイアウト部１０６が、本ノード生成手段によって生成された部分ツリーに基づき、部分ツリーに含まれる本ノードに対応する描画要素のレイアウトを行うと、本ノード生成手段は、複数の仮ノードにおける参照・被参照関係に基づいて、部分ツリー内の本ノードの削除可否を判定し、削除可と判定された本ノードを削除する。【選択図】図１
2010113650.tif 000002
【特許請求の範囲】
【請求項１】
ツリー構造化された複数の描画要素が記述された構造化文書の入力を受け付ける入力手段と、
前記入力手段が入力を受け付けた構造化文書を解析する文書解析手段と、
前記文書解析手段による解析結果に基づいて、前記複数の描画要素のレイアウトを行って、レイアウト文書を生成するレイアウト手段と、
前記レイアウト手段によってレイアウトされたレイアウト文書のレンダリングを行って、印刷データを生成するレンダリング手段と、
前記レンダリング手段によって生成された印刷データに基づいて、印刷を実行する印刷手段と、を備えた構造化文書印刷装置であって、
前記文書解析手段は、
前記構造化文書を解析して、前記構造化文書に含まれるすべての描画要素に対応する複数の仮ノードであって、各仮ノードに対応する描画要素の他の描画要素との参照・被参照関係が含まれる複数の仮ノードを生成し、生成された複数の仮ノードから構成される、前記ツリー構造に対応する文書ツリーを生成する仮ノード生成手段と、
前記仮ノード生成手段によって生成された文書ツリーに含まれる一部の仮ノードに対応する本ノードであって、各本ノードに対応する描画要素を描画するための情報が含まれる本ノードを生成し、生成された本ノードを含む部分ツリーを生成する本ノード生成手段と、を備え、
前記レイアウト手段が、前記本ノード生成手段によって生成された部分ツリーに基づいて、前記部分ツリーに含まれる本ノードに対応する描画要素のレイアウトを行うと、前記本ノード生成手段は、前記複数の仮ノードにおける前記参照・被参照関係に基づいて、前記部分ツリー内の本ノードの削除可否を判定し、削除可と判定された本ノードを削除することを特徴とする構造化文書印刷装置。
【請求項２】
前記本ノード生成手段は、前記文書ツリーに含まれる複数の仮ノードに対して、前記本ノードの生成及び削除を、所定の優先順位に従って行い、
前記仮ノード生成手段は、すべての描画要素の前記参照・被参照関係を特定した後、特定された参照・被参照関係に基づいて、他の描画要素から参照される被参照描画要素の仮ノードが、前記被参照描画要素を参照する参照描画要素の仮ノードよりも、前記文書ツリーにおいて高い優先順位になるように配置された文書ツリーを生成することを特徴とする請求項１記載の構造化文書印刷装置。
【請求項３】
前記被参照描画要素は、描画するオブジェクトの属性を指定する描画要素であり、前記参照描画要素は、オブジェクト描画を実行する描画要素であることを特徴とする請求項２記載の構造化文書印刷装置。
【請求項４】
前記仮ノード生成手段は、前記参照描画要素と特定された描画要素であっても、現実には参照先が存在しない参照描画要素に対応する仮ノードを生成せず、かつ、前記被参照描画要素と特定された描画要素であっても、現実には他の描画要素から参照されていない被参照描画要素については、前記被参照情報を含まない仮ノードを生成して、前記文書ツリーを生成することを特徴とする請求項２または３に記載の構造化文書印刷装置。
【請求項５】
前記本ノード生成手段は、他の描画要素から参照される被参照描画要素の本ノードを、前記被参照描画要素を参照する参照描画要素の本ノードをすべて削除した後に削除することを特徴とする請求項１〜４のいずれかに記載の構造化文書印刷装置。
【請求項６】
前記レイアウト手段によって、すべての仮ノードに対応する本ノードに基づくレイアウトが終了した後、前記本ノード生成手段は、その時点で残存する本ノードをすべて削除し、前記仮ノード生成手段は、その後すべての仮ノードを削除することを特徴とする請求項１〜５のいずれかに記載の構造化文書印刷装置。
【請求項７】
前記本ノード生成手段は、前記文書ツリーにおいて子ノードが存在する仮ノードに対応する本ノードを、前記レイアウト手段による前記子ノードのレイアウトが終了した後に削除することを特徴とする請求項１〜６のいずれかに記載の構造化文書印刷装置。
【請求項８】
前記構造化文書は、ＳＶＧ（Ｓｃａｌａｂｌｅ  Ｖｅｃｔｏｒ  Ｇｒａｐｈｉｃｓ）文書であることを特徴とする請求項１〜７のいずれかに記載の構造化文書印刷装置。
【請求項９】
ツリー構造化された複数の描画要素が記述された構造化文書の入力を受け付ける入力手段と、
前記入力手段が入力を受け付けた構造化文書を解析する文書解析手段と、
前記文書解析手段による解析結果に基づいて、前記複数の描画要素のレイアウトを行って、レイアウト文書を生成するレイアウト手段と、
前記レイアウト手段によってレイアウトされたレイアウト文書のレンダリングを行って、印刷データを生成するレンダリング手段と、
前記レンダリング手段によって生成された印刷データに基づいて、印刷を実行する印刷手段と、を備えた構造化文書印刷装置における印刷方法であって、
前記文書解析手段は、
前記構造化文書を解析して、前記複数の描画要素に対応する複数の仮ノードであって、各仮ノードに対応する描画要素の他の描画要素との参照・被参照関係が含まれる複数の仮ノードを生成し、生成された複数の仮ノードから構成される、前記ツリー構造に対応する文書ツリーを生成し、
前記生成された文書ツリーに含まれる一部の仮ノードに対応する本ノードであって、各本ノードに対応する描画要素を描画するための情報が含まれる本ノードを生成し、生成された本ノードを含む部分ツリーを生成し
前記レイアウト手段が、前記本ノード生成手段によって生成された部分ツリーに基づいて、前記部分ツリーに含まれる本ノードに対応する描画要素のレイアウトを行うと、
前記文書解析手段は、前記複数の仮ノードにおける前記参照・被参照関係に基づいて、前記部分ツリー内の本ノードの削除可否を判定し、削除可と判定された本ノードを削除することを特徴とする構造化文書印刷方法。
【請求項１０】
ツリー構造化された複数の描画要素が記述された構造化文書の入力を受け付ける入力手段と、
前記入力手段が入力を受け付けた構造化文書を解析する文書解析手段と、
前記文書解析手段による解析結果に基づいて、前記複数の描画要素のレイアウトを行って、レイアウト文書を生成するレイアウト手段と、
前記レイアウト手段によってレイアウトされたレイアウト文書のレンダリングを行って、印刷データを生成するレンダリング手段と、
前記レンダリング手段によって生成された印刷データに基づいて、印刷を実行する印刷手段と、を備えた構造化文書印刷装置の制御プログラムであって、
前記文書解析手段に、
前記構造化文書を解析して、前記複数の描画要素に対応する複数の仮ノードであって、各仮ノードに対応する描画要素の他の描画要素との参照・被参照関係が含まれる複数の仮ノードを生成し、生成された複数の仮ノードから構成される、前記ツリー構造に対応する文書ツリーを生成するステップと、
前記生成された文書ツリーに含まれる一部の仮ノードに対応する本ノードであって、各本ノードに対応する描画要素を描画するための情報が含まれる本ノードを生成し、生成された本ノードを含む部分ツリーを生成するステップと、
を実行させ、
前記レイアウト手段に、前記本ノード生成手段によって生成された部分ツリーに基づいて、前記部分ツリーに含まれる本ノードに対応する描画要素のレイアウトを行うステップを実行させた後、
前記文書解析手段に、前記複数の仮ノードにおける前記参照・被参照関係に基づいて、前記部分ツリー内の本ノードの削除可否を判定し、削除可と判定された本ノードを削除するステップを実行させることを特徴とする構造化文書印刷装置の制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、構造化文書の印刷出力、詳しくは受信したＳＶＧ形式のＸＭＬ文書をプリンタ側で解析して印刷データを構築し、レンダリングして印刷出力を行う構造化文書印刷装置、構造化文書印刷方法及びプログラムに関する。
【背景技術】
【０００２】
ＳＶＧ（Ｓｃａｌａｂｌｅ  Ｖｅｃｔｏｒ  Ｇｒａｐｈｉｃｓ）は、ＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）によって記述されたベクターグラフィック言語であり、Ｗ３Ｃ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ  Ｃｏｎｓｏｒｔｉｕｍ）にてオープン標準として勧告されている。ＳＶＧは、ＸＭＬであるのでテキストエディタで簡単に記述でき、ベクター形式であるので拡大縮小しても画像が劣化しない。また、オープン標準であるので自由に定義できる。
【０００３】
その反面、特定のブラウザでは表示できず、専用ビューワが必要であったり、印刷する際にも特殊な処理を要する。すなわち、ＳＶＧ文書印刷では、１ページ分のオブジェクトの文書解析、レイアウト、レンダリングが必要となる。
【０００４】
しかし、１ページ分のレイアウトが終了するまでレイアウトノードを保存しておくと、プリンタのメモリ資源を大幅に使用してしまう。したがって、メモリ資源を圧迫しないように、レイアウトが終了し不要となったノードを適宜解放する必要がある。
【０００５】
これに関連する技術として、例えば、属性値を保持する領域を確保しその値を設定することにより、構造化文書の利点であるデータ構造の視認性や柔軟性、拡張性を残し、さらに複数のＸＭＬの使用域はそれらの混在データを取り扱うことを可能とした上で、特定のＸＭＬに依存しない省メモリな情報処理装置が提案されている（特許文献１参照）。
【０００６】
また、１ページ分の要素を描画した後、不要なレーアウトノードを解放して複数の要素が構造化されている文書をメモリ効率よく割り付けるレイアウト装置が提案されている（特許文献２参照）。
【特許文献１】特開２００６−１９５６７６号公報
【特許文献２】特開２００７−２０００９７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
特許文献１の技術では、属性値を保持する領域を確保しその値を設定しているが、確保した領域の解放タイミングが開示されていないため、レイアウト後もノードが解放されない可能性がある。
【０００８】
また、特許文献２の技術では、１ページ分の要素を描画した後、不要なレーアウトノードを解放しているが、不要となった時点でレイアウトノードを解放していないので、メモリ資源が圧迫される可能性がある。
【０００９】
従って、本発明の目的は、不要となったレイアウトノードを順次解放してメモリ資源の圧迫を防止し、省メモリ化を実現することができる構造化文書印刷装置、構造化文書印刷方法及びプログラムを提供することにある。
【課題を解決するための手段】
【００１０】
本発明の一つの側面に従う構造化文書印刷装置は、ツリー構造化された複数の描画要素が記述された構造化文書の入力を受け付ける入力手段と、前記入力手段が入力を受け付けた構造化文書を解析する文書解析手段と、前記文書解析手段による解析結果に基づいて、前記複数の描画要素のレイアウトを行って、レイアウト文書を生成するレイアウト手段と、前記レイアウト手段によってレイアウトされたレイアウト文書のレンダリングを行って、印刷データを生成するレンダリング手段と、前記レンダリング手段によって生成された印刷データに基づいて、印刷を実行する印刷手段と、を備えた構造化文書印刷装置であって、前記文書解析手段は、前記構造化文書を解析して、前記構造化文書に含まれるすべての描画要素に対応する複数の仮ノードであって、各仮ノードに対応する描画要素の他の描画要素との参照・被参照関係が含まれる複数の仮ノードを生成し、生成された複数の仮ノードから構成される、前記ツリー構造に対応する文書ツリーを生成する仮ノード生成手段と、前記仮ノード生成手段によって生成された文書ツリーに含まれる一部の仮ノードに対応する本ノードであって、各本ノードに対応する描画要素を描画するための情報が含まれる本ノードを生成し、生成された本ノードを含む部分ツリーを生成する本ノード生成手段と、を備え、前記レイアウト手段が、前記本ノード生成手段によって生成された部分ツリーに基づいて、前記部分ツリーに含まれる本ノードに対応する描画要素のレイアウトを行うと、前記本ノード生成手段は、前記複数の仮ノードにおける前記参照・被参照関係に基づいて、前記部分ツリー内の本ノードの削除可否を判定し、削除可と判定された本ノードを削除する。
【００１１】
本発明に従う構造化文書印刷装置によれば、レイアウト手段が描画要素のレイアウトを行った後、本ノード生成手段が、複数の仮ノードにおける参照・被参照関係に基づいて、部分ツリー内の本ノードの削除可否を判定し、削除可と判定された本ノードを削除する。したがって、参照・被参照関係を考慮して、レイアウトが終了し不要となったノードを解放するので、メモリ資源を圧迫せず、限られたメモリ資源でもレイアウトが可能となる。
【００１２】
好適な実施形態にかかる構造化文書印刷装置は、前記本ノード生成手段は、前記文書ツリーに含まれる複数の仮ノードに対して、前記本ノードの生成及び削除を、所定の優先順位に従って行い、前記仮ノード生成手段は、すべての描画要素の前記参照・被参照関係を特定した後、特定された参照・被参照関係に基づいて、他の描画要素から参照される被参照描画要素の仮ノードが、前記被参照描画要素を参照する参照描画要素の仮ノードよりも、前記文書ツリーにおいて高い優先順位になるように配置された文書ツリーを生成する。
【００１３】
本発明に従う構造化文書印刷装置によれば、本ノード生成手段は、本ノードの生成及び削除を、所定の優先順位に従って行うので、参照される被参照描画要素が参照する参照描画要素よりも先に削除されることはない。また、仮ノード生成手段は、参照される被参照描画要素の仮ノードが、被参照描画要素を参照する参照描画要素の仮ノードよりも高い優先順位になるように配置された文書ツリーを生成するので、正常な文書ツリーを生成することができる。
【００１４】
ここで、前記被参照描画要素は、描画するオブジェクトの属性を指定する描画要素であり、前記参照描画要素は、オブジェクト描画を実行する描画要素である。
【００１５】
また、好適な実施形態にかかる構造化文書印刷装置は、前記仮ノード生成手段は、前記参照描画要素と特定された描画要素であっても、現実には参照先が存在しない参照描画要素に対応する仮ノードを生成せず、かつ、前記被参照描画要素と特定された描画要素であっても、現実には他の描画要素から参照されていない被参照描画要素については、前記被参照情報を含まない仮ノードを生成して、前記文書ツリーを生成する。
【００１６】
本発明に従う構造化文書印刷装置によれば、ＳＶＧ文書に不要な部分が存在してもレイアウトが可能となり、不要部分を削除するのでメモリ資源の圧迫を防止することができる。
【００１７】
さらに、好適な実施形態にかかる構造化文書印刷装置は、前記本ノード生成手段は、他の描画要素から参照される被参照描画要素の本ノードを、前記被参照描画要素を参照する参照描画要素の本ノードをすべて削除した後に削除する。
【００１８】
本発明に従う構造化文書印刷装置によれば、参照される被参照描画要素の本ノードが参照する参照描画要素の本ノードよりも先に削除されることはなく、レイアウト構成を維持しつつメモリ資源の圧迫を防止することができる。
【００１９】
またさらに、好適な実施形態にかかる構造化文書印刷装置は、前記レイアウト手段によって、すべての仮ノードに対応する本ノードに基づくレイアウトが終了した後、前記本ノード生成手段は、その時点で残存する本ノードをすべて削除し、前記仮ノード生成手段は、その後すべての仮ノードを削除する。
【００２０】
本発明に従う構造化文書印刷装置によれば、本ノードをすべて削除した後、すべての仮ノードを削除するので、レイアウトの整合性を維持しつつ、メモリ資源の圧迫を防止することができる。
【００２１】
そして、好適な実施形態にかかる構造化文書印刷装置は、前記本ノード生成手段は、前記文書ツリーにおいて子ノードが存在する仮ノードに対応する本ノードを、前記レイアウト手段による前記子ノードのレイアウトが終了した後に削除する。
【００２２】
本発明に従う構造化文書印刷装置によれば、レイアウトの整合性を維持しつつ、メモリ資源の圧迫を防止できる。
【００２３】
加えて、本発明に従う構造化文書印刷装置は、構造化文書がＳＶＧ文書である場合に好適である。
【発明の効果】
【００２４】
本発明によれば、不要となったレイアウトノードを順次解放してメモリ資源の圧迫を防止し、省メモリ化を実現することができる。
【発明を実施するための最良の形態】
【００２５】
以下、図面を参照して、本発明の一つの好適な実施形態について説明する。以下に説明する実施形態では、ＳＶＧ文書を例示して説明するが、これに限定されず、ツリー構造化された複数の描画要素が記述された構造化文書であれば適用することができる。また、取り扱われるジョブは全てＳＶＧ形式のＸＭＬ文書（以下、単に「ＳＶＧ文書」という）の印刷出力を目的とした「印刷ジョブ」とするが、これは説明のための一つの例示であり、本発明の範囲は、ジョブが要求する出力目的が何であるか（例えば、印刷出力か、メール送信か、ファクシミリ送信か、或いはフォルダへの格納か）には制限されない。
【００２６】
まず、図１及び図２を参照して、本発明の一実施形態に従う構造化文書印刷装置の機能構成を説明する。図１は、本実施形態の構造化文書印刷装置の機能構成を示す。
【００２７】
図１に示すように、構造化文書印刷装置１００は、データ受信部１０２、文書解析部１０４、レイアウト部１０６、レンダリング部１０８、描画情報格納部１１０及び印刷実行部１１２を有する。
【００２８】
データ受信部（本発明の入力手段に相当）１０２は、ツリー構造化された複数の描画要素が記述された構造化文書、例えばＳＶＧ文書の入力を受信するモジュールである。データ受信部１０２は、例えば、ＬＡＮ、ＷＡＮ、Ｂｌｕｅｔｏｏｔｈや赤外線通信等の受信手段でもよい。
【００２９】
文書解析部（本発明の文書解析手段に相当）１０４は、データ受信部１０２から印刷ジョブを受けて、ＳＶＧ文書の構文、字句解析を行うモジュールである。さらに、文書解析部１０４は、仮ノード生成部（本発明の仮ノード生成手段に相当）１２２及び本ノード生成部（本発明の本ノード生成手段に相当）１２４を備える。仮ノード生成部１２２は、ＳＶＧ文書に含まれるすべての描画要素に対応する複数の仮ノードであって、各仮ノードに対応する描画要素の他の描画要素との参照・被参照関係が含まれる複数の仮ノードを生成し、生成された複数の仮ノードから構成される、ＳＶＧ文書中のツリー構造に対応する仮ノードツリーを生成する。また、本ノード生成部１２４は、仮ノード生成部１２２によって生成された仮ノードツリーに含まれる一部の仮ノードに対応する本ノードであって、各本ノードに対応する描画要素を描画するための情報が含まれる本ノードを生成し、生成された本ノードを含む部分ツリーを生成する。
【００３０】
仮ノード生成部１２２が生成する仮ノードのデータ構造の一例を図２に示す。すなわち、仮ノードテーブル１３２は、同図に示すように、データ項目として、親ｉｄ１３２１と、子ｉｄ１３２２と、xml:id１３２４と、xlink:href（hypertext reference：ハイパーリンク）属性１３２５と、fill（面の色）属性１３２６と、stroke（線の色）属性１３２７と、その他の属性１３２８とを有する。
【００３１】
親ｉｄ１３２１は、ツリー構造における親ノードを示す。子ｉｄ１３２２は、ツリー構造における子ノードを示す。xml:id１３２４、xlink:href属性１３２５、fill属性１３２６及びstroke属性１３２７は、それぞれ、ＳＶＧ文書中の一つの描画要素である。つまり、これらの属性１３２３〜１３２７は、仮ノードテーブル１３２に展開されている。一方、その他の属性１３２８には、ＳＶＧ文書中の、展開された属性１３２３〜１３２７以外の描画要素に関する属性情報が、テキストで格納される。つまり、その他の属性１３２８には、未展開のままの属性情報が格納される。仮ノード生成部１２２は、ＳＶＧ文書内のべての描画要素に対応する仮ノードを含む仮ノードツリーを生成する。
【００３２】
本ノード生成部１２４は、仮ノードに展開されている属性１３２３〜１３２７に加えて、仮ノードでは未展開のその他の属性１３２８に格納されている属性情報を展開して、すべての属性が展開されている本ノードを生成する。本ノード生成部１２４は、メモリ資源節約のため、全仮ノードついて同時に本ノードに展開せずに、一部の仮ノードのみを本ノードに展開した部分ツリーを生成する。
【００３３】
図１へ戻ると、レイアウト部（本発明のレイアウト手段に相当）１０６は、文書解析部１０４の解析結果に従って、複数の描画要素のレイアウトを行って、レイアウト文書を生成するモジュールである。このレイアウト部１０６は、例えば、本ノード生成部１２４によって生成された部分ツリーに従って、ページメディアに特化したレイアウトを行い、レイアウトの描画情報をレンダリング部１０８に発行する。
【００３４】
また、レイアウト部１０６が部分ツリーに基づいて、この部分ツリーに含まれる本ノードに対応する描画要素のレイアウトを行うと、本ノード生成部１２４は、複数の仮ノードにおける参照・被参照関係に基づいて、この部分ツリー内の本ノードの削除可否を判定し、削除可と判定された本ノードを削除する。この削除処理の詳細については、後述する。
【００３５】
レンダリング部（本発明のレンダリング手段に相当）１０８は、レイアウト部１０６によってレイアウトされたレイアウト文書（描画情報）に基づいて印刷イメージを生成するモジュールである。レンダリング部１０８は、描画情報に格納されている情報に基づいて、描画の開始地点、終了地点を割り出し、どのバンドに描画されるオブジェクトかを判定する。そして、その判定結果を描画情報格納部１１０に登録する。また、レイアウト部１０６から印刷命令を受け取った場合には、１バンド分の印刷イメージを生成し、そのバンドに必要な描画情報を描画情報格納部１１０より取得し、印刷イメージに描画する。
【００３６】
描画情報格納部１１０は、レンダリングされたバンドデータを格納し、バンドごとに描画情報を管理するモジュールである。印刷する用紙サイズにより管理するバンド数を変更する。
【００３７】
印刷実行部１１２は、印刷を実行するモジュールである。印刷実行部１１２は、レンダリング部１０８で生成されたバンドイメージの印刷を実行する。
【００３８】
次に、図３を参照して、本実施形態の構造化文書印刷装置１００の動作の概要を説明する。図３は、ＳＶＧ文書の解析からレイアウト処理までの一連の動作フローを示す。
【００３９】
データ受信部１０２がクライアントからＳＶＧ文書の印刷ジョブの出力指示を受けると、文書解析部１０４がＳＶＧ文書の記述内容の解析を行う（Ｓ１１）。そして、ＳＶＧ文書の解析結果に基づいて、仮ノード生成部１２２は仮ノードを作成する（Ｓ１２）。
【００４０】
さらに、文書解析部１０４は、１ページ分の仮ノードからなる仮ノードツリーを作成した後（Ｓ１３：Ｙｅｓ）、仮ノードツリーにおいて、不要ｉｄ及び不要ノードが存在するか否かを判定する（Ｓ１４）。不要ｉｄ及び不要ノードが存在する場合は（Ｓ１４：Ｙｅｓ）は、仮ノード生成部１２２は、１ページ内の不要id及び不要ノードを削除し（Ｓ１５）、不要ｉｄ及び不要ノードが存在しない場合は（Ｓ１４：Ｎｏ）、ステップＳ１５をスキップする。不要ｉｄ及び不要ノードの削除処理の詳細は後述する。
【００４１】
次に、仮ノード生成部１２２は、１ページ内のノードの出現順序の入れ替えを行う必要があるか否かを判定する（Ｓ１６）。出現順序の入れ替えの必要がある場合は（Ｓ１６：Ｙｅｓ）、仮ノード生成部１２２は、仮ノードツリーにおいて出現順序の入れ替え処理を行い（Ｓ１７）、出現順序の入れ替えの必要がない場合は（Ｓ１６：Ｎｏ）、ステップＳ１７をスキップする。これは、ＳＶＧ文書の描画要素のプロパティにはｉｎｈｅｒｉｔａｎｃｅ（継承）という概念があり、レイアウトを実施する前にプロパティの継承解決を行う必要があるからである。出現順序の入れ替え処理の詳細は後述する。
【００４２】
次に、文書解析部１０４の本ノード生成部１２４は、仮ノードに基づいて本ノードを作成する（Ｓ１８）。レイアウト部１０６は、ここで作成された本ノードに対応する描画要素のレイアウト処理を行う（Ｓ１９）。
【００４３】
本ノード生成部１２４は、本レイアウトの作成を依頼した後、不要となったノードを削除して記憶領域を解放する（Ｓ２０）。１ページ分の処理が終了すると（Ｓ２１：Ｙｅｓ）、ページ毎に処理を終了する。
【００４４】
レイアウト部１０６によって、すべての仮ノードに対応する本ノードに基づくレイアウトが終了した後、本ノード生成部１２４は、その時点で残存する本ノードをすべて削除する。また、仮ノード生成部１２２は、その後すべての仮ノードを削除する。このように本ノードをすべて削除した後、すべての仮ノードを削除するので、レイアウトの整合性を維持しつつ、メモリ資源の圧迫を防止することができる。
【００４５】
次に、図４を参照して、ステップＳ１２の仮ノード生成部１２２による仮ノード作成について詳細に説明する。
【００４６】
図４（Ａ）に示すように、ＸＭＬ文書１０００は、開始タグ<svg>と終了タグ</svg>とによって、ＳＶＧ形式であることが定義されている。すなわち、開始タグ<svg>と終了タグ</svg>との間に記述された内容がＳＶＧ文書である。
【００４７】
このＳＶＧ文書には、まず<circle>要素１０１０の内容が記述され、次に<use>要素１０２０の内容が記述されている。<circle>要素１０１０は円を描く描画要素である。<circle>要素１０１０には、r（半径）、fill（面の色）、xml:idの属性が記述され、各属性値が””（ダブルクォーテーション）の間に記述されている。すなわち、この<circle>要素は、半径r=10の円を描き、円内を青色で塗りつぶす描画要素であり、“the Group”というxml:idが付されている。
【００４８】
次に、<use>要素１０２０はイメージの再利用を表す描画要素である。<use>要素１０２０には、x（ｘ座標）及びxlink:href（ハイパーリンク）の属性が記述されている。すなわち、この<use>要素１０２０は、青色円の座標がx=100で、xml:idが“the Group”の描画要素を参照している。
【００４９】
そこで、仮ノード生成部１２２は、図４（Ｂ）に示すように、svgノード１５１０の下にcircleノード１５２０及びuseノード１５３０が存在する、仮ノードツリー１５００を作成する。
【００５０】
この例では、<use>要素１０２０に記述されているxlink:hrefが参照しているxml:id”the Group”は<circle>要素１０１０である。つまり、図４の例は、同じＳＶＧ文書内で参照、非参照関係が矛盾なく成立している。
【００５１】
これに対して、図５を用いて、参照、非参照関係が成立していない場合の仮ノード生成部１２２処理について説明する。すなわち、図３のステップＳ１４及びＳ１５の不要id、不要ノードの削除処理について詳細に説明する。
【００５２】
図５（Ａ）に示すＳＶＧ文書２０００には、まず<circle>要素２０１０の内容が記述され、次に<use>要素２０２０の内容が記述されている。このＳＶＧ文書の<circle>要素２０１０は、半径r=10の円を描き、円の面内を青色で塗りつぶし、xml:idが“the Group 0”であることを示している。また、<use>要素２０２０は、青色円の座標がx=100でxml:idが“the Group 1”の描画要素を参照している。
【００５３】
仮ノード生成部１２２は、ＳＶＧ文書２０００内の描画要素の親子関係に従って、図５（Ｃ）に示す仮ノードツリー２５００を生成する。
【００５４】
ところで、この例では、<use>要素２０２０に記述されているxlink:hrefの参照id”the Group 1”が<circle>要素２０１０のid”the Group 0”と一致しない。つまり、これらの参照及び非参照の関係が成立していない。従って、仮ノード生成部１２２は、<circle>要素２０１０のxml:id及び、参照先のない<use>要素２０２０は不要であるので、これを整理すると、図５（Ｂ）に示すＳＶＧ文書２１００となる。また、仮ノード生成部１２２は、ＳＶＧ文書２１００に対応するように、仮ノードツリー２５００からuseノード２５３０を削除するとともに、cirleノード２５２０のxml:id１３２４の値を削除する。その結果、図５（Ｄ）の仮ノードツリー２６００が生成される。
【００５５】
このように、仮ノード生成部１２２は、他を参照している参照描画要素であっても、現実には参照先が存在しない描画要素に対応する仮ノードを生成せず、かつ、参照されている被参照描画要素であっても、現実には他の描画要素から参照されていない描画要素については、被参照情報を含まない仮ノードを生成して、文書ツリーを生成することになる。したがって、ＳＶＧ文書に不要な部分が存在してもレイアウトが可能となり、不要部分を削除するのでメモリ資源の圧迫を防止することができる。
【００５６】
次に図６を参照して、本ノードの作成、及びレイアウト後の本ノードの削除処理を説明する。図６は、本ノード作成から不要ノードを削除する処理までの一連の動作フロー（図３のステップＳ１８〜Ｓ２１）を示す。
【００５７】
図６に示すように、文書解析部１０４の本ノード生成部１２４は、仮ノードツリーのルートノードから順に、それぞれに対応する本ノードを作成し（Ｓ３１）、レイアウト部１０６に作成した本ノードのレイアウト処理の実施を依頼する（Ｓ３２）。
【００５８】
次に、本ノード生成部１２４は、仮ノードツリーを参照し、ステップＳ３１で本ノードを作成した仮ノードに子ノードが存在するか否かを判定する（Ｓ３３）。子ノードが存在する場合は（Ｓ３３：Ｙｅｓ）は、その子ノード（仮ノード）を取得し（Ｓ３４）、ステップＳ３１に戻り、処理を継続する。これにより、一部の描画要素の本ノードを含む、部分ツリーが生成される。従って、レイアウト部１０６は、部分ツリーに従ってレイアウトを実施する。
【００５９】
一方、ステップＳ３３で子ノードが存在しない場合は（Ｓ：３３：Ｎｏ）、ステップＳ３２で直前にレイアウトされた本ノードが、他から参照されている描画要素に対応するノードであるか否かを判定する（Ｓ３５）。他の要素から参照されていない場合は（Ｓ３５：Ｎｏ）、本ノード生成部１２４はその本ノードを削除する（Ｓ３６）。これにより、他から参照もされておらず、かつ、子ノードも存在しない本ノードは、レイアウト終了後に速やかに削除される。
【００６０】
これに対し、他の要素から参照されている場合は（Ｓ３５：Ｙｅｓ）、参照されている本ノードを残したままステップＳ３７へ移行する。これは、参照している描画要素の処理で、この本ノードが必要なため、削除せずに残している。
【００６１】
次に、本ノード生成部１２４は、仮ノードツリーを参照して、ステップＳ３２で直前にレイアウトされた本ノードの後続ノードの有無を判定する（Ｓ３７）。後続ノードがある場合は（Ｓ３７：Ｙｅｓ）、その後続ノード（仮ノード）を取得し（Ｓ３８）、ステップＳ３１へ戻って処理を継続する。
【００６２】
一方、後続ノードがない場合は（Ｓ３８：Ｎｏ）、対象となっている本ノードの親ノードを取得する（Ｓ３９）。
【００６３】
そして、ここで取得した対象ノードがsvgノードである場合は（Ｓ４０：Ｙｅｓ）、このときには、すべての描画要素のレイアウト処理が終了しているので、本ノード生成部１２４は、svgノード（本ノード）及び他の残存している子ノード（本ノード）を削除してレイアウト処理を終了する。
【００６４】
一方、対象ノードがsvgノードでない場合は（Ｓ４０：Ｎｏ）、本ノード生成部１２４は、仮ノードツリーを参照して、対象ノードが他の描画要素から参照されているか否か、または子ノードを有するか否かを判定する（Ｓ４１）。対象ノードが他の描画要素から参照されている場合、または子ノードが存在する場合は（Ｓ４１：Ｙｅｓ）、ステップＳ３７へ戻る。一方、対象ノードが他の要素から参照されていない場合、及び子ノードが存在しない場合は（Ｓ４１：Ｎｏ）、本ノード生成部１２４は、対象となっている本ノードを削除した後（Ｓ４２）、ステップＳ３７へ戻る。
【００６５】
このように本ノード生成部１２４は、文書ツリーにおいて子ノードが存在せず、かつ他から参照されていない描画要素に対応する本ノードは、レイアウト部１０６によるレイアウトが終了した後に削除される。一方で、子ノードがあるときや、他のノードから参照されているときは、直ちには削除せずに、他のノードのレイアウトが確実に行われるようにする。この結果、本ノードによる全体の文書ツリーを作成せずに、部分ツリーを作成するのみで文書全体のレイアウトをすることが可能である。
【００６６】
次に、図７を参照して、本ノードの作成及び削除処理について具体的に説明する。
【００６７】
図７（Ａ）に示すように、このＳＶＧ文書３０００には、まず<solidColor>要素３０１０、次に<circle>要素３０２０、さらに<circle>要素３０３０が記述されている。
【００６８】
<solidColor>要素３０１０は、色定義に関する描画要素である。<solidColor>要素３０１０には、xml:id、solidColorの属性が記述され、各属性値が””の間に記述されている。すなわち、この<solidColor>要素３０１０は、単一色が赤色で、xml:idがsolidRedであることを示している。<solidColor>要素３０１０は、次に説明するように、<circle>要素３０２０から参照される非参照描画要素である。<circle>要素３０２０には、ｒ（半径）、stroke（線の色）、stroke-width（線の幅）の属性が記述され、各属性値が””の間に記述されている。すなわち、この<circle>要素３０２０は、半径80の円を描き、線の色が赤色で、strokeのリンク先urlが#solidRedであることを示している。つまり、<circle>要素３０２０は、<solidColor>要素３０１０を参照する参照描画要素である。<circle>要素３０３０には、ｒ（半径）、cx（楕円）、fill（面の色）の属性が記述され、各属性値が””の間に記述されている。すなわち、この<circle>要素３０３０は、半径10の楕円を描き、楕円の面内の色が赤色であることを示している。
【００６９】
このとき、仮ノード生成部１２２は、図７（Ｂ）に示す仮ノードツリー３５００を生成する。この例では、circle1ノード３５３０が<circle>要素３０２０に対応し、circle1ノード３５４０が<circle>要素３０３０に対応する。
【００７０】
図６のフローチャートに基づいて、図７のＳＶＧ文書３０００に対応する本ノードの生成及び削除について説明する。
【００７１】
まず、仮ノードツリー３５００に基づいて、本ノード生成部１２４がsvgノード（本ノード）を作成する（Ｓ３１）。レイアウト部１０６が、ここで生成された本ノードに対応する描画要素のレイアウトを実行する（Ｓ３２）。svgノード３５００には子ノードが存在するので、子ノードであるsolidColorノード３５２０が取得される（Ｓ３３，Ｓ３４）。
【００７２】
本ノード生成部１２４が、solidColorノード３５２０に対応する本ノードを作成する（Ｓ３１）。このとき、svgの本ノードとsolidColorの本ノードで、部分ツリーが構成される。レイアウト部１０６が、この部分ツリーのsolidColorの本ノードに基づくレイアウト処理を実施する（Ｓ３２）。このsolidColorノード３５２０は他の仮ノードから参照されているため（Ｓ３５：Ｙｅｓ）、本ノード生成部１２４は、solidColorの本ノードを削除せず、後続ノードへ移行する（Ｓ３７，Ｓ３８）。
【００７３】
次に、本ノード生成部１２４は、circle1ノード３５３０に対応する本ノードを作成する（Ｓ３１）。このとき、svgの本ノード、solidColorの本ノード及びcircle1の本ノードで、部分ツリーが構成される。レイアウト部１０６が、この部分ツリーのcircle1の本ノードに基づくレイアウト処理を実施する（Ｓ３２）。このcircle1ノード３５３０は他の要素から参照されず、子ノードも存在しないので（Ｓ３３，Ｓ３５）、本ノード生成部１２４は、circle1の本ノードを削除する（Ｓ３６）。
【００７４】
次に、本ノード生成部１２４は、circle2ノード３５４０についても同様に、本ノードの生成、レイアウト及び削除を行う。
【００７５】
最後に、svgの本ノード及び部分ツリーにおけるsvgの本ノードの子ノードすべて（ここでは、solidColorの本ノード）を削除する。
【００７６】
このように、本ノード生成部１２４は、他の描画要素から参照される被参照描画要素の本ノードを、被参照描画要素を参照する参照描画要素の本ノードをすべて削除した後に削除する。すなわち、本ノード生成部１２４は、文書ツリーに含まれる複数の仮ノードに対して、本ノードの生成及び削除を、所定の優先順位（深さ優先探索）に従って行っている。したがって、レイアウト構成を維持しつつメモリ資源の圧迫を防止することができる。ここで、被参照描画要素は、描画するオブジェクトの属性を指定する描画要素であり、上記参照描画要素は、オブジェクト描画を実行する描画要素である。
【００７７】
次に、図８及び図９を参照して、１ページ内のノードの出現順序の入れ替えを行う必要がある場合について説明する。
【００７８】
例えば図８は、１ページ内のノードの出現順序の入れ替えを行う前のＳＶＧ文書を示す。
【００７９】
図８に示すようなＳＶＧ文書４０００には、<svg>４０１０をルートとして、１階層目に<circle>要素４０２０と<g>要素（グループｇ1）４０３０が記述されている。また、<g>要素４０３０を親ノードとして、２階層目に<rect>要素４０４０及び<defs>要素４０５０が記述されている。さらに、<defs>要素４０５０を親ノードとして、<g>要素（グループｇ2）４０６０が記述され、この<g>要素４０６０を親ノードとして、<linearGradient>要素４０７０が記述されている。この<linearGradient>要素４０７０には、<stop>要素４０８０、４０９０が記述されている。
【００８０】
<rect>要素４０４０には、fill、storoke-width、x座標、ｙ座標、width、heightの属性が記述され、各属性の値が””の間に記述されている。すなわち、<rect>要素４０４０は、線の太さが5で、x座標が100、ｙ座標が100で、四角の幅が600、高さが200であり、fill属性のリンク先urlが#MyGradientであることを示している。
【００８１】
また、<defs>要素４０５０配下の<g>要素４０６０のグラデーションの色は青色である。<linearGradient>要素４０７０のXml:idはMyGradient であり、グラデーションの色はinherit（承継）する。さらに、stop offsetは、0.1がinherit（承継）の青色で、0.9が赤色であることを示している。
【００８２】
この例によれば、<rect>要素４０４０において、fill属性のリンク先urlを#MyGradientと指定しているにも関わらず、参照される要素である<defs>要素４０５０配下の<linearGradient>要素４０７０が後に記述されている。すなわち、図８のＳＶＧ文書４０００に示す要素の出現順序に従って仮ノードツリー４５００を作成すると、図９（Ａ）に示すようになる。仮ノードツリー４５００を用いて、図６で説明した本ノード処理を実行すると、以下のような不都合が起きる。すなわち、本ノードに基づくレイアウトを実施しようとした場合、<rect>要素４０４０が参照しているfillプロパティを取得しなければならないが、<linearGradient>要素４０７０の本ノードが作成されていない段階では、stop-color="inherit"の値解決ができない。よって、stop-colorの値が取得できず、正常なレイアウト結果とならない。
【００８３】
このような場合には、仮ノード生成部１２２が、仮ノードの論理的な構造は維持したまま、仮ノードツリーにおいて仮ノードの出現順序を入れ替える処理を実施する。例えば、仮ノード生成部１２２は、図９（Ｂ）に示す仮ノードツリー４６００を生成する。すなわち、ルートノードである<svg>ノード４６１０直下の１階層目において、参照される要素である<linearGradient>要素４０７０の仮ノード４６５０を含む<g>要素（グループｇ1）の仮ノード４６２０を前方へ移行し、次に<circle>要素４６８０を記述する。その後に、さらに<g>要素（グループｇ1）の仮ノード４６２５を重複して設け、この<g>要素（グループｇ1）ノード４６２５を親ノードとして、fill属性のリンク先を含む<rect>要素の仮ノード４６９０を設ける。レイアウト実施前に仮ノードの順序を入れ替える仮ノード再構成を行うことによって、<rect>要素４０４０のレイアウトを実施しようとした時点で、解決済みfillプロパティを取得することができるため、正常なレイアウト結果となる。
【００８４】
このように、要素の出現順に仮ノードを作成し、その出現順序のままレイアウトを行った場合には、プロパティの継承解決ができないケースが存在する（図８及び図９（Ａ）参照）。したがって、本発明では１ページ分の仮ノード作成後、ノードの出現順序(ツリー関係)の入れ替えを行っている（図９（Ｂ）参照）。すなわち、仮ノード生成部１２２は、すべての描画要素の参照・被参照関係を特定した後、特定された参照・被参照関係に基づいて、他の描画要素から参照される被参照描画要素の仮ノードが、被参照描画要素を参照する参照描画要素の仮ノードよりも、前記文書ツリーにおいて高い優先順位になるように配置された文書ツリーを生成する。
【００８５】
以上説明したように、本発明に係る構造化文書印刷装置１００、構造化文書印刷方法及びプログラムによれば、１ページ分の仮ノードを作成した後、レイアウトを実行する前に参照されていないidが存在するか否かの判定を行う。そして、参照されていないノードおよび参照先のidが存在しないノードを仮ノードから削除する。また、削除してもレイアウト結果が変わらないノードの削除も行う。
【００８６】
このように仮ノードを作成した段階で、レイアウトに影響を与えない不要なノード削除するため、不要な情報をメモリ資源から解放することができ、省メモリ化を実現できる。また、レイアウトを実施し、その後不要となるノードであれば削除するため、１ページ分のレイアウトが終了した時点でノードの削除を行うプログラムと比較した場合に、メモリ資源を圧迫される可能性が減少する。さらに、他のノードから参照される可能性があるノードは1ページ分のレイアウトが終了するまで解放しない。そして、参照するノードのレイアウトが終了し、今後どのノードからも参照されないことを検出した時点で参照されるノードを削除するので、更なる省メモリ化が実現可能となる。
【００８７】
以上、本発明の好適な実施形態を説明したが、これは本発明の説明のための例示であり、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、その要旨を逸脱しない範囲で、上記実施形態とは異なる種々の態様で実施することができる。
【図面の簡単な説明】
【００８８】
【図１】本発明の一実施形態に従う構造化文書印刷装置の機能構成を示すブロック図である。
【図２】文書解析部が有する仮ノードテーブルの一例を示す概略図である。
【図３】ＳＶＧ文書の解析からレイアウト処理までの一連の動作フローを示すフローチャートである。
【図４】参照されるidが存在する場合のＳＶＧ文書及びツリー構造を示す説明図である。
【図５】参照されるidが存在しない場合のＳＶＧ文書及びツリー構造を示す説明図である。
【図６】本ノード作成から不要ノードを削除する処理までの一連の動作フローを示すフローチャートである。
【図７】仮ノードを作成した後、リンク先が参照される要素に存在する場合のＳＶＧ文書及びツリー構造を示す説明図である。
【図８】１ページ内のノードの出現順序の入れ替えを行う前のＳＶＧ文書を示す説明図である。
【図９】図８及び図９のＳＶＧ文書の仮ノードレイアウトを示す概念図である。
【符号の説明】
【００８９】
１００…構造化文書印刷装置
１０２…データ受信部（入力手段）
１０４…文書解析部（文書解析手段）
１０６…レイアウト部（レイアウト手段）
１０８…レンダリング部（レンダリング手段）
１１０…描画情報格納部
１１２…印刷実行部（印刷手段）
１２２…仮ノード生成部
１２４…本ノード生成部
１３２…仮ノードテーブル
【図１】
2010113650.tif 000003
【図２】
2010113650.tif 000004
【図３】
2010113650.tif 000005
【図４】
2010113650.tif 000006
【図５】
2010113650.tif 000007
【図６】
2010113650.tif 000008
【図７】
2010113650.tif 000009
【図８】
2010113650.tif 000010
【図９】
2010113650.tif 000011