(57)【要約】【課題】  同一データを一つのオブジェクトに統一し、最適化された中間言語ファイルを生成する手段を提案する。【解決手段】  中間言語ファイルを構成するオブジェクト毎に、オブジェクト内の先頭からある一定バイトを加算した値を計算する。加算値が一致するオブジェクト同士があれば、ハッシュ関数によって該当オブジェクトのハッシュ値を算出する。ハッシュ値も一致すれば、同一オブジェクトであると判断する。同一オブジェクトと判断されたオブジェクト群は、一つを除いて削除する。また、削除したオブジェクトを参照しているすべてのオブジェクトの参照先を残されたオブジェクトへ変更する上記中間言語ファイルの最適化は、中間言語ファイルを生成する際に行っても良いし、中間言語ファイル生成後に行っても良い。【選択図】  図１
2006350909.tif 000002
【特許請求の範囲】
【請求項１】
元文書データに基づいて、中間ファイルデータを生成する文書生成装置であって、前記中間ファイルデータを構成するオブジェクトの重複をなくし、最適な中間ファイルデータを作成する手段を有した文書生成装置。
【請求項２】
前記中間ファイルデータの最適化手段は、中間ファイルデータを構成するオブジェクト同士の比較を行うことによって複数の同一オブジェクトを単一のオブジェクトに統一することを特徴とする請求項１に記載の文書生成装置。
【請求項３】
前記オブジェクトの比較手段は、第一に簡易の比較を行い、一致する可能性のあるオブジェクト同士のみ第二の比較を行うことを特徴とする請求項１に記載の文書生成装置。
【請求項４】
前記オブジェクトの第二の比較手段は、ハッシュ関数によって求めたハッシュ値を用いることを特徴とする請求項１に記載の文書生成装置。
【請求項５】
前記中間ファイルデータの最適化を行う際、オブジェクトの種類・サイズによって最適化対象オブジェクトとするかどうかを選択する手段を有する請求項１に記載の文書生成装置。
【請求項６】
所定形式の中間ファイルデータを最適化するファイル最適化方法であって、中間ファイルデータを構成するオブジェクトデータ取得工程と、中間ファイルを構成するオブジェクト階層データ取得工程と、参照オブジェクトを持たない下層オブジェクトデータ取得工程と、オブジェクト比較工程と、オブジェクト結合工程とを有することを特徴とするファイル最適化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、PDF等に代表される中間言語ファイルの最適化に関わるものである。
【背景技術】
【０００２】
コンピュータやモニタの機種、OS、搭載フォントの違いを吸収し、プラットフォームが違っても同じ体裁でページが表示できること目的としたPDF(Portable Document Format)等の中間言語が広く普及している。PDF等の中間言語は、文書の構造情報・個別ページの描画内容・そこに表示する画像やフォントの情報などをそれぞれ独立したオブジェクトとして定義し、互いに参照させる階層構造を持っている。図１に中間言語ファイルの構造の一例を示した。
【０００３】
上記のような中間言語ファイルは、アプリケーションファイルからプリンタドライバを用いることによって生成されるのが一般的である。そこで、まずプリンタドライバを用いた印刷制御方法および処理の流れについて説明する。
【０００４】
パーソナルコンピュータ等の汎用情報処理装置（以下、ホストコンピュータ）では、ワードプロセッサや表計算のようなアプリケーションソフトウェア（以下、単にアプリケーションという。）が基本ソフト（ＯＳ：オペレーティングシステム）の上で動作している。アプリケーションにおいて印刷を行う場合は、そのプログラム内から、基本ソフトが提供するいくつかのサブシステムのうち、グラフィック・サブ・システムの機能を用いて行う。グラフィック・サブ・システムは、例えばＧＤＩ(Graphic Device Interface)と呼ばれておりディスプレイやプリンタに対する画像情報の処理を司っている。ＧＤＩは、ディスプレイやプリンタといったデバイス毎の依存性を吸収するためにデバイスドライバと呼ばれるモジュールを動的にリンクし、それぞれのデバイスに対する出力処理を行う。プリンタに対するこのモジュールはプリンタドライバと呼ばれる。プリンタドライバでは、その能力や機能などに応じてあらかじめデバイスドライバに実装することが決められているＤＤＩ(Device Driver Interface)と呼ばれる関数群を用意する必要がある。アプリケーションのＡＰＩ(Application Programing Interface)コールをＧＤＩがデバイスドライバ用にデータ変換を行い、このＤＤＩ関数群が適宜ＧＤＩからコールされ所定の印刷処理が実行されるような仕組みになっている。ＧＤＩでは、このようにプリンタドライバを介してアプリケーションからの印刷要求をシーケンシャルに処理している。
【０００５】
一般に、プリンタドライバはその使用用途によりプリンタ出力系とファイル出力系に大別できる。
【０００６】
プリンタ出力系とは、印刷装置側にPDL(Printer Description Language)と呼ばれる制御コマンドを処理可能なコントローラを搭載するもの向けで、システムからDDI関数を介して渡される描画命令をPDLコマンドに変換し、プリンタ機器に出力を行う。
【０００７】
一方、ファイル出力系では、印刷装置側にデータを送ることが直接的な目的ではなく、ＤＤＩ関数から受け取った描画命令を予め定義された中間言語形式に変換し、ホストコンピュータのディスクシステム上に中間言語ファイルとして蓄積するものである。この代表的な中間言語にはＰＤＦ(Portable Document Format)やＳＶＧ(Scalable Vector Graphics)等が存在する。中間言語ファイルはホストコンピュータ上のファイルシステム上に保存され、中間言語を解釈可能な特定のアプリケーションプログラムによりホストコンピュータ上で表示され、ユーザの指示により再びグラフィック・サブ・システムを介して印刷装置に印刷を行うことが可能である。
【０００８】
又、別の従来例としては、特許文献１及び特許文献２をあげることが出来る。
【特許文献１】特開昭63-055642号公報
【特許文献２】特開平03-250333号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
アプリケーションファイルからＰＤＦ等の中間言語ファイルを生成する際、上述のようにプリンタドライバはアプリケーションからの印刷要求をシーケンシャルに処理する。そのため、アプリケーションファイル内に同一データが複数ある場合、その情報をプリンタドライバに伝達する手段がなく、同一画像データをそれぞれ別のオブジェクトとして扱った中間言語ファイルを生成してしまうことが起こる。例として図１に示したような中間言語ファイルが考えられる。図１に示した例では、ページを構成する画像オブジェクト(ImageObjectA１０６、ImageObjectB１０７、ImageObjcetC１０８)は全て同じ画像であるにもかかわらず、PageObjcetA１０２、PageObjectB１０３、PageObjectC１０４にそれぞれ別のオブジェクトとして同一のImageObjectを生成してしまう。そのため明らかに冗長なデータがあり、ファイルサイズが増大してしまうという問題点がある。例えば、各ページに同一の背景画像(会社のロゴなど)を使用しているような100ページの文書ファイルを、中間言語ファイルに変換した場合、100個の画像オブジェクトを中間言語ファイル内に保持し、それぞれのページオブジェクトからそれぞれの画像オブジェクトを参照してしまう。そのため、ファイルサイズが無駄に大きくなってしまう。このような問題点を解決するには、図２に示すように、同一の画像オブジェクトは中間言ファイル内に一つだけ保持するようにし、各ページオブジェクトはその画像オブジェクトを参照するといった階層構造が望ましい。今回は説明上画像オブジェクトに限定した説明を行っているが、他のオブジェクト(PageObject、TextObjcet等)でも同様のことが言える。例えば、図１においてはPageObjectB１０３とPageObjectC１０４も全く同じObjectである。そのため図３に示すようにPageObjcetB１０３に統一し、PagesObject１０１はPageObjcetB１０３を2回参照することによって最適化することが望ましい。
【課題を解決するための手段】
【００１０】
中間言語ファイルを構成するオブジェクト毎に、オブジェクト内の先頭からある一定バイトを加算した値を計算する。加算値が一致するオブジェクト同士があれば、そのオブジェクト同士は同一のものである可能性があるため、ハッシュ関数によって該当オブジェクトのハッシュ値を算出する。ハッシュ値も一致すれば、同一オブジェクトであると判断する。同一オブジェクトと判断されたオブジェクト群は、一つを除いて削除する。また、削除したオブジェクトを参照しているすべてのオブジェクトの参照先を残された（削除されなかった）オブジェクトへ変更する。この方法によって、図１のような冗長のある中間言語ファイルから、図３に示すような中間言語ファイルへ最適化することが可能となる。上記中間言語ファイルの最適化は、中間言語ファイルを生成する際に行っても良いし、中間言語ファイル生成後に行っても良い。
【発明の効果】
【００１１】
本発明によれば、中間言語ファイルから冗長な(重複した)データを削除し、データサイズを抑制した中間言語ファイルを生成することができる。
【発明を実施するための最良の形態】
【００１２】
次に、本発明の詳細を実施例の記述に従って説明する。
【００１３】
（第一の実施例）
＜ソフトウェアの構成例＞
図６は、本発明の第一実施形態に係るファイル変換システムのソフトウェアブロック図である。図６において、ホストコンピュータ６０１は、パーソナルコンピュータ等の情報処理装置である。ホストコンピュータ６０１には、ディスプレイ６０７が接続された画像表示部６０２、中間言語解析部６０３、ファイル変換部６０４、データ入出力部６０５、データ格納部６０６等が含まれる。
【００１４】
中間言語解析部６０３は、中間言語ファイルを解析し、画像表示部６０２を介してディスプレイ６０７に表示する。あるいは、印刷出力をデータ入出力部６０５を介してホストコンピュータに接続されたプリンタへ出力する。具体的には、中間言語ファイルとしてPDFファイルを用いた場合におけるアドビ社のアドビリーダなどが中間言語解析部６０３に相当する。
【００１５】
ファイル変換部６０４では、ホストコンピュータ６０１から変換対象の中間言語ファイル内のオブジェクトを解析し、最適化を行う。
【００１６】
データ入出力部６０５は、電話回線やＬＡＮ等のネットワーク６０８を介して他のホストコンピュータやプリンタとデータを通信する処理を行う。また、図６ではキーボードやポインティングデバイス等の入出力デバイスもデータ入出力部６０５に接続されるものとしている。
【００１７】
ホストコンピュータ６０１と他のホストコンピュータやプリンタとを接続するネットワーク６０８の形態としては、ＬＡＮ、インターネットあるいは無線等、通信ができるものであれば、その種類は問わない。
【００１８】
データ格納部６０６には、不図示の文書処理アプリケーションなどのアプリケーションプログラムにより作成されたアプリケーションデータファイルや、ＰＤＦファイル等の中間ファイルを格納するための変換の元データとなる変換対象のアプリケーションデータファイルが格納されている。このほかホストコンピュータのオペレーティングシステムが保持するシステム情報が保存されている。またホストコンピュータの有するこれらソフトウェア資源およびハードウェア資源のデータベースや、本実施形態においてホストコンピュータが参照するデータも保存されている。
【００１９】
＜ハードウェアの構成例＞
図７はホストコンピュータとして使用可能な情報処理装置の構成を示すハードウェア構成図である。図６のホストコンピュータ６０１の構成は、図７の構成において、メモリ６０１ｂに格納されたプログラムを、ＣＰＵ６０１ａにより実行することで実現される。また、図７の構成を実現するためのプログラムは、ハードディスク等の外部メモリ６０１ｃに格納される。外部メモリ６０１ｃは、フレキシブルディスクやＣＤＲＯＭ等の取り外し可能な記憶媒体を用いるものであっても良い。また、データ格納部６０６は、外部メモリ６０１ｃの一部領域として実現することができる。
【００２０】
ディスプレイ６０７には画像が表示され、Ｉ／Ｏインターフェース６０１ｄを介してネットワーク６０８等に接続される。また、キーボードやポインティングデバイス６０１ｅにより、オペレータは必要な入力を行う。
【００２１】
＜中間言語ファイル最適化の処理手順＞
図４に示したフローチャートを用いて、第一の実施例の概要を説明する。図１に示した中間言語ファイルを図３に示した中間言語ファイルへ最適化する処理を例に説明する。図１の例では、ImageObjectA１０６、ImageObjectB１０７、ImageObjectC１０８は同一のオブジェクトであり、また、PageObjcetB１０３、PageObjcetC１０４もそれぞれImageObjctB１０７、ImageObjcetC１０８を参照しているが、参照しているImageオブジェクトが異なる以外は同一のオブジェクトである。
【００２２】
まず処理４０１にて、ホストコンピュータ６０１は最適化対象の中間言語ファイルをデータ格納部６０６から読み出す。最適化対象のファイルの指定は、ユーザがポインタデバイス等で行うのが一般的であるが、特に手段は問わない。
【００２３】
処理４０２から処理４１５までの処理は、すべてファイル変換部６０４で行う。
【００２４】
処理４０２では、中間言語ファイルからオブジェクトを抽出する。各オブジェクトは中間言語のフォーマットに沿って記述されている。例えば中間言語ファイルがPDFである場合、オブジェクトの始まりには「１(オブジェクト番号) 0（世代番号） obj」、終わりには「endobj」といった形式で記述されている。図１の例においては、PagesObjcet１０１のオブジェクト番号は１、PageObjectA１０２のオブジェクト番号は２といったように記述されている。そのため中間言語ファイルからオブジェクトを抽出することは容易であると言える。
【００２５】
次に処理４０３にて、階層構造情報を取得する。階層構造情報とは各オブジェクトそれぞれがどのオブジェクトを参照しているかを示す情報である。中間言語ファイルでは、各オブジェクトはそのオブジェクトが参照しているオブジェクトの番号を保持しているのが一般的である。図１を例にすると、PagesObject１０１は、PageObjectA１０２、PageObjectB１０３、PageObjectC１０４を参照している。またPageObjectA１０２はTextObject１０５、ImageObjectA１０６、PageObjectB１０３はImageObject１０７を、PageObjectC１０４はImageObjectC１０８をそれぞれ参照している。
【００２６】
次に処理４０４にて、処理４０２、４０３で得た階層構造情報を基に図５の（１）に示すようなオブジェクト情報テーブル５０１を作成する。オブジェクト番号５０２、参照オブジェクト番号５０３にそれぞれオブジェクト番号、参照オブジェクト番号を格納する。
【００２７】
次に処理４０５にて、オブジェクト情報テーブル５０１から参照オブジェクトの存在しないオブジェクト（図１の例ではオブジェクト番号５、６、７、８）を、下層オブジェクトとして抽出し、下層オブジェクトフラグ５０４にフラグを立てる。以降、処理４０６から処理４１４までの処理は、下層オブジェクトフラグ５０４にフラグが立てられているオブジェクトに対して行う。
【００２８】
次に処理４０６にて、抽出された下層オブジェクトの加算値を算出し、オブジェクト情報テーブル５０１の加算値情報５０４に格納する。ここでいう加算値とは各オブジェクトの先頭からある一定バイト数の値を単純加算した値である。
【００２９】
次に処理４０７にて、算出した加算値同士の比較を行う。加算値が一致するオブジェクト同士であれば、そのオブジェクト同士は同一のオブジェクトである可能性があるため、同一オブジェクト候補として抽出する（処理４０８）。そして同一オブジェクト候補が存在すれば処理４１０へ移行し、存在しなければ処理４１５へ移行する（処理４０９）。
【００３０】
処理４１０では、ハッシュ関数によって該当オブジェクトのハッシュ値を算出し、オブジェクト情報テーブル５０１のハッシュ値情報５０６に格納する。ハッシュ値とは、元データから固定長の擬似乱数でのことであり、ハッシュ値を生成する関数はハッシュ関数と呼ばれる一般的なものである。ある元データとハッシュ値が等しい別の元データを生成することが出来るハッシュ関数を用意することは現実的に難しいとされている。そのため、中間言語ファイル内に保持されている異なるオブジェクトのハッシュ値が一致してしまう可能性も存在するが、その確率はきわめて低いものであるため、処理４１１のハッシュ値の比較処理においては、異なるハッシュ値を持つオブジェクト同士は、異なるオブジェクトであると判断し、逆にハッシュ値が一致すれば同一オブジェクトであると判断する。ハッシュ値が一致したものがあれば処理４１４へ移行し、存在しなければ処理４１５へ移行する（処理４１３）。図１の例では、ここまでの処理の結果、オブジェクト情報テーブルは図５の（２）のように更新される。
【００３１】
次に処理４１４にて、同一オブジェクトと判断されたオブジェクト群から一つ代表オブジェクトを選び、それ以外のオブジェクトを削除する。また、削除したオブジェクトを参照しているすべてのオブジェクトの参照番号を、代表オブジェクトに変更する。図１の例では、ImageObjectA１０６、ImageObjectB１０７、ImageObjectC１０８の３つのオブジェクトは同一オブジェクトであると判断され、ImageObjectA１０６が代表オブジェクトとなる。、ImageObjectB１０７、ImageObjectA１０８は削除される。それに伴い、ImageObjectB１０７、ImageObjectA１０８を参照していたPageObjectB１０３、PageObjectC１０４が保持している参照オブジェクト番号もオブジェクト番号６に更新する。また、同時にオブジェクト情報テーブル５０１も更新する。この結果、図１に示した中間言語ファイルの例では、オブジェクト情報テーブルは図５の（３）のようになり、また中間言語ファイルの階層構造は図２のように最適化される。
【００３２】
次に処理４１５にて、ルートオブジェクト（図１の例ではPagesObject１０１）以外の処理が終了していれば最適化処理の終了、ルートオブジェクト以外の処理が終了していなければ処理４０５へ移行し、処理４０６〜処理４１４の処理を繰り返す。2回目以降の処理４０５（下層オブジェクトの抽出処理）では、参照オブジェクト番号５０３のすべてが下層オブジェクトである（下層オブジェクトフラグ５０４が立てられている）オブジェクトも下層オブジェクトととして扱うこととする。図５の（３）の例では、オブジェクト番号２，３，４が下層オブジェクトとなる。
【００３３】
以上の手順により図１の例では、最終的に図３に示すような階層構造をもつ中間言語ファイルに最適化される。
【００３４】
上記の手段によって最適化を実行するわけだが、加算値による比較を行った後にハッシュ値による比較を行った理由は、処理の効率化のためである。まず加算値の比較を行い、同一オブジェクト候補を求めることによって、明らかに共通のオブジェクトではないオブジェクトのハッシュ値の計算時間を削減するためである。
【００３５】
また、下層オブジェクトから処理を行っていった理由について以下に述べる。図１に示した階層構造を持つ中間言語ファイルの例では、PageObjectB１０３とPageObjectC１０４も同一のものである。つまりこの例では、全く同じページが2ページ存在している。しかし、単純にオブジェクトの加算値、ハッシュ値を用いて最適化を図った場合、両オブジェクトが保持している参照オブジェクト番号の相違から、両オブジェクトを異なるページと判断してしまう。そこで、本発明では最適化を下層から施すという手段を選択している。
【００３６】
（第二の実施例）
第一の実施例では中間言語ファイルのすべてのオブジェクトを最適化の対象としていた。しかし全てのオブジェクトを最適化の対象とするのは望ましくない場合がある。例えば、中間言語ファイルにおいて、重複した画像データのみを最適化したい場合、最適化の対象オブジェクトを画像オブジェクトに限定することによって処理時間の短縮が可能となる。また、サイズの小さいオブジェクトを最適化してもファイルサイズ削減の効果は少ないと考えられ、逆にサイズの大きいオブジェクトを最適化するとハッシュ値の計算に時間がかかり、結果として最適化処理全体の処理時間が大きくなってしまうと考えられる。そこで最適化するオブジェクトに上限サイズ・下限サイズを設けることによって、効率的な最適化処理を行うことが望ましい。
【００３７】
そこで第二の実施例として、最適化の対象オブジェクトを限定し、効率的な最適化処理を実現するための手段について以下に述べる。
【００３８】
図８に示したフローチャートを用いて説明する。図８は第一の実施例の処理手順を示した図４に幾つかの処理を加えたものである。
【００３９】
まず、第一の実施例同様に処理８０１にて最適化対象ファイルを選択する。次に処理８０１−２にて最適化条件の設定を行う。最適化条件の設定は、例えば図９に示すような最適化条件設定画面９０１を表示し、ユーザに設定を促す。対象オブジェクト種類選択欄９０２では、最適化の対象とするオブジェクトを設定する。この例では、「テキストオブジェクト」、「画像オブジェクト」、「グラフィックオブジェクト」の中からユーザがチェックボックスにチェックを入れることによって、最適化の対象とするオブジェクトの種類を指定することとする。また、対象オブジェクトサイズ設定欄９０３にてユーザが変換対象とするオブジェクトのサイズの上限・下限を入力する。そして図10に示すような最適化条件設定テーブル１００１を作成する。対象オブジェクト種類選択欄９０２で選択したオブジェクト種類を１００２〜１００４に格納する。対象オブジェクトであれば１、そうでなければ０を格納するものとする。また上限サイズを１００５に、下限サイズを１００６に格納する。図９に示したような設定であれば、「グラフィックオブジェクト」１００２、「テキストオブジェクト」１００３に０、「Imageオブジェクト」１００４に１、上限サイズ１００５に100KB、下限サイズ１００６には１０KBを格納する。
【００４０】
次に処理８０２にて、上記最適化条件を満たすオブジェクトを抽出する。オブジェクトにはそれぞれの属性（オブジェクトの種類）を示す情報が含まれている。属性を示す情報は中間言語毎、またオブジェクトの種類毎に異なる。本実施例ではオブジェクトの種類を特定する手段は特に問わないが、例として中間言語がＰＤＦである場合の画像オブジェクトを特定する手段について述べておく。ＰＤＦにおける画像オブジェクトは、以下のような記述をオブジェクト内に保持しているため、このような記述が含まれるオブジェクトを画像オブジェクトであると判断する。
【００４１】
Type          /Xobject
Subtype      /Image
また、オブジェクトのサイズを取得し、最適化条件設定テーブル１００１に格納した上限サイズ１００５、下限サイズ１００６の中に含まれるオブジェクトを対象オブジェクトとして抽出する。
【００４２】
次に処理８０３にて、中間言語ファイルの階層構造を取得する。
【００４３】
次に処理８０４にて、処理８０２で対象オブジェクトと判断されたオブジェクトのオブジェクト情報テーブル５０１を作成する。
【００４４】
以下、処理８０５〜８１５は第一の実施例で述べた処理４０６〜４１５と同様の処理となる。
【図面の簡単な説明】
【００４５】
【図１】中間言語ファイルの階層構造を示した例を示した図である。
【図２】図1に示した中間言語ファイルを最適化した中間言語ファイルの階層構造を示した図である。
【図３】図２に示した中間言語ファイルを最適化した中間言語ファイルの階層構造を示す図である。
【図４】本発明の第一の実施例における、中間言語ファイルの最適化処理手順を示すフローチャートを示す図である。
【図５】本発明の実施形態において用いた、オブジェクト情報テーブルの一例を示す図である。
【図６】本発明の実施形態における中間言語ファイル最適化システムのソフトウェアブロック図である。
【図７】本発明の実施形態における中間言語ファイル最適化システムのハードウェア構成例を示した図である。
【図８】本発明の第二の実施例における、中間言語ファイルの最適化処理手順を示すフローチャートを示す図である。
【図９】本発明の実施形態において用いた、最適化条件を設定するユーザーインターフェースの一例を示す図である。
【図１０】本発明の実施形態において用いた、最適化条件設定テーブルの一例を示す図である。
【図１】
2006350909.tif 000003
【図２】
2006350909.tif 000004
【図３】
2006350909.tif 000005
【図４】
2006350909.tif 000006
【図５】
2006350909.tif 000007
【図６】
2006350909.tif 000008
【図７】
2006350909.tif 000009
【図８】
2006350909.tif 000010
【図９】
2006350909.tif 000011
【図１０】
2006350909.tif 000012