(第1実施例)
(システムの構成)
図面を参照して第1実施例を説明する。図1に示すように、通信システム2は、PC6と、PC6の周辺機器である多機能機10と、を備える。PC6と多機能機10とは、ネットワークケーブル4を介して、相互に通信可能である。
(多機能機10の構成)
多機能機10は、印刷機能及びスキャン機能を含む多機能を実行可能である。多機能機10は、操作部12と、表示部14と、USBインターフェイス16と、ネットワークインターフェイス18と、制御部20と、印刷実行部60と、スキャン実行部70と、を備える。各部12〜20,60,70は、バス線11に接続されている。操作部12は、複数のキーによって構成されている。ユーザは、操作部12を操作することによって、様々な情報を多機能機10に入力することができる。表示部14は、様々な情報を表示するためのディスプレイである。USBインターフェイス16には、ユーザが持ち運び可能な外部メモリであるUSBメモリ8が装着される。ネットワークインターフェイス18には、ネットワークケーブル4が接続される。
制御部20は、CPU22と、ROM24と、RAM26と、を備える。CPU22は、ROM24に格納されているプログラムに従って、様々な処理を実行する。CPU22が上記のプログラムに従って処理を実行することによって、元データ生成部30及び目的データ生成部50の各機能が実現される。なお、元データ生成部30は、各部32〜40を備える。また、目的データ生成部50は、各部52〜56を備える。RAM26は、CPU22が直接的にアクセス可能なメインメモリであり、制御部20によって取得又は生成される様々なデータを記憶する。なお、RAM26は、最大のデータサイズを有する1ページ分のJPEG(Joint Photographic Experts Group)データを記憶するための記憶容量よりも大きい記憶容量を有する。なお、上記の「最大のデータサイズを有する1ページ分のJPEGデータ」は、スキャン実行部70がスキャン可能な最大の高さ及び幅のサイズを有する1枚のスキャン対象物を、スキャン実行部70が実行可能な最大のスキャン解像度でスキャンすることによって生成されるJPEGデータを意味する。スキャン対象物の「高さ」及び「幅」については、後で詳しく説明する。なお、別の実施例では、RAM26は、最大のデータサイズを有する1ページ分のJPEGデータを記憶するための記憶容量よりも小さい記憶容量を有していてもよい。
印刷実行部60は、インクジェット方式、レーザ方式等の印刷機構を備える。PC6から送信される印刷のためのデータ(以下では「印刷データ」と呼ぶ)がネットワークインターフェイス18によって受信されると、印刷実行部60は、受信済みの印刷データに従って印刷を実行する。
スキャン実行部70は、透明板と、自動原稿搬送装置(ADF(Auto Document Feeder))と、スキャン機構と、を備える。スキャン機構は、第1の方向に沿って並んでいる複数個のイメージセンサを備える。各イメージセンサは、CCDイメージセンサ(Charge Coupled Device Image Sensor)であってもよいし、CIS(Contact Image Sensor)であってもよい。スキャン機構は、複数個のイメージセンサが並ぶ方向(上記の第1の方向)に直交する第2の方向に移動可能である。スキャン機構は、スキャン機構自身が第2の方向に移動することによって、透明板に載置されたスキャン対象物(例えば図2の原稿72,74)をスキャンすることができる。また、スキャン機構は、スキャン機構自身が静止した状態で、自動原稿搬送装置によって上記の第2の方向に搬送される原稿72,74をスキャンすることができる。なお、以下では、透明板に載置されたスキャン対象物72,74に対するスキャンのことを「移動スキャン」と呼び、自動原稿搬送装置によって搬送される原稿72,74に対するスキャンのことを「静止スキャン」と呼ぶ。
なお、上記の移動スキャン及び静止スキャンのどちらの場合であっても、スキャン対象物の幅方向は、スキャン機構を構成する複数個のイメージセンサが並ぶ方向(上記の第1の方向)である。また、上記の移動スキャンの場合には、スキャン対象物の高さ方向は、スキャン機構の移動方向(上記の第2の方向)である。上記の静止スキャンの場合には、スキャン対象物の高さ方向は、自動原稿搬送装置によって搬送される原稿の搬送方向(上記の第2の方向)である。
図2は、2枚の原稿72,74を模式的に示す。上記の移動スキャンが実行されることをユーザが望む場合には、ユーザは、まず、原稿72を透明板に載置し、スキャンの実行の指示を操作部12に入力する。この場合、スキャン機構は、上記の第2の方向(図2のスキャン方向)に移動して、原稿72のスキャンを実行する。この結果、スキャン機構は、原稿72の部分72a,72b,72cの順序で、各部分72a,72b,72cのスキャンを順次実行する(即ちスキャン方向に沿ってスキャンを実行する)。次いで、ユーザは、原稿72を透明板から取り除き、原稿74を透明板に載置し、スキャンの実行の指示を操作部12に入力する。この場合、スキャン機構は、原稿74のスキャンを実行する。ここでユーザがスキャンの終了の指示を操作部12に入力する場合には、2枚の原稿72,74を表わす2ページ分のPDF(Portable Document Format)データ(PDFファイル)が生成される。
また、上記の静止スキャンが実行されることをユーザが望む場合には、ユーザは、原稿72,74を自動原稿搬送装置に載置し、スキャンの実行の指示を操作部12に入力する。この場合、自動原稿搬送装置は、まず、上記の第2の方向(図2のスキャン方向の反対方向)に原稿72を搬送する。スキャン機構は、原稿72の部分72a,72b,72cの順序で、各部分72a,72b,72cのスキャンを順次実行する(即ちスキャン方向に沿ってスキャンを実行する)。次いで、自動原稿搬送装置は、原稿74を搬送し、スキャン機構は、原稿74のスキャンを実行する。この場合も、2枚の原稿72,74を表わす2ページ分のPDFデータ(PDFファイル)が生成される。
(制御部20によって生成されるPDFファイルの構成)
多機能機10の制御部20は、スキャンされたスキャン対象物(例えば原稿72,74等の紙媒体)を表わすJPEGデータを生成し、JPEGデータを用いてハッシュ値を生成し、JPEGデータとハッシュ値とを用いて、USBメモリ8内にPDFファイルを生成する。なお、制御部20は、M枚(Mは1以上の整数)のスキャン対象物のスキャンが実行される場合には、Mページ分のPDFファイルを生成する。図3に示されるように、PDFファイル100は、最初のデータ100aと、最後のデータ100bと、1ページ分以上のPDF部分データ110と、を含む。最初のデータ100aは、PDFヘッダを含む。最後のデータ100bは、PDFフッタと、後述の図4のS26で生成される署名値と、多機能機10に予めインストールされている証明書と、を含む。証明書は、当該証明書に関する証明書情報と、署名値を復号化するための公開鍵と、を含む。証明書情報は、証明書の発行元(認証局(CA))を示す情報、証明書の発行先(即ち多機能機10)を示す情報、証明書の発行日時を示す情報等を含む。
1ページ目のPDF部分データ110は、1ページ目の開始データ110aと、JPEGデータ111と、1ページ目の終了データ110bと、を含む。開始データ110aは、1ページ目のPDF部分データ110の開始を示す文字列を含む。終了データ110bは、1ページ目のPDF部分データ110の終了を示す文字列を含む。JPEGデータ111は、スキャン対象物72を表わすJPEG形式のデータである。なお、JPEGデータ111は、ページという概念を有していない。ただし、以下では、1ページ目のPDF部分データ110に含まれるJPEGデータ111のことを「1ページ目のJPEGデータ111」と呼ぶことがある。また、スキャン対象物72,74も、ページという概念を有していないが、1ページ目のPDF部分データ110によって表わされるスキャン対象物72のことを「1ページ目のスキャン対象物72」と呼ぶことがある。同様に、スキャン対象物74のことを「2ページ目のスキャン対象物74」と呼ぶことがある。なお、図3では、2ページ目以降のPDF部分データを図示省略しているが、2ページ目以降のPDF部分データは、1ページ目のPDF部分データ110と同様の構成を有する。
1ページ目のJPEGデータ111は、複数個の部分JPEGデータ112,114,116を含む。部分JPEGデータ112は、1ページ目のスキャン対象物72の部分72a(図2参照)を表わすJPEG形式のデータである。同様に、部分JPEGデータ114,116は、それぞれ、スキャン対象物72の部分72b,72c(図2参照)を表わすJPEG形式のデータである。部分JPEGデータ112は、位置情報112aと、ヘッダ情報112bと、部分画像データ112cと、フッタ情報112dと、を含む。これらの各情報112a〜112dについて、以下に詳しく説明する。
位置情報112aは、スキャン対象物72のスキャンによって生成される全ての画像データ(部分画像データ112cと後述の各部分画像データ114c,116cとの集合)によって表わされる全体画像内での部分画像データ112cによって表わされる部分画像の位置に関係する情報である。具体的に言うと、位置情報112aは、スキャン対象物72の部分72aの左上の頂点の座標P1に対応する情報である。
ヘッダ情報112bは、SOI(Start Of Image)マーカと、高さ情報と、幅情報と、を含む。ヘッダ情報112bに含まれる高さ情報、幅情報は、それぞれ、高さ方向に対応する部分画像データ112cの画素数、幅方向に対応する部分画像データ112cの画素数を示す。従って、ヘッダ情報112bに含まれる高さ情報は、部分画像データ112cによって表わされるスキャン対象物72の部分72aの高さ(即ち上記の第2の方向(スキャン方向)の長さ)が大きい程、大きくなる。また、ヘッダ情報112bに含まれる高さ情報は、高さ方向のスキャン解像度が高い程、大きくなる。同様に、ヘッダ情報112bに含まれる幅情報は、スキャン対象物72の部分72aの幅(即ち上記の第1の方向の長さ)が大きい程、大きくなる。また、ヘッダ情報112bに含まれる幅情報は、幅方向のスキャン解像度が高い程、大きくなる。
部分画像データ112cは、スキャン対象物72の部分72aを表わす画像データ(本実施例ではビットマップデータ)である。なお、部分画像データ112cは、圧縮された形式で部分JPEGデータ112に含まれる。また、フッタ情報112dは、EOI(End Of Image)マーカを含む。なお、SOIマーカとEOIマーカとの間のデータは、「セグメント」と呼ばれることもある。従って、部分画像データ112cのことを「セグメント」と呼ぶこともできる。
なお、部分JPEGデータ114は、1ページ目のスキャン対象物72の部分72bを表わすJPEG形式のデータであり、部分JPEGデータ112と同様に、位置情報114aと、ヘッダ情報114bと、部分画像データ114cと、フッタ情報114dと、を含む。位置情報114aは、スキャン対象物72の部分72bの左上の頂点の座標P2に対応する情報である。ヘッダ情報114bは、高さ方向に対応する部分画像データ114cの画素数を示す高さ情報と、幅方向に対応する部分画像データ114cの画素数を示す幅情報と、を含む。部分画像データ114cは、スキャン対象物72の部分72bを表わす画像データである。また、部分JPEGデータ116は、部分JPEGデータ112,114と同様に、各情報116a〜116dを含む。
(多機能機10が実行する処理)
次いで、USBメモリ8内にPDFファイル100を生成するための処理の内容について説明する。ユーザによって所定の操作が実行されると、制御部20は、図4に示されるPDFファイル生成処理を実行する。上記の所定の操作は、USBメモリ8をUSBインターフェイス16に装着すること、スキャン対象物を透明板又は自動原稿搬送装置に載置すること、所望のスキャン解像度を指定すること、及び、操作部12に含まれるスキャン実行キーを操作することを含む。
図4のS10に示されるように、目的データ生成部50(図1参照)は、まず、PDFファイル100の最初のデータ100a(図3参照)をRAM26内に生成する。S10では、さらに、算出部52(図1参照)は、RAM26内の最初のデータ100aを用いて、ハッシュ値を算出する。なお、本実施例では、算出部52は、ハッシュ関数としてSHA(Secure Hash Algorithm)−1を利用するが、MD4、MD5等の他のハッシュ関数を利用してもよい。また、以下では、図4のS26で最終的に算出されるハッシュ値のことを「最終ハッシュ値」と呼び、最終ハッシュ値を生成するためにS26よりも前の処理で算出されるハッシュ値のことを「中間ハッシュ値」と呼ぶ。S10では、さらに、書込部54(図1参照)は、RAM26内の最初のデータ100aを、USBメモリ8に書き込む。
S10で最初のデータ100aがUSBメモリ8に書き込まれると、S12において、目的データ生成部50は、最初のデータ100aをRAM26から消去する(即ちRAM26を解放する)。なお、S12では、S10で算出された中間ハッシュ値は、RAM26から消去されない。以下でも、RAM26を解放するための各処理(例えばS16等)において、中間ハッシュ値は、RAM26から消去されない。
次いで、S14において、目的データ生成部50は、対象ページの開始データをRAM26内に生成する。1回目のS14では、対象ページは、1ページ目である。従って、1回目のS14では、目的データ生成部50は、1ページ目の開始データ110a(図3参照)を生成する。なお、以下では、対象ページが1ページ目である場合を例として、S14〜S22の処理の内容を説明する。S14では、さらに、算出部52は、S10で算出されたRAM26内の中間ハッシュ値と、RAM26内の1ページ目の開始データ110aと、を用いて、新たな中間ハッシュ値を算出する。この結果、最初のデータ100aの先頭から1ページ目の開始データ110aの最後までの中間ハッシュ値が算出される。S14では、さらに、書込部54は、RAM26内の1ページ目の開始データ110aを、USBメモリ8に書き込む。
S14で1ページ目の開始データ110aがUSBメモリ8に書き込まれると、S16において、目的データ生成部50は、1ページ目の開始データ110aをRAM26から消去する(即ちRAM26を解放する)。次いで、S18において、元データ生成部30は、対象ページ(即ち1ページ目)の部分JPEGデータ生成処理を実行する。
(部分JPEGデータ生成処理)
図5を参照して、部分JPEGデータ生成処理の内容について説明する。図示省略しているが、元データ生成部30は、1ページ目のスキャン対象物72のスキャンを、スキャン実行部70に実行させる。この結果、スキャン実行部70が、1ページ目のスキャン対象物72のスキャンを実行する。なお、スキャン実行部70は、スキャンによって得られるRGBのビットマップ形式のスキャンデータを一時的に格納するためのバッファ(図示省略)を備える。バッファは、1ライン分のスキャンデータを記憶するための記憶容量を有する。なお、「1ライン分のスキャンデータ」は、高さ方向の1画素分のスキャンデータである。従って、例えば、ユーザによって指定される幅方向のスキャン解像度が最大のスキャン解像度である場合には、「1ライン分のスキャンデータ」は、スキャン機構が備える複数個のイメージセンサの個数と同じ数の画素数を有する。
なお、図示省略しているが、元データ生成部30は、部分JPEGデータ生成処理を開始する前に、1ライン分のスキャンデータを記憶するための記憶容量を有する記憶領域(以下では「ライン記憶領域」と呼ぶ)を、RAM26内に確保する。スキャン実行部70のバッファ内の1ライン分のスキャンデータは、RAM26内のライン記憶領域に書き込まれる。これにより、バッファを解放することができ、バッファに次の1ライン分のスキャンデータが格納される。1ライン分のスキャンデータがライン記憶領域に格納されると、図5のS40以降の処理が開始される。
1回目のS40では、位置情報生成部38(図1参照)は、スキャン対象物72の部分72aの座標P1(図2参照)を示す位置情報112a(図3参照)を、RAM26内に生成する。具体的に言うと、1回目のS40の処理では、位置情報生成部38は、予め決められている座標P1(例えば座標(1,1))を示す位置情報112aを、RAM26内に生成する。これにより、図6に示されるように、位置情報112aがRAM26内に記憶される。
次いで、元データ生成部30は、1回目のS42の処理を実行することによって、ヘッダ情報112b(図3参照)をRAM26内に生成する。具体的に言うと、1回目のS42では、元データ生成部30は、SOIマーカと、予め決められている仮の高さ情報と、をRAM26内に生成する。1回目のS42の時点では、スキャン対象物72の部分72aのスキャンが終了していないために、部分画像データ112aの実際の高さ情報が未定である。従って、元データ生成部30は、仮の高さ情報をRAM26内に生成する。1回目のS42では、さらに、第2種のサイズ情報生成部40(図1参照)は、ライン記憶領域に記憶されている1ライン分のスキャンデータの画素数を参照することによって、実際の幅情報を取得する。第2種のサイズ情報生成部40は、実際の幅情報をRAM26内に生成する。これにより、図6に示されるように、SOIマーカと仮の高さ情報と実際の幅情報とを含むヘッダ情報112bがRAM26内に記憶される。
次いで、S44において、画像データ生成部32(図1参照)は、ライン記憶領域内の1ライン分のスキャンデータを、JPEG形式の画像データに変換する。これにより、1ライン分のスキャンデータから生成されるJPEG形式の画像データが、RAM26内の空き容量26a(図6参照)に記憶される。なお、図示省略しているが、S44の処理が実行されると、元データ生成部30は、ライン記憶領域内の1ライン分のスキャンデータを消去する(即ちライン記憶領域を解放する)。この結果、ライン記憶領域は、次の1ライン分のスキャンデータを記憶することができる。
次いで、S46において、元データ生成部30は、1ページ目のスキャン対象物72に対するスキャンが終了したのか否かを判断する。1ページ目のスキャン対象物72を表わす最後の1ライン分のスキャンデータは、ページの最後であることを示す情報を含む。このような情報を含む1ライン分のスキャンデータに対してS44の処理が実行された場合には、元データ生成部30は、S46でYESと判断し、S58に進む。
一方において、S46でNOの場合、S48において、監視部36(図1参照)は、RAM26内の空き容量が不足しているのか否かを判断する。具体的に言うと、監視部36は、RAM26内の未使用の領域の容量(即ち空き容量)が、所定のサイズ(例えば1個のフッタ情報112dを記憶するためのサイズ)よりも大きいのか否かを判断する。RAM26の空き容量が不足する状況について、次に説明する。
上述したように、RAM26は、最大のデータサイズを有する1ページ分のJPEGデータを記憶するための記憶容量よりも大きい記憶容量を有する。従って、制御部20によって図4のPDFファイル生成処理のみが実行されている状態では、通常、RAM26に十分な空き容量が確保されているために、1ページ目のスキャン対象物72を表わす全てのスキャンデータが生成されるまで、図5のS48でNOと判断され続ける。従って、1ページ目のスキャン対象物72を表わす全てのJPEGデータが、RAM26に書き込まれる。ただし、図4のPDFファイル生成処理が実行されている間に、例えば、PC6から多機能機10に印刷データが送信される可能性がある。この場合、制御部20は、図4のPDFファイル生成処理と同時的に(PDFファイル生成処理に並行して)、図示省略の印刷処理を実行する。
印刷処理において、制御部20は、印刷データをRAM26に書き込む。これにより、図6に示されるように、他の処理のためのデータ(ここでは印刷データ)200がRAM26に書き込まれる。また、制御部20は、RAM26内の印刷データを、印刷に適した特定の形式のデータ(例えばCMYK画像データ)に変換する処理を実行する。これにより、他の処理のためのデータ(ここでは上記の特定の形式のデータ)200がRAM26に書き込まれる。この結果、RAM26内の空き容量が少なくなり、図4のS48において、RAM26内の空き容量が不足していると判断され得る。
なお、RAM26内の空き容量が不足する状況は、制御部20が印刷処理を実行する場合のみならず、印刷処理以外の処理を実行する場合にも起こり得る。例えば、制御部20は、PC6からのアクセスに応じて、WEBページを示すデータを生成し、当該データをPC6に送信する処理を実行する。即ち、RAM26内の空き容量が不足する状況は、制御部20が図4のPDFファイル生成処理以外の特定の処理(印刷処理、WEBページの生成の処理等)を実行する場合に起こり得る。
RAM26内の空き容量が不足しない場合(図5のS48でNOの場合)、画像データ生成部32は、S44に戻って、ライン記憶領域に記憶されている次の1ライン分のスキャンデータを用いて、JPEG形式の画像データをRAM26内に生成する。RAM26内の空き容量が不足するまで(S48でYESと判断されるまで)、S44の処理が繰り返し実行されることによって、図6に示されるように、スキャン対象物72の部分72aを表わす部分画像データ112cが、RAM26内に記憶される。
RAM26内の空き容量が不足する場合(S48でYESの場合)には、画像データ生成部32は、1個の部分画像データ112cの生成を終了し、S50に進む。RAM26内の空き容量が不足する場合に1個の部分画像データ112cの生成を終了する構成を採用すると、予め決められているサイズの部分画像データが生成される場合に1個の部分画像データの生成を終了する特定の構成(例えば後述の第2実施例の構成)と比べて、大きいサイズを有する1個の部分画像データを生成し得る。従って、本実施例によると、上記の特定の構成と比べて、図5のS50〜S56の処理の実行回数を低減し得る。
上述したように、S42で生成されるヘッダ情報112bに含まれる高さ情報は、仮の高さ情報である。S50では、第1種のサイズ情報生成部34(図1参照)は、RAM26内のヘッダ情報112b内の仮の高さ情報を、実際の高さ情報に変更する。具体的に言うと、第1種のサイズ情報生成部34は、スキャン実行部70のスキャンの実行結果に基づいて、実際の高さ情報(部分画像データ112cの高さ方向の画素数)を取得することができる。即ち、第1種のサイズ情報生成部34は、S44でJPEG形式の画像データに変換されたスキャンデータのライン数(即ち1回目のS42が実行された後のS44の実行回数)を、実際の高さ情報として採用する。S50が実行されることにより、部分画像データ112cの実際の高さ情報が、RAM26内に生成される。
次いで、S52において、元データ生成部30は、EOIを含むフッタ情報112d(図3参照)を、RAM26内に生成する。これにより、図6に示されるように、フッタ情報112dが、RAM26内に記憶される。この結果、部分JPEGデータ112が、RAM26内に生成される。
次いで、S54において、算出部52は、図4のS14で算出されたRAM26内の中間ハッシュ値と、RAM26内の部分JPEGデータ112(即ち、位置情報112a、ヘッダ情報112b、部分画像データ112c、フッタ情報112d)と、を用いて、新たな中間ハッシュ値を算出する。なお、算出部52は、RAM26内の部分JPEGデータ112の各情報112a〜112dの生成順序と同じ順序で、各情報112a〜112dを順次用いて、中間ハッシュ値を算出する。従って、算出部52は、部分画像データ112cより先に、ヘッダ情報112bを用いる。S54の結果、最初のデータ100aの先頭からフッタ情報112dの最後までの中間ハッシュ値が算出される。S54では、さらに、書込部54は、RAM26内の部分JPEGデータ112を、USBメモリ8に書き込む。
S54で部分JPEGデータ112がUSBメモリ8に書き込まれると、S56において、元データ生成部30は、部分JPEGデータ112をRAM26から消去する(即ちRAM26を解放する)。この結果、図6に示されるように、RAM26内に空き容量26bが形成される。
次いで、位置情報生成部38は、2回目のS40を実行する。2回目のS40では、位置情報生成部38は、前回(1回目)のS40で生成された位置情報112aと、部分画像データ112cの実際の高さ情報と、に基づいて、スキャン対象物72の部分72bの座標P2(例えば座標(1,1+y1(y1=部分画像データ112cの実際の高さ情報))を示す位置情報114aを、RAM26内に生成する。これにより、図6に示されるように、位置情報114aが、RAM26内に記憶される。
次いで、元データ生成部30は、S42以降の処理を再び実行する。この結果、図6に示されるように、ヘッダ情報114b(仮の高さ情報を含む)と、部分画像データ114cと、がRAM26内に記憶される。S48でRAM26内の空き容量が不足すると判断される場合(S48でYESの場合)には、S50において、第1種のサイズ情報生成部34は、RAM26内のヘッダ情報114b内の仮の高さ情報を、実際の高さ情報(部分画像データ114cの高さ方向の画素数)に変更する。さらに、S52において、元データ生成部30は、フッタ情報114dをRAM26内に生成する。この結果、図6に示されるように、部分JPEGデータ114が、RAM26内に生成される。
次いで、S54において、算出部52は、前回(1回目)のS54で算出されたRAM26内の中間ハッシュ値と、RAM26内の部分JPEGデータ114と、を用いて、新たな中間ハッシュ値を算出する。この結果、最初のデータ100aの先頭からフッタ情報114dの最後までの中間ハッシュ値が算出される。S54では、さらに、書込部54は、RAM26内の部分JPEGデータ114を、USBメモリ8に書き込む。次いで、S56において、元データ生成部30は、部分JPEGデータ114をRAM26から消去する(即ちRAM26を解放する)。この結果、図6に示されるように、RAM26内に空き容量26cが形成される。
次いで、位置情報生成部38は、3回目のS40を実行する。3回目のS40では、位置情報生成部38は、前回(2回目)のS40で生成された位置情報114aと、部分画像データ114cの実際の高さ情報と、に基づいて、スキャン対象物72の部分72cの座標P3(例えば座標(1,1+y1+y2(y2=部分画像データ114cの実際の高さ情報))を示す位置情報116aを、RAM26内に生成する。次いで、元データ生成部30は、S42以降の処理を再び実行する。この結果、図6に示されるように、ヘッダ情報116b(仮の高さ情報を含む)と、部分画像データ116cと、がRAM26内に記憶される。
S46で1ページ目のスキャン対象物に対するスキャンが終了したと判断される場合(S46でYESの場合)には、画像データ生成部32は、1個の部分画像データ116cの生成を終了し、S58に進む。S58において、第1種のサイズ情報生成部34は、RAM26内のヘッダ情報116b内の仮の高さ情報を、実際の高さ情報(部分画像データ116cの高さ方向の画素数)に変更する。さらに、S60において、元データ生成部30は、フッタ情報116dをRAM26内に生成する。この結果、図6に示されるように、部分JPEGデータ116が、RAM26内に生成される。
次いで、S62において、算出部52は、前回(2回目)のS54で算出されたRAM26内の中間ハッシュ値と、RAM26内の部分JPEGデータ116と、を用いて、新たな中間ハッシュ値を算出する。この結果、最初のデータ100aの先頭からフッタ情報116dの最後までの中間ハッシュ値が算出される。S62では、さらに、書込部54は、RAM26内の部分JPEGデータ116を、USBメモリ8に書き込む。次いで、元データ生成部30は、S64において、部分JPEGデータ116をRAM26から消去する(即ちRAM26を解放する)。S64が終了すると、1ページ目の部分JPEGデータ生成処理が終了し、図4のS20に進む。
図4のS20では、目的データ生成部50は、1ページ目の終了データ110b(図3参照)を、RAM26内に生成する。S20では、さらに、算出部52は、図5のS62で算出されたRAM26内の中間ハッシュ値と、RAM26内の1ページ目の終了データ110bと、を用いて、新たな中間ハッシュ値を算出する。この結果、最初のデータ100aの先頭から1ページ目の終了データ110bの最後までの中間ハッシュ値が算出される。S20では、さらに、書込部54は、RAM26内の終了データ110bを、USBメモリ8に書き込む。
S20で1ページ目の終了データ110bがUSBメモリ8に書き込まれると、S22に示されるように、目的データ生成部50は、1ページ目の終了データ110bをRAM26から消去する(即ちRAM26を解放する)。次いで、S24において、目的データ生成部50は、全ページのスキャン対象物に対するスキャンが終了したのか否かを判断する。具体的に言うと、目的データ生成部50は、RAM26内のライン記憶領域に新たな1ライン分のスキャンデータが格納されている場合には、S24でNOと判断し、ライン記憶領域に新たな1ライン分のスキャンデータが格納されていない場合には、S24でYESと判断する。
S24でNOの場合には、目的データ生成部50は、対象ページを2ページ目として、2回目のS14〜S24の処理を再び実行する。2回目のS14〜S24の処理は、1回目のS12〜S24の処理と同様である。2回目のS14〜S24の処理の結果、図2のスキャン対象物74を表わす2ページ目のPDF部分データ(図示省略)が、USBメモリ8に書き込まれる。さらに、最初のデータ100aの先頭から2ページ目の終了データ(図示省略)の最後までの中間ハッシュ値が算出される。本実施例では、2枚のスキャン対象物72,74を表わす2ページ分のPDFデータが生成された場合に、S24でYESと判断される。
S24でYESの場合には、S26において、目的データ生成部50は、PDFフッタをRAM26内に生成する。S26では、さらに、算出部52は、最後のS20(例えばスキャン対象物が2枚である場合には2回目のS20)で算出された中間ハッシュ値と、PDFフッタと、を用いて、最終ハッシュ値を算出する。この結果、最初のデータ100aの先頭からPDFフッタの最後までの最終ハッシュ値が算出される。S26では、さらに、署名値生成部56(図1参照)は、最終ハッシュ値を予め決められた秘密鍵で暗号化することによって、署名値(即ち署名済みハッシュ値)を生成する。S26では、さらに、目的データ生成部50は、PDFフッタと、署名値と、予め決められた証明書と、を含む最後のデータ100b(図3参照)を、RAM26内に生成する。なお、署名値及び証明書は、最終ハッシュ値を算出するための対象(ハッシュ化の対象)ではない。S26では、さらに、書込部54は、最後のデータ100bを、USBメモリ8に書き込む。これにより、USBメモリ8内に図3に示されるPDFファイル100が完成する。
(外部装置の処理)
ユーザは、PDFファイル100を含むUSBメモリ8を持ち運ぶことができる。ユーザは、例えば、PC6のUSBインターフェイスにUSBメモリ8を装着することにより、USBメモリ8内のPDFファイル100を外部装置の表示部に表示させることができる。この際に、外部装置は、PDFファイル100に含まれる各位置情報112a,114a,116aを用いて、各部分画像データ112c,114c,116cによって表わされる各部分画像の表示位置を決定することができる。この結果、外部装置は、各部分画像データ112c,114c,116cに基づいて、スキャン対象物72を表わす1ページ分の適切な全体画像を表示させることができる。同様に、外部装置は、スキャン対象物74を表わす1ページ分の適切な全体画像を表示させることができる。なお、ユーザは、例えば、他の印刷装置のUSBインターフェイスにUSBメモリ8を装着することにより、USBメモリ8内のPDFファイル100の印刷を他の印刷装置に実行させることもできる。この場合も、他の印刷装置は、各位置情報112a等を用いて、各部分画像データ112c等によって表わされる各部分画像の印刷位置を決定することができる。即ち、外部装置(上記のPC6、他の印刷装置等)は、各位置情報112a等を用いて、各部分画像データ112c等によって表わされる各部分画像の出力位置(表示位置、印刷位置等)を決定することができる。
また、外部装置は、最初のデータ100aの先頭から、最後のデータ100b内のPDFフッタの最後までのハッシュ値(以下では「第1のハッシュ値」と呼ぶ)を算出することができる。また、外部装置は、最後のデータ100bに含まれる署名値を、最後のデータ100bに含まれる公開鍵で復号化することよって、ハッシュ値(以下では「第2のハッシュ値」と呼ぶ)を生成することができる。外部装置は、第1のハッシュ値と第2のハッシュ値とを比較することによって、PDFファイル100に対する改ざんの有無を判断することができる。例えば、外部装置は、第1のハッシュ値と第2のハッシュ値とが一致しない場合に、PDFファイル100が改ざんされた可能性があることを示すメッセージを出力(表示、印刷等)させる。ユーザは、当該メッセージを見ることによって、PDFファイル100が改ざんされた可能性があることを知ることができる。
実施例の通信システム2について詳しく説明した。1枚のスキャン対象物72を表わす全ての画像データ(以下では「全画像データ」と呼ぶ)の高さ情報(以下では「全高さ情報」と呼ぶ)は、スキャン対象物72のスキャンが終了するまで未定である。しかも、全高さ情報は、全画像データよりも先にハッシュ計算の対象になるヘッダ情報に含まれる。従って、仮に、全画像データと全高さ情報とを含むJPEGデータ(以下では「対象JPEGデータ」と呼ぶ)を生成する構成を採用すると、スキャン対象物72のスキャンが終了するまで、対象JPEGデータを用いてハッシュ値を算出することができない。なお、多機能機10は、対象JPEGデータをUSBメモリ8に書き込むために、USBメモリ8内の対象JPEGデータを用いて、最終ハッシュ値を算出し得る。しかしながら、USBメモリ8内のデータを用いて処理を実行するのに要する時間は、通常、RAM26内のデータを用いて処理を実行するのに要する時間よりも長くなる。USBメモリ8内のデータを利用するためには、USBメモリ8内のデータをRAM26に一時的に書き込むための処理が必要であり、当該処理に時間を要するからである。従って、本実施例では、多機能機10は、RAM26内に対象JPEGデータを生成し、RAM26内の対象JPEGデータを用いて最終ハッシュ値を算出する構成を採用している。
ただし、多機能機10のRAM26の記憶容量は比較的に少ないために(PC6等よりも少ないために)、上述したように、例えば、印刷処理が同時的に実行される状況では、RAM26は、全画像データの全てを一度に(同時的に)保持することができない可能性、即ち、図5のS48でYESと判断される可能性がある。従って、本実施例では、多機能機10は、スキャン対象物72を表わす全画像データを構成する複数個の部分画像データ112c,114c,116cのそれぞれを、RAM26内に順次生成する(図5のS44参照)。さらに、多機能機10は、複数個の部分画像データ112c,114c,116cのそれぞれについて、当該部分画像データの実際の高さ情報を、RAM26内に生成する(図5のS50、S58参照)。この構成によると、多機能機10は、全画像データの全てが生成される前に、RAM26の1個の部分JPEGデータ112(又は114)を用いて、最終ハッシュ値を算出するための算出処理を実行することができる(図5のS54参照)。即ち、RAM26は、全画像データの全てを一度に保持せずに済み、1個の部分JPEGデータ112(又は114)を保持すれば足りる。従って、多機能機10は、RAM26の記憶容量が比較的に少ない場合でも、最終ハッシュ値を迅速に算出することができる。この結果、多機能機10は、最終ハッシュ値を含むPDFファイル100を、USBメモリ8内に迅速に生成することができる。
なお、上述したように、RAM26内の空き容量が不足しない場合(例えば他の処理のためのデータ200(図6参照)がRAM26に記憶されない場合)には、RAM26は、1ページ分のJPEGデータの全てを一度に保持することができる。即ち、多機能機10は、1ページ分のJPEGデータの全てをRAM26内に生成し、その後に、1ページ分のJPEGデータの全てを用いて、中間ハッシュ値を算出することがあり得る。このことから明らかなように、本明細書によって開示される「スキャナ装置」は、1ページ分のJPEGデータ111を構成する部分JPEGデータ112,114,116を順次生成する処理を必ず実行する必要はなく、そのような処理を実行可能であればよい。
実施例の各要素と本発明の各要素との対応関係を記載しておく。多機能機10が「スキャナ装置」の一例である。USBメモリ8、RAM26、USBインターフェイス16が、それぞれ、「外部記憶装置」、「内部記憶装置」、「装着部」の一例である。2枚のスキャン対象物72,74を表わす2ページ分のJPEGデータが「元データ」の一例であり、例えば、スキャン対象物72を表わす1ページ目のJPEGデータ111が「対象元データ」の一例である。また、例えば、3個の部分画像データ112c,114c,116cの集合が「対象画像データ」の一例であり、3個の部分画像データ112c,114c,116cが「N個の部分画像データ」の一例である。従って、3個の部分JPEGデータ112,114,116が「N個の部分元データ」の一例である。また、2枚のスキャン対象物72,72を表わすPDFファイル100が、「M枚のスキャン対象物を表わすMページ分の目的データ」の一例である。図4のS26で算出される最終ハッシュ値が、「ダイジェスト値」の一例である。また、図5のS54及びS62の処理が、「ダイジェスト値を算出するための算出処理」の一例である。高さ情報、幅情報が、それぞれ、「第1種のサイズ情報」、「第2種のサイズ情報」の一例である。
(第2実施例)
第2実施例は、部分JPEGデータ生成処理の内容が第1実施例と異なる。第1実施例では、図5に示されるように、RAM26の空き容量が不足する場合(S48でYESの場合)に、1個の部分画像データの生成が終了する。これに対し、本実施例では、予め決められているサイズの画像データが生成される場合に、1個の部分画像データの生成が終了する。図3のPDFファイル100が生成される場合を例として、図7を参照して、本実施例の部分JPEGデータ生成処理の内容について説明する。
図示省略しているが、元データ生成部30は、部分JPEGデータ生成処理を開始する前に、ライン記憶領域のみならず、予め決められているサイズの記憶容量を有する記憶領域(以下では「特定記憶領域」と呼ぶ)を、RAM26内に確保する。特定記憶領域の記憶容量は、所定の高さ情報を有する1個の部分画像データを含む1個の部分JPEGデータを記憶することが可能な記憶容量である。なお、上記の所定の高さ情報は、2画素分以上の画素数である。
S140は、図5のS40と同様である。1回目のS142において、元データ生成部30は、上記の所定の高さ情報と実際の幅情報とを含むヘッダ情報112b(図3参照)を、上記の特定記憶領域内に生成する。S144及びS146は、図5のS44及びS46と同様である。なお、S144において、画像データ生成部32は、1ライン分のスキャンデータから得られる1ライン分の画像データを、上記の特定記憶領域内に生成する。次いで、S148において、元データ生成部30は、上記の所定の高さ情報に一致する高さ方向の画素数を有する1個の部分画像データが、上記の特定記憶領域内に生成されたのか否かを判断する。S148でNOの場合、S144に戻る。上述したように、RAM26に予め確保される上記の特定記憶領域は、上記の所定の高さ情報を有する1個の部分画像データを含む1個の部分JPEGデータを記憶することが可能な記憶容量を有する。従って、本実施例では、1個の部分画像データを生成する過程で、RAM26内の記憶容量が不足することはない。
S148でYESの場合、画像データ生成部32は、1個の部分画像データ112cの生成を終了し、S152に進む。S152〜S156は、図5のS52〜S56と同様である。この結果、上記の所定の高さ情報に一致する高さ方向の画素数を有する1個の部分画像データ112cを含む部分JPEGデータ112(図3参照)が、RAM26内に生成される。さらに、中間ハッシュ値が算出され、部分JPEGデータ112がUSBメモリ8に書き込まれる。S156を終えると、S140に進む。この結果、上記の所定の高さ情報に一致する高さ方向の画素数を有する1個の部分画像データ114cを含む部分JPEGデータ114(図3参照)が、RAM26内に生成される。さらに、中間ハッシュ値が算出され、部分JPEGデータ114がUSBメモリ8に書き込まれる。
本実施例でも、第1実施例と同様に、部分画像データ116cが生成されると、1ページ目のスキャン対象物72に対するスキャンが終了したと判断される(即ちS146でYESと判断される)。この場合、S158において、第1種のサイズ情報生成部34は、RAM26内のヘッダ情報116b内の上記の所定の高さ情報を、実際の高さ情報(部分画像データ116cの高さ方向の画素数)に変更する。S160〜S164は、図5のS60〜S64と同様である。
本実施例では、複数個の部分画像データ112c,114c,116cのうちの最後に生成される部分画像データ116cの実際の高さ情報は、上記の所定の高さ情報と異なるために、多機能機10は、部分画像データ116cを含む部分JPEGデータ114を生成する際に、高さ情報を変更するための処理(S158の処理)を実行する。ただし、多機能機10は、各部分画像データ112c,114cの高さ方向の画素数が上記の所定の高さ情報に一致するように、各部分画像データ112c,114cを生成する。従って、多機能機10は、各部分画像データ112c,114cを含む各部分JPEGデータ112,114を生成する際に、高さ情報を変更するための処理を実行せずに済む(即ちS148でYESの場合にはS158に相当する処理が実行されない)。このために、多機能機10の処理負荷を低減させることができる。
本実施例では、部分画像データ112c,114cが「N−1個の部分画像データ」の一例であり、部分画像データ116cが「N番目の部分画像データ」の一例である。また、上記の所定の高さ情報が「所定値」の一例である。
(変形例1)上記の各実施例では、算出部52は、ハッシュ化を利用することによって「ダイジェスト値」を生成するが、その代わりに、他のダイジェスト化の手法を利用してもよい。一般的に言うと、「ダイジェスト値」を算出するための手法は、M枚(Mは1以上の整数)のスキャン対象物を表わす元データから得られる値であって、元データの合計データサイズよりも小さいデータサイズを有する値を生成するためのあらゆるダイジェスト化の手法を含む。
(変形例2)上記の各実施例では、目的データ生成部50は、PDFの「目的データ」を生成するが、その代わりに、PDF以外の形式(例えばXPS形式)の「目的データ」を生成してもよい。また、上記の実施例では、元データ生成部30は、JPEG形式の「元データ」を生成するが、その代わりに、JPEG形式以外の形式(例えば、TIFF、BMP形式)の「元データ」を生成してもよい。
(変形例3)上記の各実施例では、USBメモリ8を「外部記憶装置」として利用しているが、それに代えて、「外部記憶装置」は、多機能機10に内蔵されるハードディスクであってもよいし、多機能機10に装着されるCD、DVD、フロッピー(登録商標)ディスク等のメディアであってもよいし、多機能機10と別体に構成される外部装置(例えばサーバ)内の記憶装置であってもよい。
(変形例4)上記の各実施例では、図5のS54及びS62、図7のS154及びS162において、まず、算出部52が中間ハッシュ値を算出し、次いで、書込部54が部分JPEGデータをUSBメモリ8に書き込む。これに代えて、まず、書込部54が部分JPEGデータをUSBメモリ8に書き込み、次いで、算出部52が中間ハッシュ値を算出してもよい。
(変形例5)上記の第2実施例において、上記の所定の高さ情報が1画素であってもよい。この場合、各部分JPEGデータは、高さ方向の画素数が「1」である1個の部分画像データを含む。即ち、本変形例では、例えば、スキャン対象物72を表わす全ての画像データは、当該画像データの高さ方向の画素数と同じ数(以下では「特定の数」と呼ぶ)の部分画像データ群によって構成される。従って、スキャン対象物72を表わす1ページ目のJPEGデータは、上記の特定の数の部分JPEGデータ群によって構成される。本変形例では、図7のS158を実行せずに済む。本変形例も、本明細書によって開示される「スキャナ装置」の構成に含まれる。
(変形例6)上記の変形例5では、算出部52は、図7のS144で1ライン分の部分画像データが生成された後に、ヘッダ情報(即ち高さ情報)を用いて中間ハッシュ値を算出するが、それに代えて、算出部52は、S142でヘッダ情報が生成された際に、位置情報及びヘッダ情報を用いて中間ハッシュ値を算出してもよい。この場合、算出部52は、S154において、位置情報及びヘッダ情報を用いずに、部分画像データ及びフッタ情報を用いて中間ハッシュ値を算出してもよい。即ち、算出部52は、S144で1ライン分の部分画像データが生成される前に、ヘッダ情報(即ち高さ情報)を用いて中間ハッシュ値を算出してもよい。本変形例も、本明細書によって開示される「スキャナ装置」の構成に含まれる。
以上、本発明の具体例を詳細に説明したが、これらは例示にすぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。
また、本明細書または図面に説明した技術要素は、単独であるいは各種の組合せによって技術的有用性を発揮するものであり、出願時請求項記載の組合せに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。