(57)【要約】      （修正有）【課題】行の分断を行う際に、分断後に次ページに送られる各セル内の文字列について、行内で横に並ぶ各セルの文字列の位置関係が崩れないようにする。【解決手段】フォームと後づけデータをオーバレイ印刷して帳票を生成する場合、ページ内の表の領域まで行を詰めるために、行内の各文字列を単位として行を分断し、分断後の行だけを次ページに送る場合には、表を１行ずつ描画していき、行が表の領域を超えるかどうか判定し、行が表の領域を超える場合に、各セルの文字列について、分断位置を決定し、各セルの分断位置に基づいて、補正処理が必要かどうかを判定し、各セルの分断位置から表高までの値を保持し、分断した行を次ページに描画する際に、保持していた値から各セルに余白を加えることで文字を描画する位置を補正する。【選択図】図９
2011123848.tif 000002
【特許請求の範囲】
【請求項１】
フォームと後づけデータをオーバレイ印刷して帳票を生成する印刷システムにおいて、
ページ内の表の領域まで行を詰めるために、行内の各文字列を単位として行を分断し、分断後の行だけを次ページに送る場合に、表を１行ずつ描画していき、行が表の領域を超えるかどうか判定するステップと
行が表の領域を超える場合に、各セルの文字列について、分断位置を決定するステップと
各セルの分断位置に基づいて、補正処理が必要かどうかを判定するステップと、
各セルの分断位置から表高までの値を保持しておくステップと
分断した行を次ページに描画する際に、前記ステップで保持していた値から各セルに余白を加えることで文字を描画する位置を補正するステップとを備えることを特徴とする印刷システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は表形式の帳票を生成する方法に関する。
【背景技術】
【０００２】
帳票を生成、印刷する際に、テンプレートファイル（フォームファイル）と後付けデータファイルを使用してオーバレイ印刷する技術が用いられる。以下、テンプレートファイル（フォームファイル）をフォームと記載する。また、後付けデータファイルによりフォームに流しこまれるデータのことを後付けデータと記載する。
【０００３】
フォームと後付けデータファイルの関係について図３を用いて説明する。まずフォーム３０１には、後付けデータに依存しない固定の文字・図形等（３０１）と、後付けデータが流しこまれる矩形領域（３０５）が定義されている。以下、後付けデータが流し込まれる箇所をセルと呼ぶ。セルには、使用するフォント、文字のサイズなどの文字に関する一般的な設定が可能である。後付けデータファイル３０２は一般的なテキストファイルやＣＳＶファイルなどであり、印刷アプリケーションのルールに従いデータが記述されている。図３の例では［セル１］と定義されているセルに対して［１０００円］というデータを流しこむ、という記述になっている。このフォームと後付けデータファイルを元に、印刷アプリケーションはセルにデータを流したあとの描画命令をドライバー、プリンタに送ることで、最終的な印刷物である出力結果３０３が得られる。
【０００４】
これにより、あらかじめフォームを生成しておけば、あとは後付けデータファイルを変更するだけで必要な帳票を得ることができる。
【０００５】
また、帳票の種類の１つとして、表形式の帳票も一般的に使用される。図４は表形式の帳票をオーバレイ印刷する一例である。図４ではフォーム４０１内に、表形式のセル４０３が設定されている。表形式のセル４０３では、通常のセルに加えて、さらに表に関する属性が設定されている。例えば１ページ内に収まる最大行数などであり、図４の例で１ページに最大３行分の領域まで表示できる。上記フォーム４０１と後付けデータファイル４０２をオーバレイ印刷した結果が４０４、４０５である。
【０００６】
後付けデータの量が１ページ内に収まらない場合は、改ページ処理を行い複数ページで出力する。図４の例では表で５行分の後付けデータがフォームに流しこまれており、１ページ内には収まらないため改ページを行い、１ページ内に収まらないデータを次ページに送っている。
【０００７】
図４の例ではデータを次ページに送る際、表の行単位で送っている。表形式の帳票では、前記のように行単位でデータを次ページに送るだけでなく、行内の各セルの文字列単位で分断して次ページに送る技術も用いられる。以下、この技術を行分断と記述する。
【０００８】
図５は行分断をしない場合の例であり、図６は行分断を行う場合の例である。図５内の、後付けデータ５０１とフォーム５０３でオーバレイ印刷した結果が５０４である。５０４では行単位で次ページにデータを送っているため、計３ページ分の印刷結果となっている。一方、図６の例では、行内の各セルの文字列単位でデータを次ページに送っている。図６では３行目で行分断が発生している。次ページに送られた分断後のデータは、次ページの先頭から描画される。
【０００９】
行単位ではなく文字列単位でデータを送ることで、ページ内により多くの後付けデータを表示することが可能になり、図５と図６を比較すると全体のページ数が減っている。つまり、使用する用紙数が減ることになり、用紙の節約が可能になる。表形式の帳票では一般的にページ数が大量になる場合があり、少しでも用紙数を減らしたい場合に本技術は非常に有効である。
【００１０】
以上のように表形式の帳票では、後付けデータが１ページ内に収まらないことが普通であり、データを次ページに送る技術は重要であり、また既存の技術である。
【００１１】
例えば特開２００７−２８７０９９では、帳票レイアウトでの可変表における集計行の表示／印刷方法について記載している。集計行のみがページ内に収まらず次のページに送るときにデータ行も一緒に次ページに送る場合に、データ行の最終行を送る前の行に集計行の配置の設定情報を表示／印刷することが記載されている。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２００７−２８７０９９
【発明の概要】
【発明が解決しようとする課題】
【００１３】
本発明で解決しようとする課題は、上記で述べたデータを次ページに送るときのもので、特に行の分断が発生したときに発生するものである。
【００１４】
以下に、図７を用いて詳細な課題を説明する。図７の表７０１は表の一例であり、文字列を格納する複数のセルが１行内に横に並んで配置されている。そして、横に並んでいる各セルの文字列には、図７のセル７０２とセル７０３のように、互いに文字列の位置に関係があることがある。つまり、セル７０２内の「小計」や「合計」の文字列と、セル７０３内の「３００円」、「４５０円」、「７５０円」の文字列の相対位置には意味があり、帳票設計者はお互いの文字列の位置を考慮して帳票を設計している。
【００１５】
このとき、行分断が発生した際に、分断されて次ページに送られた文字列を単純にセルの先頭から描画してしまうと、各セルの文字列の位置関係が崩れてしまう。図７では、セル７０２内の「合計」の文字列とセル７０３の「４５０円」、「７５０円」が、２ページ目７０５に送られているが、分断前の状態である７０１と比べると、お互いの文字列の相対位置が崩れてしまっている。
【００１６】
上記のように互いの文字列の位置関係が崩れてしまうと、表の見栄えが損なわれてしまう。さらに、描画される文字列の内容によっては、表の意味自体が変わってしまう恐れもある（図７の例では「合計」が７５０円を示しているが、分断後のデータではそれが分かりづらくなっている）。これが本発明で解決しようとする課題である。
【課題を解決するための手段】
【００１７】
フォーム（テンプレート）と後づけデータをオーバレイ印刷して表形式の帳票を生成するオーバレイ印刷システムにおいて、ページ内の表の領域一杯まで行を詰めるために、行内の各文字列単位で行を分断し、分断後の行だけを次ページに送る場合に、
・表を１行ずつ描画していき、行が表の領域を超えるかどうか判断するステップと
・行が表の領域を超える場合に、各セルの文字列について、何行まで表の領域内に収まるかを判定するステップと
・各セルの分断位置から表高までの値を保持しておくステップと
・分断した行を次ページに描画する際に、前期ステップで保持していた値を元に、各セルの文字描画位置を調整するステップと
を備えることを特徴とするオーバレイ印刷システム。
【発明の効果】
【００１８】
行内で横に並ぶ各セルの文字列の位置関係を崩すことなく、行の分断を行うことができる。図８のようになる。
【図面の簡単な説明】
【００１９】
【図１】Ａは帳票等のデータを印刷するシステム１００、Ｂは汎用コンピュータモジュール図
【図２】ライブラリ１０５の分離バージョン２２５を含む図１Ａ・図１Ｂの類似図
【図３】フォームと後付けデータファイルの関係を説明する図
【図４】表形式のフォームと後付けデータファイルの関係を説明する図
【図５】行単位で後付けデータを次ページに送る例
【図６】行分断をおこなう場合の例
【図７】課題を示す図
【図８】課題を解決時の図
【図９】Ａは文字列の位置関係を維持したまま行分段を行う処理を示す図、Ｂは文字列の位置関係を維持したまま行分段を行った結果を示す図
【図１０】実施例１のフローチャート
【図１１】実施例３を示す図
【発明を実施するための形態】
【００２０】
＜システム構成図＞
図１Ａは帳票等のデータを印刷する印刷システム１００を図示している。この中で示された方法は図１Ｂで詳しく説明される汎用コンピュータモジュール１０１で実践される。図１Ｂで記述されるプロセスは、コンピュータモジュール１０１内で実行され、システム１００上で実施可能となるフォーム作成アプリケーションプログラム１２１のようにソフトウェアの全体、あるいは一部分で実行される。特にレイアウト編集、設定ファイル編集や必然的に起こる印刷のステップはコンピュータ１０１によって実行されるソフトウェアの指示によって実施される。ソフトウェアは例えば以下に記述されるような記憶装置を含むコンピュータの可読媒体に格納される。ソフトウェアはコンピュータの可読媒体からコンピュータにロードされ、コンピュータ１０１によって実行される。そのようなソフトウェアや媒体に記録されたコンピュータプログラムを持つコンピュータの可読媒体はコンピュータプログラム製品である。そのコンピュータでのコンピュータプログラム製品の使用は望ましくもドキュメントのレイアウト編集やデータ印刷に有利な装置をもたらす。
【００２１】
コンピュータモジュール１０１はキーボード１３２やマウス１３３のようなポインティングデバイスなどの入力装置をつなぎ、ディスプレイ装置１４４や状況に応じてはローカルプリンタ１４５を含む出力装置を連結する。入力／出力インターフェース１３８はコンピュータモジュール１０１をネットワーク接続１０７から接続してシステム１００の他のコンピュータ装置につなげることができる。そのネットワーク接続１０７の典型はローカルエリアネットワーク（ＬＡＮ）、あるいはワイドエリアネットワーク（ＷＡＮ）である。
【００２２】
コンピュータモジュール１０１は典型的に少なくとも１つのプロセッサーユニット１３５を含む。同様に、例えば半導体のランダムアクセスメモリ（ＲＡＭ）やリードオンリーメモリ（ＲＯＭ）から構成されるメモリユニット１３６を含む。同様にビデオインタフェース１３７を含むＩＮＰＵＴ／ＯＵＴＰＵＴ（Ｉ／Ｏ）インターフェースを含む。さらにキーボード１３２やマウス１３３のためのＩ／Ｏインターフェース１４３を含んでいる。
【００２３】
記憶装置１３９は典型的にハードディスクドライブ１４０やフロッピーディスクドライブ１４１を含んでいる。図には示されていないが磁気テープドライブもまた使用される可能性がある。ＣＤ−ＲＯＭドライブ１４２は不揮発性のデータソースとして提供される。コンピュータモジュール１０１は相互接続バス１３４を介して通信を行うコンピュータモジュール１０１のコンポーネント１３５から１４３を利用する。
【００２４】
図に記述した配置コンピュータの例ではＩＢＭ互換ＰＣやＳＵＮ社のＳｐａｒｃ  Ｓｔａｔｉｏｎ、あるいはそれらを含んだコンピュータシステムが考えられる。
【００２５】
フォーム作成アプリケーションプログラム１２１は典型的にハードディスクドライブ１４０に常駐し、プロセッサ１３５により実行、読み込み、コントロールされる。プログラム１２１の媒介記憶装置とネットワーク１０２０からフェッチされるデータはハードディスクドライブ１４０に呼応して半導体メモリ１３６を使用する。いくつかのインスタンスではアプリケーションプログラム１２１がＣＤ−ＲＯＭやフロッピーディスク上でエンコードされ、対応するドライブ１４２や１４１を通じて読み込まれユーザに提供される。あるいはもう一つの方法としてアプリケーションプログラム１２１はネットワーク接続１０７からユーザによって読み込まれるかもしれない。さらにソフトウェアは磁気テープまたはＲＯＭなど、他の適当な大きさのコンピュータ可読媒体からコンピュータモジュール１０１内にロードされる可能性もある。前述は単に関連するコンピュータ可読メディアの模範である。他のコンピュータ可読媒体も使用される可能性はある。
【００２６】
またフォーム作成と名づけられたアプリケーション１２１はフォーム作成や印刷を行うよう指示し、２つのソフトウェアコンポーネントを含んでいる。これらのうち１つめのコンポーネントはライブラリ１０５であり、これはオーバレイ印刷処理等の処理を行うソフトウェアコンポーネントである。２つめのコンポーネントであるユーザインターフェース１０３はユーザにフォームや設定ファイルを作成させるメカニズムを提供する。ユーザインターフェース１０３とライブラリ１０５はコミュニケーションチャネル１２３を介して通信する。ドキュメント生成のためのデータソースは一般的にデータベースアプリケーションを動かしている他のコンピュータによって構成されたデータベースサーバー１１７上にある典型的なデータベース１１９である。ホストコンピュータ１０１はネットワーク接続１０７の手段によってデータベースサーバー１１７と通信する。フォーム作成アプリケーション１２１はホストコンピュータ１０１か一般的に他のコンピュータで構成されるファイルサーバー１１５に保存されるフォームまたは設定ファイルを生成する。これらのドキュメントはホストコンピュータ１０１のローカルファイルシステムに保存されるか、ファイルサーバー１１５に保存されるか、あるいはプリンタ１１３に直接印刷される。プリントサーバー１０９は直接ネットワークにつながっていないプリンタにネットワーク機能を提供するコンピュータである。プリントサーバー１０９とプリンタ１１３は典型的な通信チャネル１１１を介して接続される。
【００２７】
図２は中間ファイルを使用した場合の、帳票等のデータを印刷するシステム２００の一例を図示している。エンジンサーバー２０１は典型的なコンピューターである。ファイルサーバー１１５に保存されたフォームは印刷や他の目的がある際、ライブラリ２０３によってデータベース１１９に保存されたデータと中間ファイルを生成することができる。そのようなオペレーションはインターフェース２０３からユーザがライブラリ２０３に対して指示をすることにより、可能である。
【００２８】
作成された中間ファイルはネットワーク接続１０７から接続して、管理サーバー２０４やクライアント２０９に送信される。管理サーバー２０４もクライアント２０９も共に典型的なコンピューターである。管理サーバー２０４では、中間ファイルを受け取ると、中間ファイルをデータベース２０７に保存、管理する。管理された中間ファイルはインターフェーズ２０５を介して、ユーザが印刷、削除、検索などの指示をすることが可能である。印刷指示された中間ファイルは、ライブラリ２０６により印刷処理をされ、ネットワーク接続１０７を介してプリンター１１３に送信される。
【００２９】
中間ファイルの管理が必要ないような場合には、単純にクライアント２０９に中間ファイルを送信し、ライブラリ２１０により印刷処理され、プリンター１１３に直接印刷される。
【００３０】
＜実施例１＞
上記で述べた、分断後の各文字列を次ページの先頭から描画すると、各文字列の位置関係が崩れてしまうという課題を解決するための実施例を以下に述べる。
【００３１】
本実施例の概要は、各文字列の位置関係が崩れると判定された場合には、分断後の文字列の描画位置に補正を行うというものである。
【００３２】
本実施例に従うことで、最終的には図８のように、各文字列の位置関係が維持された状態で行分断が行われるようになる。
【００３３】
本実施例を図９Ａ、図９Ｂ、図１０を用いて説明する。図１０は本実施例の処理の流れを示すフローチャートである。また、図９Ａ、図９Ｂは本実施例の処理の流れを、具体例を用いて説明する図である。なお、図９Ａは内部処理の流れを分かりやすくするためにイメージ化したもので、実際の印刷結果ではない。最終的な印刷結果が図９Ｂである。
【００３４】
以降では図１０のフローチャートに従い、実施例を説明していく。
なお、図１０のフローチャートは、フォームと後付けデータがライブラリ２０３に渡され、ライブラリ２０３が後付けデータを解析してフォームに定義されてある表図形に格納していき、表がページ内に収まらず行分断を行うところからスタートする。
【００３５】
まずステップ１００１では、ライブラリ２０３が、セル内の文字列の情報より、分断位置を決定する。
この処理は、すべてのセルに対して行う。
【００３６】
本ステップの具体例を図９Ａで説明する。図９Ａでは、９０１のセル１と９０２のセル２の、２つの横に並んでいるセルに対して行分断を行う場合の例である。９０３は各セルに後付けデータが格納された状態を示す図であり、ページ内の表の最後の１行を表している。この例ではセル１に「ＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸ」、セル２に「あいうえおかきくけこさしすせそすせそ」の文字列が格納されている。標高９０４はページで表示できる表の高さを示していて、この高さを超える場合に行分断がされる。図９Ａの例では表高に対して行が収まりきらないため、行分断が発生する。分断する位置は、文字が切れない範囲内で表高いっぱいまで入る文字列の位置で決まる。ステップ１００１によりセル１の分断位置は９１１の位置、セル２の分断位置は９１２と判定される。
【００３７】
次にステップ１００２で、ライブラリ２０３が、各セルの分断位置が横に揃っているかどうかを判定する。本判定が、分断後に次ページに送られる各文字列の位置関係が崩れるかどうかを判定するものである。図９Ａの例では、セル１の分断位置９１１とセル２の分断位置９１２は揃っていない。そのため、分断後の文字列を次ページの先頭から描画すると位置関係がくずれてしまう。そのため、本判定でＹＥＳと判定された場合には、以下のステップによる補正処理が必要になる。
【００３８】
ステップ１００２でＹＥＳと判定された場合、次にステップ１００３では、ライブラリ２０３が、分断位置から表高に達するまでの距離Ｗｎを記憶領域に保存しておく。
【００３９】
図９Ａで具体例を述べる。図の９１３はステップ１００１により決定した各セルの分断位置で単純に表を分けたものである。ここで、ステップ１００２により、セル１の表高までの距離Ｗ１（９１４）と、セル２の表高までの距離Ｗ２（９０５）を保持しておく。ここで保持した値を、後で述べる補正処理の計算で使用する。
【００４０】
次に、ステップ１００５で、ライブラリ２０３が、各セルについてステップ１００２で求めた表高までの距離Ｗｎの値だけ、余白を追加する。
【００４１】
図９Ａの例では、セル１に対して余白９０７、セル２に対して余白９０８を追加している。この処理の目的は、表の底辺を揃えるためのものである。この処理を行わないと、表の底辺が凸凹になってしまい、表の見栄えが損なわれる。
【００４２】
ここまでで１ページ目の処理は終了する。以降は、分断された後付けデータが送られる次ページ目の処理に進む。
【００４３】
ステップ１００７でライブラリ２０３が、ステップ１００３で求めたＷｎの中でもっとも大きな値Ｌを求める。図９Ａの例では、距離９０５がＬとなる。
【００４４】
次にステップ１００８で、分断されて次ページに送られる各セルについて、ライブラリ２０３が、Ｌ−Ｗｎの分だけ余白を追加する。本ステップが、文字列の位置関係を崩さないための補正処理となる。
【００４５】
図９Ａの具体例では、セル１に対して、余白９０９を追加している。一方、セル２に関しては補正は必要ないため、余白の追加はない。
【００４６】
ここまでで分断される行に関しての処理は終了し、次のステップでは、分断された行の次の行について描画処理を行う。
以上の処理により、最終的に出来上がる帳票の印刷結果を示したのが図９Ｂである。
【００４７】
９２１が帳票の１ページ目で、９２２が２ページ目の印刷結果を示している。２ページ目９２２を見ると、セル１とセル２の文字列の相対位置を維持した状態となっている。
以上の処理により、行内で横に並ぶ各セルの文字列の位置関係を崩すことなく、行の分断を行うことができる。そのため、行分断を行うことで、表の見栄えが損なわれたり、表の意味が変わってしまうという課題が解決される。
【００４８】
＜実施例１の補足＞
実施例１では、本実施例の概要は、各文字列の位置関係が崩れると判定された場合には、分断後の文字列の描画位置に補正を行うことについて記載した。
【００４９】
実施例１で説明した図１０のステップ１００２〜１００８の補正処理は、必ず行ってもよいが、ユーザが補正処理を行うかどうか選択できてもよい。
【００５０】
ユーザが選択する手段としては、エディタを使用してフォームを生成する際に、エディタに選択用のＵＩを設けることで、フォームに対してあらかじめ設定しておくことが考えられる。
【００５１】
別の手段としては、ライブラリ２０３に補正の有無を指定できるインターフェース（ＡＰＩ）を設けることがある。オーバレイ印刷時にライブラリ２０３に対して、ユーザーが動的に補正の有無を指定することで、フォームを変更することなく帳票単位に補正処理の有無が選択できる。
【００５２】
＜実施例２＞
実施例２では、ライブラリ２０３のエラー処理について記述する。図１１は補正処理を行う際に、エラーが発生するような表の一例である。
【００５３】
例１１は極端な例であるが、セル２（１１０２）には１文字だけが格納されている。このような場合、どこを分断してもセル２（１１０２）の文字列は欠けてしまうことになる。
【００５４】
このような場合は分断自体を行わず、行全体を次ページに送る。図１０のフローチャートでいうと、ステップ１００１での分断位置判定で、分断できる位置が無いと判定される。
【００５５】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【００５６】
１０１  コンピュータ
【図１】
2011123848.tif 000003
【図２】
2011123848.tif 000004
【図３】
2011123848.tif 000005
【図４】
2011123848.tif 000006
【図５】
2011123848.tif 000007
【図６】
2011123848.tif 000008
【図７】
2011123848.tif 000009
【図８】
2011123848.tif 000010
【図９】
2011123848.tif 000011
【図１０】
2011123848.tif 000012
【図１１】
2011123848.tif 000013