以下、文書変換装置の一実施形態について、図1〜図24に基づいて詳細に説明する。
図1には、文書変換装置としてのPC(Personal Computer)10のハードウェア構成が示されている。本実施形態のPC10は、文書作成などの作業に用いられる情報処理装置である。PC10は、ユーザからの印刷指示を受け付けて、印刷対象の印刷データ(例えば文書ファイルなど)をプリンタ20に対して出力する。また、PC10は、ユーザからの印刷指示が「間引き印刷」の指示であった場合には、印刷データの一部を間引き処理して(文字列を印刷消耗品(インクやトナーなど)の消費量を減少させる表示に変換して)、プリンタ20に対して出力する。
図1に示すように、PC10は、CPU(Central Processing Unit)90、ROM(Read Only Memory)92、RAM(Random Access Memory)94、記憶部(ここではHDD(Hard Disk Drive))96、インタフェース部97及び可搬型記憶媒体用ドライブ99等を備えており、PC10の構成各部は、バス98に接続されている。インタフェース部97には、表示部93及び入力部95が接続されている。表示部93は、液晶ディスプレイ等を含み、入力部95は、キーボードやマウスを含む。PC10では、ROM92あるいはHDD96に格納されているプログラム(文書変換プログラム)、或いは可搬型記憶媒体用ドライブ99が可搬型記憶媒体91から読み取ったプログラム(文書変換プログラム)をCPU90が実行することにより、図2の各部の機能が実現される。
なお、PC20のインタフェース部97には、表示部93及び入力部95のほか、プリンタ20が接続されている。なお、PC20とプリンタ20との間は、プリンタケーブルや、USB(Universal Serial Bus)ケーブル、LAN(Local Area Network)ケーブル等を介して接続されているものとする。ただし、これに限らず、PC20とプリンタ20とが無線LANにて接続されていてもよい。プリンタ20としては、インクジェットプリンタやレーザプリンタなどのプリンタを採用することができるが、本実施形態では、便宜上、プリンタ20がインクジェットプリンタであるものとし、印刷消耗品がインクであるものとして説明する。
図2には、PC10の機能ブロック図が示されている。PC10はCPU90がプログラムを実行することで、印刷データ読込部30、印刷データ解析部32、抽出部及び変換部としての印刷データ加工部34、加工済印刷データ出力部36としての機能を実現する。なお、図2では、HDD96等に格納されている現頁印刷データ記憶部40、印刷データ解析情報記憶部42、加工済印刷データ記憶部44も図示されている。
印刷データ読込部30は、ユーザからの印刷指示(間引き印刷指示)があった場合に、印刷データを頁単位で読み込み、現頁印刷データ記憶部40に格納する。なお、本実施形態では、印刷データは、PC10において作成されている(表示部93上に表示されている)文書ファイルのうち、ユーザが入力部95を介して指定した範囲のデータであるものとする。現頁印刷データ記憶部40は、印刷データ読込部30が読み込んだ1頁分の印刷データを記憶する。
印刷データ解析部32は、現頁印刷データ記憶部40に記憶されている印刷データを解析して、解析データ(印刷データ解析情報)を印刷データ解析情報記憶部42に格納する。より具体的には、印刷データ解析部32は、印刷する頁の印刷データを複数列に分割し、各列の情報(各列の開始桁と文字数)を纏めた印刷データ解析情報(図5参照)を印刷データ解析情報記憶部42に格納する。印刷データ解析情報記憶部42は、印刷データ解析部32で解析されたデータ(印刷データ解析情報)を記憶する。
印刷データ加工部34は、印刷データ解析情報記憶部42に記憶されている印刷データ解析情報に基づいて、現頁印刷データ記憶部40に記憶されている印刷データを加工する。また、印刷データ加工部34は、加工後の印刷データを加工済印刷データ記憶部44に格納する。本実施形態では、印刷データ加工部34は、印刷データのうち省略可能な部分を記号「〃」(文字を省略することを示す記号)に変換する加工(間引き処理)を実行する。加工済印刷データ記憶部44は、印刷データ加工部34において加工された(間引き処理された)印刷データを記憶する。
加工済印刷データ出力部36は、加工済印刷データ記憶部44に記憶されている加工後の印刷データをプリンタ20に対して出力する。プリンタ20においては、加工後の印刷データを印刷(プリントアウト)する。
なお、ユーザからの印刷指示が通常の印刷指示(間引き印刷でない印刷指示)であった場合には、印刷データ読込部30は、プリンタ20に対して、印刷データを直接出力する。
次に、本実施形態におけるPC10の具体的な処理について、図3〜図24に基づいて詳細に説明する。なお、以下の説明においては、ユーザが、図4に示す印刷データを間引き印刷する場合について説明する。図4のデータは、文書作成ソフトを用いて作成された表形式のデータであり、第1軸方向としての行方向(左右方向)に配列された文字列が、第2軸方向としての列方向(上下方向)に沿って複数配列された文書データである。なお、図4の記号「|」は、列境界を表す空白又はタブデータであるため、実際には視認できない。また、図4の矩形枠の外側の数字は、行番号及び列番号を示している。
図3には、PC10の印刷に関する処理(文書変換処理を含む)がフローチャートにて示されている。図3の処理では、まず、ステップS10において、印刷データ読込部30が、印刷指示(間引き印刷指示)を受け付けるまで待機する。
ユーザによって図4の印刷データの間引き印刷指示が出されると、ステップS12に移行し、印刷データ読込部30は、全頁完了したか否かを判断する。ここでの判断が否定されると、ステップS14に移行し、印刷データ読込部30が、頁単位で印刷データを読み込み、現頁印刷データ記憶部40に格納する。本実施形態では、印刷データ読込部30が、図4の印刷データを読み込み、当該印刷データが現頁印刷データ記憶部40に格納される。
次いで、ステップS16では、印刷データ解析部32が、現頁印刷データ記憶部40に格納されている印刷データを読み込んで解析し、解析結果を印刷データ解析情報記憶部42に格納する。ここでは、印刷データ解析部32は、図4の印刷データを解析して、記号「|」で仕切られている複数の列の情報(図5の印刷データ解析情報)を生成し、印刷データ解析情報記憶部42に格納する。なお、ステップS16の処理の詳細については、後述する。
次いで、ステップS18では、印刷データ加工部34が、全列の間引き加工処理が完了したか否かを判断する。ここでの判断が否定された場合には、ステップS20に移行する。
次いで、ステップS20では、印刷データ加工部34が、印刷データ解析情報記憶部42から加工対象の列情報を読み込む。例えば、加工対象の列が左端の列であれば、印刷データ加工部34は、当該列の情報として、図5の第一列情報(開始桁1、文字数3)を読み込む。また、加工対象の列が第二列であれば、印刷データ加工部34は、図5の第二列情報(開始桁5、文字数6)を読み込む。
次いで、ステップS22では、印刷データ加工部34が、加工対象列情報から引数を作成する。この場合、加工対象の列が、第一列である場合には、図6(a)に示すように、引数として開始行:1、行数:20、開始桁:1、文字数:3が作成される。なお、加工対象の列が第二列である場合には、図6(b)に示すように、引数として開始行:1、行数:20、開始桁:5、文字数:6が作成される。その他、加工対象の列が第三列〜第五列である場合にも、同様にして引数が作成される。
次いで、ステップS24では、印刷データ加工部34が、加工対象列のデータを間引き加工し、加工後の印刷データを加工済印刷データ記憶部44に格納する。なお、ステップS24の処理の詳細については、後述する。
次いで、ステップS26では、印刷データ加工部34が、加工対象列を次列に更新し、ステップS18に戻る。その後は、ステップS18〜S26の処理を繰り返し、ステップS18の判断が肯定された段階(全列(第五列まで)の間引き処理が完了した段階)で、ステップS28に移行する。
ステップS28に移行すると、加工済印刷データ出力部36は、1頁分の印刷データ(間引き処理後の印刷データ(図21参照))を加工済印刷データ記憶部44から読み込み、プリンタ20へ出力する。これにより、プリンタ20では、間引き加工された印刷データ(図21)がプリントアウトされることになる。
次いで、ステップS30では、印刷データ読込部30が頁を更新し、ステップS12に戻る。その後は、ステップS12〜S30の処理を繰り返し、ステップS12の判断が肯定された段階(すなわち、全頁の間引き加工及び印刷処理が終了した段階)で、図3の全処理を終了する。
(ステップS16の具体的処理について)
次に、図7に基づいて、ステップS16の具体的処理について詳細に説明する。図7には、ステップS16(印刷データ(図4)を解析し、印刷データ解析情報(図5)を作成する処理)の具体的処理がフローチャートにて示されている。
図7の処理では、まず、ステップS40において、印刷データ解析部32が、印刷データ解析情報記憶部42の格納域を作成する。次いで、ステップS42では、印刷データ解析部32が、現頁印刷データ記憶部40から印刷データを1頁分(図4の印刷データとする)だけ読み込み、印刷データ解析情報記憶部42の格納域に格納する。
次いで、ステップS44では、印刷データ解析部32が、各桁(連続する行に対して垂直な方向)における文字占有率を解析する。具体的には、印刷データ解析部32は、図4の印刷データの33桁それぞれが有する文字数の、行数(20行)に対する割合を算出し、図8に示すようなグラフにプロットする。
次いで、ステップS46では、印刷データ解析部32が、文字占有率が急上昇した部分を、列の区切りと判定し、各列の開始桁と文字数から印刷データ解析情報(図5)を生成して、印刷データ解析情報記憶部42に記憶する。例えば、印刷データ解析部32は、図8のグラフから、文字数占有率が75%以上急激に上昇した部分(図8において太線で示す部分)を抽出し、急激に上昇した桁(太線の終点が位置する桁)を列の開始桁とする。なお、印刷データの1桁目は、第一列の開始桁とする。また、印刷データ解析部32は、図8のグラフの太線の始点と右隣りの太線の始点との間のプロット数(記号「×」の数)を各列に含まれる文字数とする。
以上の処理を行うことで、印刷データ1頁分の印刷データ解析情報が生成され、印刷データ解析情報記憶部42に格納されることになる。
なお、上記においては、各桁における文字占有率に基づいて列を区切る場合について説明したが、これに限らず、各桁における文字数の増減量に基づいて列を区切ることとしてもよい。
(ステップS24の具体的処理について)
次に、図3のステップS24(間引き加工処理)について、図9〜図11のフローチャートに沿って、その他図面を適宜参照しつつ、詳細に説明する。
図9、図10には、ステップS24の具体的処理がフローチャートにて示されており、図11には、図10のステップS80の具体的処理が示されている。なお、ステップS24が開始される前提として、印刷データ解析部32は、既に、加工対象の列情報に基づいて加工対象の列の引数を作成しているものとする(ステップS22)。
図9、図10の処理では、まず、図9のステップS50において、印刷データ加工部34が、ステップS22で作成された引数を取得する。加工対象の列情報が第一列であれば、印刷データ加工部34は、引数として、開始行1、行数:20、開始桁:1、文字数:3を取得する。また、加工対象の列が第二列であれば、印刷データ加工部34は、引数として開始行:1、行数:20、開始桁:5、文字数:6を取得する(その他の列の開始桁と文字数については、図5参照)。
次いで、ステップS52では、印刷データ加工部34が、文字列を格納する解析用行配列を作成する。次いで、ステップS54では、印刷データ加工部34が、解析用行配列に各行の文字列を格納する。例えば、加工対象の列が第一列である場合には、解析用行配列は、図12(a)のようになる。また、加工対象の列が第二列〜第五列のいずれかである場合には、解析用行配列は、図12(b)〜図12(e)のようになる。
次いで、ステップS56では、印刷データ加工部34が、解析行番号と加工行番号を「0」、終了行番号を「行配列数」(ここでは20)に設定する。次いで、ステップS58では、印刷データ加工部34が、加工行番号が終了行番号よりも小さいか否かを判断する。ここでの判断が肯定されると、ステップS60に移行し、印刷データ加工部34は、蓄積用行配列を作成する。
次いで、ステップS62では、印刷データ加工部34が、蓄積行数番号を「0」、フラグを「0」に設定する。
次いで、ステップS64では、印刷データ加工部34が、解析行番号が終了行番号よりも小さいか否かを判断する。ここでの判断が肯定された場合には、ステップS66に移行する。
次いで、ステップS66では、印刷データ加工部34が、解析用行配列[解析行番号]のデータを取得し、蓄積用配列[蓄積行数番号]に格納する。例えば、解析対象の列が第二列であったとする。この場合、図13(a)に示すように、蓄積用行配列[0]に図12(b)の解析用行配列[0](「コード」)が格納される。
次いで、ステップS68では、印刷データ加工部34が、蓄積行数番号と、解析行番号に1を加算する(蓄積行数番号=1、解析行番号=1)。次いで、ステップS70では、印刷データ加工部34が、蓄積行数番号が2以上であるか否かを判断する。ここでの判断が否定されると、ステップS64に戻る。
ステップS64に戻り、ステップS64の判断が肯定され、ステップS66に移行すると、印刷データ加工部34が、解析用行配列[解析行番号]のデータを取得し、蓄積用配列[蓄積行数番号]に格納する。上記例では、図13(b)に示すように、蓄積用行配列[1]に図12(b)の解析用行配列[1]が格納される。次いで、ステップS68では、印刷データ加工部34が、蓄積行数番号と解析行番号に1を加算(蓄積行数番号=解析行番号=2)する。そして、次のステップS70では、印刷データ加工部34が、蓄積行数番号が2以上であるか否かを判断する。ここでの判断が肯定されるとステップS72に移行する。なお、ステップS72に移行する場合とは、蓄積用行配列に2つ以上の行配列が蓄積されている場合である。
ステップS72に移行すると、印刷データ加工部34は、蓄積用配列[蓄積行数番号−2]と蓄積用配列[蓄積行数番号−1]の先頭2桁を比較する。次いで、ステップS74では、印刷データ加工部34が、先頭2桁が一致しているか否かを判断する。ここでの判断が否定された場合(図13(b)の場合、否定される)、ステップS77に移行する。ステップS77では、印刷データ加工部34が、解析行番号から1を減算し(解析行番号=1)、ステップS78では、印刷データ加工部34は、フラグが1であるか否かを判断する。なお、この段階ではフラグが0であるので、判断は否定され、ステップS79において、加工行番号を解析行番号に設定(加工行番号=1)した後、ステップS58に戻る。
ステップS58に戻ると、上記処理を繰り返す。この場合、最初のステップS66(蓄積行数番号=0、解析行番号=1)において、蓄積用配列が図13(c)に示すようになる。そして、次のステップS66(蓄積行数番号=1、解析行番号=2)において、蓄積用配列が図13(d)のようになる。この場合、蓄積用配列[0]と蓄積用配列[1]の先頭2桁は一致していないので、ステップS74の判断は否定されることになる。この場合、加工行番号=解析行番号=2(ステップS77、S79)の状態で、ステップS58に戻る。
ステップS58に戻ると、再度上記処理を繰り返す。すなわち、ステップS62では、印刷データ加工部34は、蓄積行数番号を0、フラグを0に設定する。また、ステップS66では、図13(e)に示すように、蓄積用行配列[0]に図12の解析用行配列[2]を格納する。次いで、ステップS68では、印刷データ加工部34が、蓄積行数番号と解析行番号に1を加算する(蓄積行数番号=1、解析行番号=3)。そして、次のステップS70では、印刷データ加工部34が、蓄積行数番号が2以上であるか否かを判断する。ここでの判断が否定されると、ステップS64に戻る。その後は、印刷データ加工部34は、解析用行配列[3]のデータを取得し、図13(f)に示すように、蓄積用配列[1]に格納し(ステップS66)、蓄積行数番号と解析行番号に1を加算する(蓄積行数番号=2、解析行番号=4)。この場合、蓄積行数番号が2以上であるため、ステップS70の判断が肯定され、ステップS72に移行する。ステップS72では、印刷データ加工部34は、蓄積用配列[蓄積行数番号−2]と蓄積用配列[蓄積行数番号−1]の先頭2桁(蓄積用配列[0]と蓄積用配列[1])を比較する。次いで、ステップS74では、印刷データ加工部34が、先頭2桁が一致しているか否かを判断する。ここでの判断が肯定された場合(図13(f)の場合は肯定される)、ステップS76に移行する。ステップS76では、印刷データ加工部34が、フラグを1に設定する。
ステップS64に戻り、ステップS64の判断が肯定されると、ステップS66では、図13(g)に示すように、蓄積用行配列[2]に図12(b)の解析用行配列[4]を格納する。次いで、ステップS68では、印刷データ加工部34が、蓄積行数番号と解析行番号に1を加算する(蓄積行数番号=3、解析行番号=5)。そして、次のステップS70では、印刷データ加工部34が、蓄積行数番号が2以上であるか否かを判断する。ここでの判断が肯定され、ステップS72に移行すると、印刷データ加工部34は、蓄積用配列[蓄積行数番号−2]と蓄積用配列[蓄積行数番号−1]の先頭2桁(蓄積用配列[1]と蓄積用配列[2])を比較する。次いで、ステップS74では、印刷データ加工部34が、先頭2桁が一致しているか否かを判断する。ここでの判断が否定された場合(図13(g)の場合は否定される)、ステップS77に移行し、解析行番号から1を減算する(解析行番号=4)。そして、次のステップS78では、印刷データ加工部34が、フラグが1か否かを判断する。ここでの判断が肯定されると、ステップS80に移行し、印刷データ加工部34は、蓄積用行配列を先頭2桁が一致する行配列のみとする。例えば、図13(g)の蓄積用行配列の場合には、行配列[2]を削除し、図13(f)の状態にする。その後は、図10のステップS81(蓄積用行配列加工処理)に移行する。
以上のようにステップS58〜S80の処理を実行することで、印刷データの同一列で前方から2桁が共通する、上下方向に隣接する複数の行を抽出して蓄積用行配列に蓄積することができる。そして、これら蓄積用行配列を図10のステップS81の処理に移行させることができる。
なお、加工対象の列が第二列の場合には、図13(f)の蓄積用配列のほか、図14(a)〜図14(d)に示すような蓄積用行配列が、図10のステップS81に移行する。また、加工対象の列が第三列の場合には、図14(e)〜図14(i)のような蓄積用行配列が、ステップS81に移行する。また、加工対象の列が第四列の場合には、図15(a)〜図15(d)のような蓄積用行配列がステップS81に移行し、加工対象の列が第五列の場合には、図15(e)〜図15(h)のような蓄積用行配列がステップS81に移行する。
図10のステップS81にすると、印刷データ加工部34は、蓄積用行配列加工処理を実行する。具体的には、印刷データ加工部34は、図11のフローチャートに沿った処理を実行する。
図11の処理では、まず、ステップS100において、印刷データ加工部34が、蓄積用行配列に格納された全文字列の中から最小文字数を算出する。蓄積用行配列が図13(f)や図14(a)〜図14(d)であれば、最小文字数は6である。また、例えば、蓄積用行配列が図15(e)であれば、最小文字数は3である。
次いで、ステップS102では、印刷データ加工部34が、蓄積用行配列の前方比較(検索文字長:最小文字数)を行い、最大一致文字数を算出する。例えば図13(f)であれば、蓄積用行配列に含まれる3つの文字列の先頭から4文字「0011」が一致しているので最大一致文字数は4となる。また、図14(e)であれば、蓄積用行配列に含まれる3つの文字列の先頭から3文字「横浜市」が一致しているので最大一致文字数は3となる。また、図15(e)であれば、蓄積用行配列に含まれる8つの文字列の先頭から3文字「富士通」が一致しているので最大一致文字数は3となる。
次いで、ステップS104では、印刷データ加工部34が、蓄積用行配列のデータが全て空白であるか否かを判断する。ここでの判断が肯定される場合とは、図16(a)に示すような蓄積用行配列の場合(例えば第一列の19,20行目が蓄積用行配列に蓄積された場合)である。このステップS104の判断が肯定された場合には、印刷データ加工部34は、ステップS106において間引き補正をしないこととし、図11の全処理を終了して、図10のステップS82に移行する。一方、ステップS104の判断が否定された場合(蓄積用行配列に文字が存在している場合)には、ステップS108に移行する。
ステップS108に移行すると、印刷データ加工部34は、2行目を間引き対象とする。なお、本実施形態では、蓄積用行配列の先頭の行(先頭2桁が一致する複数行の先頭に位置する行)の間引き処理は行わないこととしている。このように、先頭の行を間引き処理しないことで、印刷後に読みにくくなるのを抑制することができる。
次いで、ステップS110では、印刷データ加工部34が、間引き対象の行の前(上)の行のデータ長(文字数)と最大一致文字数とが同一であるか否かを判断する。ここでの判断が肯定された場合、ステップS112に移行し、印刷データ加工部34が、間引き対象の行が前(上)の行より長いか否かを判断する。ここでの判断が否定された場合、すなわち、間引き対象の前(上)の行が最大一致文字数と一致し、間引き対象の行が前(上)の行より長くない(間引き対象の行が最大一致文字数と一致する)場合には、ステップS114において、印刷データ加工部34が、間引き処理を実行する。具体的には、図15(h)の蓄積用行配列のように、行配列[0]も行配列[1]も「富士通」であるような場合には、図16(b)に示すように、印刷データ加工部34は、間引き対象の行(行配列[1])を間引き処理する。この場合、印刷データ加工部34は、前(上)の行と一致する部分を「〃」に変換する。なお、ステップS114の後は、印刷データ加工部34は、ステップS138に移行する。一方、ステップS112の判断が肯定された場合、すなわち、間引き対象の前(上)の行が最大一致文字数と一致し、間引き対象の行が前(上)の行より長い場合には、ステップS128に移行する。この場合、印刷データ加工部34は、ステップS128において間引き処理を実行せずに、ステップS138に移行する。なお、ステップS112の判断が肯定される場合とは、図15(e)の行配列[1]が間引き対象の行となっている場合などを意味する。すなわち、図15(e)の場合には、印刷データ加工部34は、図16(c)に示すように、「富士通」部分を間引きしないようになっている。
ステップS110の判断が否定された場合、すなわち、前(上)の行の文字数が最大一致文字数よりも大きい場合には、ステップS116に移行する。ステップS116に移行すると、印刷データ加工部34は、間引き対象の行の文字数と最大一致文字数とが同一であるか否かを判断する。ここでの判断が肯定された場合、すなわち、間引き対象の行の文字数が最大一致文字数と一致し、前(上)の行の文字数が最大一致文字数よりも多い場合(図15(e)の行配列[3]が間引き対象の行になっているような場合)には、ステップS128に移行する。この場合、印刷データ加工部34は、図16(d)に示すように、間引き処理を行わずに、ステップS138に移行する。
一方、ステップS116の判断が否定された場合、すなわち、間引き対象の行も前(上)の行も最大一致文字数よりも文字数が多い場合には、ステップS122に移行する。なお、ステップS110〜S116では、上下隣接する行配列それぞれの長さに応じて、一致している文字の中から間引きする文字を決定しているといえる。
ステップS122に移行すると、印刷データ加工部34が、一致文字の次が空白であるか否かを判断する。ここでの判断が肯定された場合には、ステップS124に移行し、その空白文字の上(前(上)の行の同一位置の文字)が空白文字であるか否かを判断する。ここでの判断が肯定された場合、すなわち、図14(i)の行配列[1]が間引き対象の行であるような場合には、ステップS126に移行する。この場合、印刷データ加工部34は、図16(e)に示すように、間引き処理を実行し、ステップS138に移行する。これに対し、ステップS124の判断が否定された場合、すなわち、図15(c)の行配列[2]が間引き対象の行であるような場合には、ステップS128に移行する。この場合、印刷データ加工部34は、図16(f)に示すように間引き処理を行わずに、ステップS138に移行する。
一方、ステップS122の判断が否定された場合には、ステップS130に移行し、印刷データ加工部34が、一致文字に空白文字が含まれているか否かを判断する。ここでの判断が肯定された場合には、ステップS132に移行する。そして、ステップS132では、印刷データ加工部34が、一致文字のうち空白文字の後ろの文字長が1字か否かを判断する。ここでの判断が肯定された場合、すなわち、図15(b)の行配列[1]が間引き対象の行であるような場合には、ステップS136に移行する。この場合、印刷データ加工部34は、図16(g)に示すように、空白文字よりも前の部分を間引き処理する。これに対し、ステップS132の判断が否定された場合、すなわち、図15(d)の行配列[1]が間引き対象の行であるような場合には、ステップS134に移行する。この場合、印刷データ加工部34は、図16(h)に示すように、一致文字の全てを間引き処理する。なお、この場合には、空白文字の前と後のそれぞれを「〃」に変換するものとする。その後は、ステップS138に移行する。
ステップS130の判断が否定された場合、すなわち、間引き対象の行の文字数と前(上)の行の文字数が最大一致文字数より多く、一致文字の次の文字が空白でなく、一致文字が空白を含んでいない場合には、ステップS137に移行する。ステップS137に移行する場合とは、図15(a)の行配列[1]が間引き対象の行であるような場合である。このような場合には、図16(i)に示すように、間引き対象の行の一致文字を間引き処理する。その後は、ステップS138に移行する。
ステップS138に移行すると、印刷データ加工部34は、蓄積用行配列の全行の処理が終了したか否かを判断する。ここでの判断が否定された場合には、ステップS140に移行し、印刷データ加工部34は、次の行を間引き対象とする。その後は、ステップS110に戻る。
ステップS110に戻った後は、ステップS138の判断が肯定されるまで、すなわち、蓄積用行配列の全行の処理が終了するまで、ステップS110〜S140の処理・判断を繰り返す。そして、ステップS138の判断が肯定された段階で、図10のステップS82に移行する。
なお、例えば、図13(f)の蓄積用行配列に対して図11の処理を実行すると、図17(a)のように間引き処理される。同様に、図14(a)〜図14(i)の蓄積用行配列に対して図11の処理を実行すると、図17(b)〜図17(j)のように間引き処理される。同様に、図15(a)〜図15(h)の蓄積用行配列に対して図11の処理を実行すると、図18(a)〜図17(h)のように間引き処理される。
図10に戻り、ステップS82に移行すると、印刷データ加工部34は、現在の蓄積用行配列の蓄積行数番号が2以上であるか否かを判断する。本実施形態では、蓄積用行配列が図17(b)、(d)、(f)、(g)、(i)、図18(a)、(c)、(e)、(g)である場合にステップS82が肯定される。
以下、蓄積用行配列が図17(b)である場合を例に採り説明する。
ステップS84に移行すると、印刷データ加工部34は、新たに引数を作成する。図17(b)の蓄積用行配列の場合、図19(a)に示すように、前回の蓄積用行配列加工処理で一致文字とされた部分(「〃」以降の文字列)に着目して引数を作成する。図19(a)では、引数として、開始行:5、行数:6、開始桁:7、文字数:4が作成される。
次いで、ステップS86では、印刷データ加工部34が、蓄積用行配列の連続する行配列のうち先頭2桁が一致する行を抽出し、新たな蓄積用行配列に格納する。この場合、新たな蓄積用行配列は複数作成されることもあるものとする。図17(a)の蓄積用行配列の場合、新たな蓄積用行配列として、図19(b)〜図19(d)に示す3つの蓄積用行配列が作成される。
次いで、ステップS88では、新たな蓄積用行配列それぞれに対して、蓄積用行配列加工処理(ステップS81と同様)を実行する。これにより、図19(e)〜図19(g)に示すような間引き処理が実行されることになる。なお、ステップS84〜S88の処理は、蓄積用行配列のうち前方から連続して共通する文字列を除外した部分に対して、前述した図9の処理(ステップS50〜S80の処理)と図10のステップS81の処理とを実行しているとも言える。
次いで、ステップS90に移行すると、新たな蓄積用行配列の蓄積行数番号が2以上であるか否かを判断する。図19(b)〜図19(d)の場合、新たな蓄積用行配列の蓄積行数番号が2未満であるので判断は否定され、ステップS94に移行する。なお、ステップS90の判断が肯定された場合には、ステップS84に戻り、ステップS84〜S90の処理・判断を繰り返す。
ここで、図17(b)、(d)、(f)、(g)、(i)、図18(a)、(c)、(e)、(g)の蓄積用行配列に対してステップS84〜S90の処理を実行した結果が、図20(a)〜図20(i)に示されている。なお、図17(d)のように、新たな引数で指定される部分の先頭2桁が隣接する行配列において一致しない場合には、図20(b)のように間引き処理は実行されないものとする。
ステップS90の判断が否定され、ステップS94に移行すると、印刷データ加工部34は、加工されたデータを加工済印刷データ記憶部44に送信する。そして、ステップS96では、印刷データ加工部34が、加工行番号と解析行番号とを一致させ、図9のステップS58に戻る。
その後は、ステップS58以降の処理が繰り返され、ステップS58の判断が否定された段階(加工行番号=終了行番号となった段階)で、図3のステップS26に移行する。図3のステップS26以降の処理は、前述した通りであり、印刷頁の各列に対する間引き処理が完了した段階(ステップS18:肯定)で、加工済印刷データ出力部36は、1頁分の印刷データをプリンタ20に送信する(ステップS28)ようになっている。
なお、図4の印刷データに対し、図3、図9〜図11の処理を実行した結果が、図21に示されている。また、図22には、比較例として、上下隣接する2行において共通する文字が存在する場合に、下の行の共通する文字を省略する方法を採用した場合の処理結果が示されている。また、図23には、本実施形態の処理結果(図21)における着目点A〜Fが示され、図24には、比較例(図22)の処理結果における着目点A’〜F’が示されている。
以下、図23、図24の各着目点に基づいて、本実施形態の処理結果を比較例の処理結果と比較しつつ説明する。
(着目点A,A’について)
比較例の着目点A’では、文字が斑状に間引きされるため文字列を正確に判別しにくく、誤読するおそれがある(特に、上から3つ目や7つ目)。これに対し、本実施形態の着目点Aでは、前方一致する部分のみが間引き処理されるため、読みやすく、誤読の可能性が低減されている。
(着目点B,B’について)
比較例の着目点B’では、斑状に間引きされているため、「川崎市中原区」と認識するために着目点B’の3つ上の「横浜市鶴見区」を確認する必要があり、読みにくい。これに対し、本実施形態の着目点Bでは、「川崎市中原区」が斑状に間引き処理されないので、読みにくさが低減されている。
(着目点C,C’について)
比較例の着目点C’では、「横浜市港北区」が「〃北〃」と間引き処理されているため、読みにくい。これに対し、本実施形態の着目点Cでは、「〃港北区」と間引き処理されているので、読みやすくなっている。
(着目点D,D’について)
比較例の着目点D’では、間引き文字の後ろの空白文字のため、「富士通九川崎」と誤読するおそれがある。これに対し、本実施形態の着目点Dでは、「富士通 川崎」が間引き処理されないので、誤読のおそれがない。
(着目点E,E’について)
比較例の着目点E’では、「三浦郡」の「三浦」の部分に「〃」がないため、読みにくいが、本実施形態の着目点Eでは、「三浦」の部分に「〃」があるため読みやすくなっている。
(着目点F,F’について)
比較例の着目点F’では、「富士通」なのか「富士通北陸」なのかが判別できず、誤読する可能性がある。これに対し、本実施形態の着目点Fでは、「富士通」を間引き処理しないので誤読のおそれがない。
以上、詳細に説明したように、本実施形態によると、印刷データ加工部34が、前方から所定数の文字(2文字)が共通する隣接する複数の行(文字列)を抽出し(S50〜S80)、抽出した複数の行において前方から連続して共通する文字の少なくとも一部を印刷消耗品(インク)の使用量を減少させる表示(例えば、記号「〃」)に変換する(間引き処理する(S81))こととしている。これにより、間引き後の文字列が斑状にならないため、読みやすくなり、誤読の発生を抑制することができる。
また、本実施形態では、上述した間引き処理を実行することにより文字部分が減る(白の連続データが増加する)ため、高圧縮化によりプリンタ20への送信データ量を削減することができる。これにより、PC10とプリンタ20との間の通信負荷を低減することができる。また、本実施形態では、上述した間引き処理を実行することにより、プリンタ20による描画文字数(印字数)を減少させることができるので、プリンタ20の処理負荷を低減することができる。
また、本実施形態では、蓄積用配列加工処理(S81)を実行した後において、抽出した複数の行のうち前方から連続して共通する文字を除外した部分に対して、抽出する処理(S86)と変換する処理(S88)とを実行している。これにより、読みやすさ及び誤読抑制効果を維持しつつ、多くの文字を間引きすることができ、インク等の印刷消耗品の使用量を効果的に削減することができる。
また、本実施形態では、印刷データ解析部32が、印刷データにおいて桁ごとの文字占有率の行方向(左右方向)に関する変化量が所定値(例えば75%)を超えた位置で列を区切り、印刷データ加工部34は、区切られた列ごとに抽出する処理(S50〜S80)と変換する処理(S81)を実行する。これにより、表形式になっている印刷データを適切かつ効率的に間引き処理することができる。
また、本実施形態では、蓄積用行配列において隣接する行配列それぞれの長さに応じて、共通する文字の中から変換する文字を決定する(ステップS110、S112、S116)。これにより、読みやすさや誤読可能性を考慮した適切な間引き処理を行うことができる。
また、本実施形態では、蓄積用行配列において隣接する行配列の共通する文字の次が空白であるか否かや、共通する文字に空白が含まれているか否か、に基づいて、共通する文字の中から変換する文字を決定する(S122,S124、S132)。これにより、読みやすさや誤読可能性を考慮した適切な間引き処理を行うことができる。
また、本実施形態では、蓄積用行配列に含まれる行配列のうち先頭(最上部)に位置する行配列以外の行配列を間引き処理する(S108、S140)ので、この点からも、読みやすさや誤読可能性を考慮した適切な間引き処理を行うことができる。
また、本実施形態では、前方から2文字が共通する行配列を抽出し、蓄積用行配列に格納することとしている。これにより、前方から1文字のみが一致する部分を間引きすることがないため、都道府県名や市町村名、氏、名、会社名など、多くの場合において2文字以上で意味をなす部分を適切に間引き処理することができる。
なお、上記実施形態では、間引き処理として記号「〃」による変換を行う場合について説明したが、これに限られるものではなく、その他の印刷消耗品の使用量を減少させる表示への変換を行うこととしてもよい。例えば、図25(a)に示すように、文字サイズを縮小化した文字列への変換を行うこととしてもよいし、図25(b)に示すように、「同上」などの文字列に変換することとしてもよい。また、間引き処理として、文字の濃淡を変更する(共通する文字列を淡色に変更する)こととしてもよい。
なお、上記実施形態では、前方から所定文字数(例えば2文字)一致する行を抽出し、抽出した行において前方一致する部分を間引きする場合について説明したが、これに限られるものではない。例えば、後方から所定文字数一致する行を抽出し、抽出した行において後方一致する部分を間引きするようにしてもよい。
なお、上記実施形態では、ステップS110〜S140において種々判断を実行しているが、一部の判断を省略してもよい。
なお、上記実施形態では、印刷データが横書きである場合について説明したが、これに限らず、印刷データは縦書きであってもよい。
なお、上記実施形態では、プリンタの印刷消耗品がインクである場合について説明したが、これに限らず、印刷消耗品は、トナーやインクリボンであってもよい。
なお、上記実施形態では、PC10が印刷データの間引き処理を行う場合について説明したが、これに限られるものではない。例えば、PC10に接続されたサーバが、PC10から取得した印刷データの間引き処理を行い、当該間引き処理後の印刷データをPC10又はプリンタ20に送信するようなサービスを提供することとしてもよい。このようにすることで、PC10における処理負荷を軽減することができる。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、処理装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体(ただし、搬送波は除く)に記録しておくことができる。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD(Digital Versatile Disc)、CD−ROM(Compact Disc Read Only Memory)などの可搬型記録媒体の形態で販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
上述した実施形態は本発明の好適な実施の例である。但し、これに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変形実施可能である。
なお、以上の実施形態の説明に関して、更に以下の付記を開示する。
(付記1) 第1軸方向に配列された文字列が前記第1軸方向に直交する第2軸方向に沿って複数配列された文書を変換する処理をコンピュータに実行させる文書変換プログラムであって、
前記第1軸方向の一側から所定数の文字が共通し、前記第2軸方向に隣接する複数の文字列を抽出し、
前記抽出した複数の文字列において前記第1軸方向の一側から連続して共通する文字の少なくとも一部を印刷消耗品の使用量を減少させる表示に変換する、処理を前記コンピュータに実行させることを特徴とする文書変換プログラム。
(付記2) 前記変換する処理が実行された後、前記抽出した複数の文字列から前記第1軸方向の一側から連続して共通する文字を除外した部分に対して、前記抽出する処理と、前記変換する処理と、を前記コンピュータに実行させることを特徴とする付記1に記載の文書変換プログラム。
(付記3) 前記文書において前記第2軸方向に並ぶ文字の数量の前記第1軸方向の位置に応じた変化量が予め定めた変化量を超えた位置を特定し、当該特定された第1軸方向の位置において前記文書を区切る処理を前記コンピュータに更に実行させ、
前記区切られた文書ごとに、前記抽出する処理と前記変換する処理が実行されることを特徴とする付記1又は2に記載の文書変換プログラム。
(付記4) 前記変換する処理では、前記第2軸方向に隣接する文字列それぞれの長さに応じて、共通する文字の中から変換する文字を決定することを特徴とする付記1〜3のいずれかに記載の文書変換プログラム。
(付記5) 前記変換する処理では、前記共通する文字の次が空白であるか否か、及び/又は前記共通する文字に空白が含まれているか否か、に基づいて、共通する文字の中から変換する文字を決定することを特徴とする付記1〜4のいずれかに記載の文書変換プログラム。
(付記6) 前記変換する処理では、前記抽出した複数の文字列のうち前記第2軸方向の先頭に位置する文字列以外の文字列の少なくとも一部を変換することを特徴とする付記1〜5のいずれかに記載の文書変換プログラム。
(付記7) 前記変換する処理では、前記印刷消耗品の使用量を減少させる表示として、文字サイズを縮小化した文字列、濃淡を変更した文字列、文字を省略することを示す記号又は文字列、のいずれかを用いることを特徴とする付記1〜6のいずれかに記載の文書変換プログラム。
(付記8) 前記抽出する処理では、前記第1軸方向の一側から2文字以上が共通し、前記第2軸方向に隣接する複数の文字列を抽出することを特徴とする付記1〜7のいずれかに記載の文書変換プログラム。
(付記9) 第1軸方向に配列された文字列が前記第1軸方向に直交する第2軸方向に沿って複数配列された文書を変換する文書変換装置であって、
前記第1軸方向の一側から所定数の文字が共通し、前記第2軸方向に隣接する複数の文字列を抽出する抽出部と、
前記抽出した複数の文字列において前記第1軸方向の一側から連続して共通する文字の少なくとも一部を印刷消耗品の使用量を減少させる表示に変換する変換部と、を備える文書変換装置。
(付記10) 前記変換部による処理が実行された後、前記抽出部が抽出した複数の文字列から前記第1軸方向の一側から連続して共通する文字を除外した部分に対して、前記抽出部が抽出する処理を再度実行するとともに、前記変換部が変換する処理を再度実行することを特徴とする付記9に記載の文書変換装置。
(付記11) 前記文書において前記第2軸方向に並ぶ文字の数量の前記第1軸方向の位置に応じた変化量が予め定めた変化量を超えた位置を特定し、当該特定された第1軸方向の位置において前記文書を区切る解析部を更に備え、
前記抽出部は、前記区切られた文書ごとに前記抽出する処理を実行することを特徴とする付記9又は10に記載の文書変換装置。
(付記12) 前記変換部は、前記第2軸方向に隣接する文字列それぞれの長さに応じて、共通する文字の中から変換する文字を決定することを特徴とする付記9〜11のいずれかに記載の文書変換装置。
(付記13) 前記変換部は、前記共通する文字の次が空白であるか否か、及び/又は前記共通する文字に空白が含まれているか否か、に基づいて、共通する文字の中から変換する文字を決定することを特徴とする付記9〜12のいずれかに記載の文書変換装置。
(付記14) 前記変換部は、前記抽出した複数の文字列のうち前記第2軸方向の先頭に位置する文字列以外の文字列の少なくとも一部を変換することを特徴とする付記9〜13のいずれかに記載の文書変換装置。
(付記15) 前記変換部は、前記印刷消耗品の使用量を減少させる表示として、文字サイズを縮小化した文字列、濃淡を変更した文字列、文字を省略することを示す記号又は文字列、のいずれかを用いることを特徴とする付記9〜14のいずれかに記載の文書変換装置。
(付記16) 前記抽出部は、前記第1軸方向の一側から2文字以上が共通し、前記第2軸方向に隣接する複数の文字列を抽出することを特徴とする付記9〜15のいずれかに記載の文書変換装置。
(付記17)
第1軸方向に配列された文字列が前記第1軸方向に直交する第2軸方向に沿って複数配列された文書を変換する文書変換方法であって、
前記第1軸方向の一側から所定数の文字が共通し、前記第2軸方向に隣接する複数の文字列を抽出する工程と、
前記抽出した複数の文字列において前記第1軸方向の一側から連続して共通する文字の少なくとも一部を印刷消耗品の使用量を減少させる表示に変換する工程と、をコンピュータが実行することを特徴とする文書変換方法。
(付記18) 前記変換する工程の後、前記抽出した複数の文字列から前記第1軸方向の一側から連続して共通する文字を除外した部分に対して、前記抽出する工程と、前記変換する工程と、を前記コンピュータが実行することを特徴とする付記17に記載の文書変換方法。
(付記19) 前記文書において前記第2軸方向に並ぶ文字の数量の前記第1軸方向の位置に応じた変化量が予め定めた変化量を超えた位置を特定し、当該特定された第1軸方向の位置において前記文書を区切る工程を前記コンピュータが更に実行し、
前記区切られた文書ごとに、前記抽出する工程と前記変換する工程を前記コンピュータが実行することを特徴とする付記17又は18に記載の文書変換方法。
(付記20) 前記変換する工程では、前記第2軸方向に隣接する文字列それぞれの長さに応じて、共通する文字の中から変換する文字を決定することを特徴とする付記17〜19のいずれかに記載の文書変換方法。
(付記21) 前記変換する工程では、前記共通する文字の次が空白であるか否か、及び/又は前記共通する文字に空白が含まれているか否か、に基づいて、共通する文字の中から変換する文字を決定することを特徴とする付記17〜20のいずれかに記載の文書変換方法。
(付記22) 前記変換する工程では、前記抽出した複数の文字列のうち前記第2軸方向の先頭に位置する文字列以外の文字列の少なくとも一部を変換することを特徴とする付記17〜21のいずれかに記載の文書変換方法。
(付記23) 前記変換する工程では、前記印刷消耗品の使用量を減少させる表示として、文字サイズを縮小化した文字列、濃淡を変更した文字列、文字を省略することを示す記号又は文字列、のいずれかを用いることを特徴とする付記17〜22のいずれかに記載の文書変換方法。
(付記24) 前記抽出する工程では、前記第1軸方向の一側から2文字以上が共通し、前記第2軸方向に隣接する複数の文字列を抽出することを特徴とする付記17〜23のいずれかに記載の文書変換方法。