JP6666036B2 - 印刷データ処理装置、印刷データ処理方法、およびプログラム - Google Patents

印刷データ処理装置、印刷データ処理方法、およびプログラム Download PDF

Info

Publication number
JP6666036B2
JP6666036B2 JP2016006673A JP2016006673A JP6666036B2 JP 6666036 B2 JP6666036 B2 JP 6666036B2 JP 2016006673 A JP2016006673 A JP 2016006673A JP 2016006673 A JP2016006673 A JP 2016006673A JP 6666036 B2 JP6666036 B2 JP 6666036B2
Authority
JP
Japan
Prior art keywords
unit
page
print data
pages
interpreting
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016006673A
Other languages
English (en)
Other versions
JP2017124589A (ja
JP2017124589A5 (ja
Inventor
秀一 竹中
秀一 竹中
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2016006673A priority Critical patent/JP6666036B2/ja
Priority to EP16206914.0A priority patent/EP3193249B1/en
Priority to US15/391,028 priority patent/US10242299B2/en
Priority to KR1020170004797A priority patent/KR102145809B1/ko
Publication of JP2017124589A publication Critical patent/JP2017124589A/ja
Publication of JP2017124589A5 publication Critical patent/JP2017124589A5/ja
Priority to US16/267,158 priority patent/US10885409B2/en
Application granted granted Critical
Publication of JP6666036B2 publication Critical patent/JP6666036B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1223Dedicated interfaces to print systems specifically adapted to use a particular technique
    • G06F3/1237Print job management
    • G06F3/125Page layout or assigning input pages onto output media, e.g. imposition
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K15/00Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers
    • G06K15/40Details not directly involved in printing, e.g. machine management, management of the arrangement as a whole or of its constitutive parts
    • G06K15/408Handling exceptions, e.g. faults
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/24Resetting means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1202Dedicated interfaces to print systems specifically adapted to achieve a particular effect
    • G06F3/121Facilitating exception or error detection and recovery, e.g. fault, media or consumables depleted
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1223Dedicated interfaces to print systems specifically adapted to use a particular technique
    • G06F3/1237Print job management
    • G06F3/1244Job translation or job parsing, e.g. page banding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1223Dedicated interfaces to print systems specifically adapted to use a particular technique
    • G06F3/1237Print job management
    • G06F3/1244Job translation or job parsing, e.g. page banding
    • G06F3/1248Job translation or job parsing, e.g. page banding by printer language recognition, e.g. PDL, PCL, PDF
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1278Dedicated interfaces to print systems specifically adapted to adopt a particular infrastructure
    • G06F3/1285Remote printer device, e.g. being remote from client or server
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1297Printer code translation, conversion, emulation, compression; Configuration of printer parameters
    • G06F3/1298Printer language recognition, e.g. programme control language, page description language
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K15/00Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers
    • G06K15/02Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers using printers
    • G06K15/18Conditioning data for presenting it to the physical printing elements
    • G06K15/1801Input data handling means
    • G06K15/1803Receiving particular commands
    • G06K15/1806Receiving job control commands
    • G06K15/1807Receiving job control commands relating to the print image preparation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K15/00Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers
    • G06K15/02Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers using printers
    • G06K15/18Conditioning data for presenting it to the physical printing elements
    • G06K15/1801Input data handling means
    • G06K15/181Receiving print data characterized by its formatting, e.g. particular page description languages
    • G06K15/1811Receiving print data characterized by its formatting, e.g. particular page description languages including high level document description only
    • G06K15/1813Page description language recognition
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K15/00Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers
    • G06K15/02Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers using printers
    • G06K15/18Conditioning data for presenting it to the physical printing elements
    • G06K15/1801Input data handling means
    • G06K15/1817Buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K15/00Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers
    • G06K15/02Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers using printers
    • G06K15/18Conditioning data for presenting it to the physical printing elements
    • G06K15/1801Input data handling means
    • G06K15/1822Analysing the received data before processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K15/00Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers
    • G06K15/02Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers using printers
    • G06K15/18Conditioning data for presenting it to the physical printing elements
    • G06K15/1848Generation of the printable image
    • G06K15/1849Generation of the printable image using an intermediate representation, e.g. a list of graphical primitives
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K2215/00Arrangements for producing a permanent visual presentation of the output data
    • G06K2215/0002Handling the output data
    • G06K2215/0062Handling the output data combining generic and host data, e.g. filling a raster
    • G06K2215/0065Page or partial page composition

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Computational Linguistics (AREA)
  • Record Information Processing For Printing (AREA)
  • Accessory Devices And Overall Control Thereof (AREA)

Description

本発明は、印刷データを解釈する処理に関する。
印刷装置は、ページ記述言語(PDL)で記述された印刷データ(PDLデータ)を解釈し、その解釈結果に基づいて中間データを一旦生成する。そして、その中間データから画像を生成し、生成した画像を印刷する。特許文献1は、印刷データにおける別々のページを並列に解釈して中間データを生成する印刷装置を開示する。
印刷データにおける別々のページを並列に解釈する場合、ページを並列に解釈する複数の解釈部と、それら複数の解釈部に対して中間データを生成すべきページを通知する制御部とが利用される。具体的には、印刷ジョブの開始に伴い、各解釈部はそれぞれ、印刷データを先頭のページから順に解釈し始め、解釈済みのページ数を管理する。一方、制御部は、中間データを生成すべきページの番号(ページ番号)を印刷ジョブの開始から1、2、3...と順にインクリメントしながら、各解釈部に対して、中間データを生成すべき別々のページ番号を通知する。例えば制御部は、ある解釈部にページ番号「1」を通知すると、次の解釈部にはページ番号「2」を通知する。そして各解釈部は、あるページの解釈を完了したときに、自身が管理する解釈済みページ数と、通知されたページ番号とが一致する場合に、そのページの中間データを生成する。そして中間データが生成されたページが印刷される。
特開2013−14039号公報
印刷データには、印刷ジョブの途中においても、解釈部において管理されている解釈済みページ数を0にリセットするコマンドが存在する。PostScript(登録商標)における、startjobのようなコマンドである。このようなコマンドはページリセットコマンドと呼ばれ、解釈部はページリセットコマンドを検知(解釈)すると、自身が管理する解釈済みページ数を「0」にリセットする。ここで言う、解釈済みページ数とは解釈部内のページカウンタであり、このページカウンタの値は印刷装置の設定に応じてページ数の印字などに用いられる。例えばページ数をリセットすることで、同一印刷ジョブ内の別々のページであっても、同一のページ番号を割り当てることが可能になる。例えば印刷データの2ページ目にページリセットコマンドを含めることで、印刷データの1ページ目と、ページリセットコマンドを含むページ(つまり印刷データの2ページ目)とに、ページ番号「1」を割り当てることが可能になる。
上記のページリセットコマンドが印刷データに含まれる場合に、従来の解釈部と制御部とを用いた印刷装置では、ページリセットコマンドが含まれるページが印刷されなくなるという課題が生じる。従来の解釈部では、ページリセットコマンドが含まれるページを解釈すると、解釈部で管理する解釈済みページ数が「0」にリセットされるが、制御部はそのことを把握せずに、中間データを生成すべきページ番号を解釈部に通知する。この結果、制御部がある解釈部に中間データを生成すべきことを意図して通知したページ番号と、解釈部が自身で管理する解釈済みページ数との間でズレが生じてしまい、結果として、ページリセットコマンドが含まれるページが印刷されなくなってしまう。例えば制御部は、印刷データの2ページ目の中間データの生成を解釈部Xに行わせるべく、ページ番号「2」を解釈部Xに通知する。ここで印刷データの2ページ目にページリセットコマンドが含まれていると、解釈部Xが管理する解釈済みページ数は、ページリセットコマンド検知時には「0」にリセットされる。そして解釈部Xは、このページリセットコマンドに引き続く印刷データの2ページ目の解釈を開始することになる。ところが、解釈部Xが管理する解釈済みページ数がリセットされているため、印刷データの2ページ目の解釈完了時には解釈部Xが管理する解釈済みページ数は「2」ではなく「1」となっている。そのため、解釈完了済みページ数「1」は、制御部が通知した通知ページ番号「2」と一致せず、印刷データの2ページ目の中間データが生成されない。その結果、印刷データの2ページ目が印刷されなくなってしまう。
本発明に係る印刷データ処理装置は、印刷データを解釈する解釈部と、前記解釈部による解釈に基づいて前記印刷データの中間データを生成可能な生成部と、前記解釈部での解釈済みのページ数を保持する第一の保持部とをそれぞれ有する複数の解釈手段と、中間データを生成すべきページ番号を前記複数の解釈手段のうちの対応する解釈手段に通知する通知手段とを有する印刷データ処理装置であって、前記解釈手段は、前記第一の保持部とは異なる種別のページ数を保持する第二の保持部と、これまで解釈した内容を無効化するコマンドを検知した場合、前記無効化するコマンドを検知した時点において前記第一の保持部に保持しているページ数を第二の保持部に保持しているページ数に加算することで前記第二の保持部に保持しているページ数を更新し、前記第一の保持部に保持している前記解釈済みのページ数をリセットする第一の処理部と、前記第一の保持部に保持しているページ数と前記第二の保持部に保持しているページ数との和が、前記通知手段によって通知されたページ番号と一致する場合、前記生成部に前記中間データの生成を実行させる第二の処理部とをさらに有することを特徴とする。
印刷データのページを並列に解釈する印刷データ処理装置を用いた処理において、印刷データに解釈済みページ数をリセットするコマンドが含まれていても、ページの抜けがない印刷結果を出力することができる。
実施例1の説明で用いる、画像形成装置のハードウェア構成図である。 実施例1の説明で用いる、画像形成装置のソフトウェア構成図である。 実施例1の説明で用いる、印刷データの記述例と描画内容である。 実施例1の説明で用いる、ページスキップ処理とページ描画処理を説明する図である。 実施例1の説明で用いる、ページ並列処理の簡易シーケンス図である。 従来技術におけるページ並列処理の簡易シーケンス図である。 実施例1におけるページ並列制御処理の簡易シーケンス図である。 実施例1におけるページ並列制御部のフローチャートである。 実施例1におけるインタプリタのフローチャートである。 実施例2におけるページ並列処理の簡易シーケンス図である。 実施例2におけるインタプリタのフローチャートである。
以下、本発明を実施するための形態について図面を用いて説明する。ただし、この実施形態に記載されている図面はあくまで例示であり、この発明の範囲をそれらにのみ限定する主旨のものではない。
<実施例1>
以下、実施例1を説明する。なお、本実施例では印刷データを記述するPDLとしてページ非独立なPDLを用いる例を説明する。ページ非独立なPDLとは、印刷処理のための情報を、印刷データのあらゆる箇所に、ページを跨いで記述可能なPDLである。従って、ページ非独立なPDLを、複数の解釈部を用いて並列処理して解釈する際には、それぞれの解釈部が中間データを生成する対象のページのみならず、印刷データの先頭からのページを各解釈部が解釈する必要がある。本実施例においては、ページ非独立なPDLの例として、Postscript(登録商標)(以下、PSという)を例に挙げて説明する。なお、ページ非独立なPDLとしては、PSに限られるものではなく、PCLなど他のPDLであってもよい。
<画像形成装置のハードウェアブロック図>
図1は本実施例の画像形成装置の構成を説明するハードウェアブロック図である。図1の画像形成装置は、コントローラユニット100を有する。コントローラユニット100は、画像信号やデバイス情報の入出力を制御する。なお、画像形成装置のことを、印刷データ処理装置と呼んでもよいし、コントローラユニット100を印刷データ処理装置と呼んでもよい。
中央演算装置101は補助記憶装置103に記憶されたプログラムを主記憶装置102に読み出し、実行する。さらに、システムバス109に接続される各デバイスを中央演算装置101が統括的に制御する。本実施例における中央演算装置101は並列処理を実現する。並列処理を実現するために、中央演算装置101はハードウェアとしてプロセッサを複数有するマルチコアシステムを採用する。あるいは、マイクロプロセッサとして、複数のプロセッサコアを備えているものでもよい。さらには、ハイパースレッディングのようなプロセッサ内のレジスタやパイプラインの空き時間を有効利用して1つのプロセッサをあたかも複数のプロセッサであるかのように見せる技術が利用出来るものを用いても良い。
主記憶装置102は、中央演算装置101の主メモリ、ワークメモリとして機能する。
補助記憶装置103は大容量データを一時的あるいは長期的に保持する目的でも使用される。本実施例においては、パイプライン並列を実施する際にバッファ領域にデータが保存される。主記憶装置102または補助記憶装置103は、このバッファ領域を提供する。
NetworkI/F104はネットワーク105に接続し、画像形成装置外部との間で印刷データやデバイス情報の入出力を担う。
RIP106は中間データであるDL(Display List)をラスタイメージ(画像データ)に展開する。RIP106は、中央演算装置101により主記憶装置102および補助記憶装置103上に生成されたDLを高速かつ、中央演算装置101の実行と並列に、処理するものである。
デバイスI/F107は中央演算装置101の指示に基づき、画像信号の送出、デバイス動作指示、デバイス情報の受信を行う。コントローラユニット100はデバイスI/F107を介して、プリンタエンジン108に接続される。
プリンタエンジン108はコントローラユニット100からの画像信号に基づいて画像を記録媒体上に出力する出力機であり、電子写真方式、インクジェット方式の何れでも構わない。
<画像形成装置のソフトウェアモジュール図>
図2は本実施例における画像形成装置のソフトウェアモジュール構成図である。図2に記載した各ソフトウェアモジュールは、プログラムとして補助記憶装置103に格納され、主記憶装置102にロードされ中央演算装置101により実行されるものである。
ページ並列制御部200は、PSインタプリタ201を複数スレッド立ち上げ、スレッド制御する。印刷処理を並列処理するために、ページ並列制御部200は、印刷データをページ単位に区切り、各スレッドへ処理対象とするページを割り当てる処理部を有する。尚、本実施例では並列処理を実行するスレッドを2つ立ち上げたものを想定しているため、PSインタプリタ201が2つ存在する例を示している。しかしながらこれに限られるものではなく、中央演算装置101のプロセッサコアが並列制御できる数だけスレッドを立ち上げ、PSインタプリタ201を割り当ててもよい。
PSインタプリタ201はPDL言語解釈部202と、DL生成部203とを有し、印刷データを解釈して、中間データとしてDL(Display List)を生成する。
PDL言語解釈部202は、ページ記述言語(PDL)により記述されている印刷データの記述内容を解釈するデータ解釈部である。本実施例では、PostScript(登録商標、以下PSと略すことがある)を言語解釈することを想定している。また、PDL言語解釈部202は、自身が解釈済みのページ数をカウントするページカウンタを保持する保持部をそれぞれ有する。また、PSインタプリタ201は、PDL言語解釈部202の解釈結果に基づいて、リセット処理を行なったりページカウンタの値をリセットする処理部を有する。
DL生成部203は、PDL言語解釈部202により解釈された結果に基づいて中間データとしてDLを生成可能である。なお、DL生成部203は、DLを生成する場合としない場合とがある。詳細は後述する。
バッファ204は、複数のPSインタプリタ201から生成されるDLをバッファリングする。ページ並列技術を採用すると、各スレッドが処理を完了する順番はページ順にはならず、あるページより後のページの処理が先に完了する場合がある。記述内容が多かったり複雑なページではDL生成に時間を要する一方で、記述内容が少ないページではDL生成に時間を要さない場合があるからである。印刷データはページ順にRIP106に出力する必要があるため、未処理のページが完了するまでのバッファ領域として、バッファ204を使用する。バッファ領域は主記憶装置102の一部を確保して使用するが、バッファリングできるほどの領域がない場合は、補助記憶装置103の一部を代替として用いても良い。
レンダリング部205は、バッファ204に格納されたDLを図1のRIP106に送る。
<印刷データの記述例と描画内容>
図3(a)(b)は、印刷データに記述される描画オブジェクトの記述例とその描画内容とを示している。図3(a)はPostScript(登録商標)を用いた印刷データの記述例の一例である。Page1の部分では、斜めの線分を定義している。Page2では、「I am string.」という文字列を定義している。Page3では、市松模様のパターンオブジェクトを定義している。Page4では、Page2と同様に「I am string.」という文字列を定義している。PostScriptのページの区切れ目には「showpage」コマンド(オペレーター)が用いられる。解釈済みのページ数をリセットするPDLコマンドは、図3(a)ではPSの「startjob」コマンドであり、Page1の「showpage」コマンドに続いて記述されている。従って、形式的にはPage2の冒頭にstartjobが記述されていることになる。なお、このstartjobコマンドは、これまでのジョブの内容をリセットして、startjobコマンド以降の記述から新たなジョブを開始させるコマンドである。つまり、ページ非独立な言語では、現在解釈しているページのみならず、これまでに解釈したページに記述された内容が蓄積された形で解釈が行なわれることになるが、この蓄積した内容を一旦リセットするコマンドとなる。図3(a)の例では、ページリセットコマンドを除いた箇所が、印刷データの2ページ目の実質的な記述内容となる。なお、startjobの記述仕様については、公開ドキュメントであるPostScript(登録商標)リファレンスマニュアルを参考されたい。
図3(b)は図3(a)で記述された描画オブジェクトの描画内容を示している。データの内容としては、4ページ分記述されているが、前述の通り、Page1とPage2の間にstartjobが記述されているため、内部的にPDL言語解釈部202の解釈済みページ数はstartjobを検知(解釈)した時点でリセットされる。
なお、説明を簡便にする趣旨で、以下で説明する例は図3に示すように、論理ページの1ページが物理ページの1ページに対応する例に基づいて説明することにする。なお、論理ページのNページが物理ページの1ページに対応するNup印刷を行なう場合には、各PDL言語解釈部202が管理するページカウンタでカウントする解釈済みページ数は、論理ページの数である。
図3(b)の例では、印刷データのページ数は4ページであり、この印刷データを全体として見た場合、図3(b)に示すようなページ番号の割り振りとなる。一方、ページリセットコマンドを検知(解釈)したPDL言語解釈部202から見ると、図3(b)のPage1とPage2は、どちらもページ番号としては1ページ目と解釈することになる。このように、印刷データを全体として見た場合のページ番号と、PDL言語解釈部202から見た場合のページ番号とを区別する趣旨で、以下では全体として見た場合のページ番号を、印刷データの3ページ目などと表現する。一方、PDL言語解釈部202から見た場合のページ番号のことを、解釈中(または解釈済み)の3ページ目などと表現する。
<ページ並列処理のシーケンス>
本実施例は、印刷データのページ記述言語としてページ非独立な記述が可能なPSを採用した時のページ並列処理を対象としている。PSは印刷処理のための情報を、印刷データのあらゆる箇所に、ページを跨いで記述可能である。その為、PSの印刷処理に対してページ並列技術を採用する場合、マルチスレッド処理する各スレッドのPDL言語解釈部202は、データの先頭からデータを言語解釈していく必要がある。
本実施例では、図4に示す通り、PSインタプリタ201は2つの動作モードで処理を進める。1つ目はページスキップ処理である。ページスキップ処理においてPSインタプリタ201は、PDL言語解釈部202を用いた言語解釈処理を行う。もう一つはページ描画処理である。ページ描画処理においてPSインタプリタ201は、PDL言語解釈部202を用いた言語解釈処理と、DL生成部203を用いたDL生成処理との両方の処理を行う。ページスキップ処理は、DL生成処理を行わない分処理が早く進むため、生成対象とするページの直前のページまでは、ページスキップ処理で処理を進める。一方、DL生成対象のページについては、PSインタプリタ201はページ描画処理で処理をする。ページスキップ処理もページ描画処理も言語解釈処理を行うため、データの先頭からDL生成ページまで言語解釈処理は必ず行われるので、該DL生成ページに必要な情報が不足することはなく、正常に印刷処理をすることができる。
ページスキップ処理、ページ描画処理ともに処理が完了すると、解釈済みのページ数を示すページカウンタ(以下、PageCount)で解釈済みのページ数がそれぞれのPSインタプリタ201においてカウントされる。PageCountの値は言語解釈処理が始まる前の初期値は「0」であるが、言語解釈処理が問題なく完了するとインクリメントされ「1」となる。例えば、図3の例で印刷ページのPage1の「showpage」コマンドで示すようなページ区切りコマンドの解釈が完了すると、PageCountの値がインクリメントされて「1」となる。
図5は、ページ並列処理の簡易シーケンス図を示している。なお、図5の例は、印刷データには前述のページリセットコマンドが含まれていない、一般的な印刷データを処理するの場合の例を示している。
スレッドAとして立ち上がっているページ並列制御部200により、スレッドB1、スレッドB2が立ち上げられ、スレッドB1、B2にそれぞれPSインタプリタ201が割り当てられる。処理が開始されると、PSインタプリタ201はページ並列制御部200へ処理対象とするページ番号を問い合わせる。このとき、各PSインタプリタ201のPageCountは言語解釈処理が始まる前なので「0」である。
ページ並列制御部200は、各スレッドの並列性を考慮して、それぞれのスレッドへ割り当てるDL生成対象のページ番号を通知する。図5の例では、スレッドB1にまず2ページ目を、スレッドB2に1ページ目を処理するように指示している。図5の例では、ページ並列制御部200は、DL生成対象のページ番号をOutputPageのパラメータで管理しており、各PSインタプリタ201にOutputPageの値を通知するこことで生成対象のページ番号を通知している。ページ並列制御部200からOutputPageが通知されると、PSインタプリタ201はOutputPageが示す値のページ番号までのページに対してページスキップ処理を行う。そして、OutputPageが示すページ番号のページに対してページ描画処理を行う。つまり、PSインタプリタ201は、PageCountが示す解釈済みのページ数とOutputPageが示すページ番号とが一致するページに対してページ描画処理を行い、一致しないページに対してはページスキップ処理を行なう。
スレッドB2に通知されるOutputPageが示すページ番号は、1ページ目である。従って、スレッドB2は、1ページ目のページに対してページ描画処理を行う。具体的には、言語解釈処理が完了すると、スレッドB2のPSインタプリタ201は自身が管理するPageCountを「1」へインクリメントする。その後、ページ並列制御部200から通知されたOutputPageとPageCountとを比較する。そして比較した結果、同値である場合、引き続きそのOutputPageが示すページ番号のページのDL生成処理を実行する。このように、言語解釈処理が完了した際のPageCountとOutputPageとの比較結果に応じて、言語解釈処理だけで処理が終了するページスキップ処理か、DL生成処理まで行なうページ描画処理であるのかの処理が切り替えられることになる。
一方、スレッドB1に通知されるOutputPageが示すページ番号は2ページ目である。従って、スレッドB1は、1ページ目に対してはページスキップ処理を行ない、2ページ目に対してはページ描画処理を行う。この処理を詳細に説明する。スレッドB1では、1ページ目のページスキップ処理の言語解釈処理が完了すると、スレッドB1のPSインタプリタ201は自身が管理するPageCountを「1」へインクリメントする。そして、PSインタプリタ201は、ページ並列制御部200から通知されたOutputPageとPageCountとを比較する。1ページ目の言語解釈が終了した時点では、OutputPageとPageCountとは異なる値であるため、スレッドB1のPSインタプリタ201は、DL生成処理は行わず、続けて次のページの言語解釈処理を開始する。2ページ目のページ描画処理の言語解釈処理が完了すると、スレッドB1のPSインタプリタ201は、PageCountを「2」へインクリメントし、再度OutputPageとPageCountとを比較する。2ページ目の言語解釈が終了した時点ではOutputPageとPageCountとは同値となるため、スレッドB1のPSインタプリタ201は、直近で解釈を完了したページ(ここでは2ページ目)のDL生成処理を実行する。
その後、スレッドB2は1ページ目のページ描画処理が終わると、ページ並列制御部200へDL生成完了を通知して、次の処理対象とするページ番号を問い合わせる。ページ並列制御部200は、図5の例では、このスレッドB2からの問い合わせを受けたタイミングではまだ3ページ目の処理を指示していない。従って、3ページ目を示すページ番号をOutputPageとしてスレッドB2へ通知する。以下、同様にPSインタプリタ201はスレッドB1、B2のそれぞれにおいて、ページ並列制御部200へ生成ページの問い合わせ、言語解釈処理、PageCount値のインクリメント、OutputPageとの比較を行い、DL生成判定を繰り返す。これにより、ページスキップ処理、ページ描画処理を切り替えながら最終ページになるまで処理を継続し、ページ並列処理を実現する。
図6は、図3に示したような、startjobが1ページ目と2ページ目の間に含まれる場合の、従来技術におけるページ並列処理の簡易シーケンス図を示している。図5の場合と同様に、ページ並列制御部200により、スレッドB1、スレッドB2が立ち上げられ、各スレッドにPSインタプリタ201が割り当てられる。各スレッドにはページ並列制御部200から順番にOutputPageが通知されるが、図6の例では、図3に示す印刷データのように、startjobが1ページ目の「Showpage」の後、すなわち、2ページ目の冒頭に存在する。PSインタプリタ201は、このstartjobのようなページリセットコマンドを検知(解釈)すると、それぞれで管理しているPageCountを「0」へリセットする。一方で、ページ並列制御部200はPSインタプリタ201でのPageCountのリセットしたことを把握できていないので、PSインタプリタ201に対しては、リセットを考慮していないOutputPageの値をそのまま通知してしまう。
図6の例では、スレッドB1はジョブを開始すると、ページ並列制御部200からページ番号として「2」を示すOutputPageが通知される。従って、1ページ目の処理をページスキップ処理で進め、PageCountを「1」にインクリメントする。その後、2ページ目の言語解釈処理でstartjobを検知するため、スレッドB1のPSインタプリタ201は、自身が管理するPageCountを「0」へリセットする。前述のように、startjobは、これまでのジョブで定義していた内容などを初期化して無効化するコマンドであるので、スレッドB1のPSインタプリタ201は、最初のページの処理と同様の動作をする。すなわち、スレッドB1のPSインタプリタ201は、ページ並列制御部200に処理対象のページを問い合わせる。しかしながら、ページ並列制御部200はリセットを考慮していない。このため、ページ並列制御部200は、スレッドB1に対して通知したOutputPage「2」の生成完了の通知を受けていないので、スレッドB1に対してOutputPageとして「2」を再度通知する。スレッドB1では、印刷データの2ページ目の処理においては、言語解釈処理が終了した時点でのPageCountは「1」であり、OutputPageの「2」とは一致しない。従って、スレッドB1では印刷データの2ページ目に対してはページスキップ処理がされることになり、DL生成がされないことになる。
次に、他方のスレッドB2について処理を説明する。スレッドB2ではジョブを開始すると、ページ並列制御部200からOutputPageとして「1」が通知される。このため、1ページ目はページ描画処理を行い、PageCountは「1」にインクリメントされた状態である。その後、ページ並列制御部200へOutputPageを問い合わせると、「3」が通知される。そこで、スレッドB2は、3ページ目のページ描画処理を行なうために未解釈のページである印刷データの2ページ目のページスキップ処理を開始する。この2ページ目の先頭でstartjobを検知するのでスレッドB2のPSインタプリタ201は、自身の管理するPageCountを「0」へリセットする。その後、再度ページ並列制御部200へOutputPageを問い合わせる。このとき、ページ並列制御部200ではリセットを考慮していない。そこで、ページ並列制御部200は、スレッドB2に対して通知した「3」ページのDL生成完了通知を受け取っていないので、スレッドB2に対してOutputPageとして、「3」が再度通知される。この結果、スレッドB2においても、印刷データの2ページ目の処理においては、PageCountとOutputPageとが一致せず、印刷データの2ページ目の処理はページスキップ処理され、DL生成がされないことになる。従って、印刷データの2ページ目が印刷用紙へ出力されなくなってしまう。
なお、その後の処理では、図6に示すように、処理対象のページ番号でズレが生じた状態でDLが生成される。なお、ページリセットコマンドを含むページ(本例では印刷データ2ページ)より後のページ(印刷データの3ページ目以降)は、処理を行なうPSインタプリタがズレるだけで、DL自体は生成される。従って、結果としては、ページリセットコマンドを含むページの印刷が抜け落ちてしまう現象が発生するのである。このように、図6の例では、startjobのページリセットコマンドの処理に起因する、PageCountとOutputPageの値のズレに起因して2ページ目が抜けた状況で処理が進んでしまう。そこで、本実施例ではPSインタプリタ201において、このズレの辻褄合わせを行うことで、startjobが含まれる印刷データにおいても、正常に出力結果が得られることを可能にする。
図7は図3に示したような、startjobが1ページ目と2ページ目の間に含まれる場合の、本実施例におけるページ並列処理の簡易シーケンス図を示している。ここでは、PSインタプリタ201はPageCountだけでなく、CachePageというページカウンタ値を保持する。CachePageはstartjobが検知された際の、言語解釈済みのページ数を保持するカウンタ値である。つまり、CachePageはPageCountとは異なる種別のページ数を保持するカウンタ値である。また、このCachePageは前述のページリセットコマンドを検知した場合であってもリセットされない。startjobが検知された後、ページ並列制御部200がリセットを考慮できないことに起因する、OutputPageとのページ数差異を、このCachePageによって辻褄合わせする。図6の処理ではDL生成するかをPSインタプリタ201において判定する際に、OutputPageとPageCountとを比較していたが、本実施例ではこの処理を変更する。具体的には、本実施例のPSインタプリタ201は、PageCountとCachePageとの和と、OutputPageとを比較する。そして、この両値が同値である場合にDL生成処理する。
図7の処理においては、印刷データの1ページ目のスレッドB1およびB2の処理は、図6の1ページ目の処理と同様である。印刷データの2ページ目の言語解釈処理を開始し、startjobを検知すると、スレッドB1およびスレッドB2は、CachePageへPageCountの値を設定してから、PageCountを「0」へリセットする。図7の例では、startjobを検知したタイミングでは、CachePageへは「1」が設定される。
スレッドB1では、startjobを検知する、印刷データの2ページ目の処理時には、ページ並列制御部200からOutputPageとして再度「2」が通知される。図7の処理では、PageCountとCachePageとの和を用いる処理を行なう。印刷データの2ページ目の言語解釈処理後はPageCountがインクリメントされるので、この結果、PageCountとCachePageとの和は、「1」+「1」=「2」となり、OutputPageと同値となる。よって、スレッドB1は、印刷データの2ページ目のDL生成処理を実行することになる。この結果、印刷データの2ページ目が記録用紙に出力されることになる。
一方の、スレッドB2の処理を検討する。スレッドB2では、startjobを検知する印刷データの2ページ目の処理時は、ページ並列制御部200からはOutputPageとして再度「3」が通知される。スレッドB2における、印刷データの2ページ目の言語解釈処理後ではやはりPageCountがインクリメントされるので、PageCountとCachePageとの和は「1」+「1」=「2」となり、OutputPageとは等しくない。よって、スレッドB2では、印刷データの2ページ目のDL生成処理は行わず、ページスキップ処理する。スレッドB2では、続いて印刷データの3ページ目の処理を継続し、言語解釈処理が終了すると、PageCountは「2」となり、CachePageとの和は「2」+「1」=「3」となり、OutputPageと等しくなる。よって、DL生成処理を実行する。このように、PageCountとCachePageの和がOutputPageと等しくなる場合をDL生成処理の実行条件することで、OutputPageとPageCountとの値の差異をなくし、正常にページ並列処理を実行することができる。
<ページ並列制御部の制御フロー>
次に図8を用いて、ページ並列制御部200における、ページ並列処理のページ制御について説明する。ページ並列制御部200は、ページ制御のためのページカウンタ値としてOutputPageをページ並列制御部200自身で管理している。このOutputPageはPSインタプリタにDL生成を実行させる処理対象のページ番号を通知するために用いられる。このOutputPageの値は、印刷データのページ番号を示した値であり、ページリセットコマンドがあった場合でもその値を保持しているので、いわばオリジナルのページ番号とも言える。印刷データがNetworkI/F104において受信されると、中央演算装置101により、図8に示す処理が開始される。図8に示す処理は、主記憶装置102に展開されたプログラムを中央演算装置101が実行することで実現される。中央演算装置101は、プログラムの実行に従って、ページ並列制御部200として機能する。
まず、ステップS800においてページ並列制御部200は、印刷データを受信する。
次に、ステップS801においてページ並列制御部200は、初期化処理としてOutputPageに0を設定する。
次にステップS802においてページ並列制御部200は、PSインタプリタとして機能するPSインタプリタスレッドを起動する。ここでは、図7で示すように、スレッドB1、B2をPSインタプリタ201として起動する。
次にステップS803においてページ並列制御部200は、ステップS802にて起動したPSインタプリタ201からの通信を待つ。ここでは、PSインタプリタ201からの生成ページの問い合わせか、DL生成完了通知のどちらかの通信を待っている。このどちらかの通信をPSインタプリタ201のスレッドから受信すると、ステップS804へ処理を進める。
次にステップS804においてページ並列制御部200は、ステップS803においてPSインタプリタ201から受信した通信が、DL生成の処理対象ページの問い合わせか否かを判定する。DL生成の処理対象ページの問い合わせの場合は、ステップS805へ処理を進める。処理対象ページの問い合わせではなかった場合は、ステップS808へ処理を進める。
次に、ステップS805においてページ並列制御部200は、問い合わせを受けたスレッドに対して通知したOutputPageのDL生成処理が完了しているか否かを判定する。ページ並列制御部200は、スレッドごとにDL生成の処理対象ページを割り当てており、どのスレッドにどの処理対象ページを割り当てたかを管理している。具体的には、問い合わせを受けたスレッドと、そのスレッドに対して通知したOutputPageの値とを関連付けて管理している。問い合わせを受けたスレッドに対して通知したOutputPageに対するDL生成完了通知をそのスレッドから受け取っていない場合には、ステップS807に進む。問い合わせを受けたスレッドに対して通知したOutputPageに対するDL生成完了通知をそのスレッドから受け取っている場合には、ステップS806に進む。なお、このステップS805の処理は、スレッドに対して割り当てたOutputPageがない場合、すなわち、最初のページの処理の場合には、S806に進むものとする。
ステップS806において、ページ並列制御部200は、OutputPageに1を加算し、次のDL生成の処理対象ページとして通知する値を更新する。
ステップS807においてページ並列制御部200は、処理対象ページの問い合わせを受けたPSインタプリタ201へ、OutputPageの値を通知する。その後、ステップS803へ処理を戻す。
ステップS804において処理対象ページの問い合わせではないと判定した場合、ステップS808においてページ並列制御部200は、ステップS803においてPSインタプリタ201から受信した通信が、DL生成完了通知であるかどうかを判定する。DL生成完了通知だった場合は、ステップS809へ処理をすすめる。DL生成完了通知でなかった場合はステップS803へ戻り処理を繰り返す。
次にステップS809において、ページ並列制御部200は、生成されたDLをバッファ204のバッファ領域にスプールする。各スレッドによってDL生成がなされる順序が前後することがあるので、生成されたDLを一旦バッファ領域にスプールする。
次に、ステップS810においてページ並列制御部200は、ステップS803においてPSインタプリタ201から受信したDL生成完了通知のページ番号までの全DL生成が完了しているか、判定する。全DL生成が完了している場合は、ステップS811へ処理を進める。全DL生成が完了していない場合は、ステップS803へ戻り、処理を繰り返す。
次にステップS811において、ページ並列制御部200は、バッファ204にスプールされている全DLをページ順に従い、レンダリング部205へ転送する。
次にステップS812においてページ並列制御部200は、印刷データに含まれる全ページ分のDLを転送したか判定する。この判定は、例えばステップS802で立ち上げたスレッドB1およびB2の両方が停止しているか否かで判定することが可能である。印刷データに含まれる全ページ分のDLを転送した場合は、ステップS813へ進む。印刷データに含まれる全ページ分のDLを転送できていない場合は、ステップS803へ戻り、処理を繰り返す。
次にステップS813においてページ並列制御部200は、自身のスレッドであるスレッドAを停止し、本処理を終了する。
以上の処理により、ページ並列制御部200による、ページ並列処理のページ制御が実施される。
<PSインタプリタの並列DL生成制御のフロー>
次に図9のフローチャートを用いて、PSインタプリタ201のスレッドB1、B2における並列DL生成制御のフローについて説明する。これらのスレッドは、図8のステップS802の処理においてページ並列制御部200によって起動されるスレッドであり、図9の処理は、ページ並列制御部200によってPSインタプリタ201としてスレッドが起動された後の各スレッドの処理である。まず、図9の処理の全体的な概要を説明する。
PSインタプリタ201は自身が管理するページカウンタとして、PageCount、CachePage、myOutputPageの3つのカウンタ値を持っている。PageCountは既に説明したように、PSインタプリタ201が言語解釈を完了したページ数を示す値を格納するカウンタである。CachePageはstartjobなどのPageCountをリセットするPDLコマンドを検知した時点の言語解釈済みのページ数の値(すなわち、その時点のPageCountの値)を格納するカウンタ値である。なお、より具体的には、CachePageに格納されている値にPageCountの値を加算することで、CachePageに格納されている値を更新するカウンタである。myOutputPageは図8で説明したOutputPageがページ並列制御部200から通知された時にOutputPageが示す値を内部的に格納するカウンタ値である。これらのカウンタのうち、CachePageはページリセットコマンドを検知した場合であってもその値を保持し続けるカウンタである。
PSインタプリタ201はページ並列制御部200から処理対象とするページ番号(OutputPage)を受け取ると、myOutputPageにその値を格納して、処理を開始する。そして、PageCountとCachePageとの和がmyOutputPageよりも小さい間は、PageCountをカウントアップしながら、言語解釈処理のみ(すなわちページスキップ処理)を進める。PageCountとCachePageとの和がmyOutputPageと等しくなったとき、言語解釈とDL生成(すなわちページ描画処理)を実行する。DL生成が終わると、ページ並列制御部200へDL生成したページ番号とともに完了通知を行い、次の処理対象となるページ番号をページ並列制御部200へ問い合わせる。
PSインタプリタ201は、startjobを検知すると、CachePageへPageCountとCachePageとの和を設定し、PageCountの値を「0」へリセットする。その後、ページ並列制御部200へ再度、処理対象ページ番号を問い合わせ、処理を繰り返す。PageCountの値はstartjobが検知されるとリセットされてしまうが、リセット前のPageCountの値はCachePageで保持されている。従って、PSインタプリタ201は、処理中のページをDL生成するかを判定する際に、PageCountとCachePageとの和を用いることでページ辻褄合わせが可能となる。
以下、図9のフローチャートの説明を行なう。図5のステップS802にて、ページ並列制御部200からスレッドB1、B2が立ち上げられると、本処理が開始される。
まずステップS901において、PSインタプリタ201は、初期化処理として、ページカウンタ値のCachePageを0に設定する。ステップS902において、PSインタプリタ201は、初期化処理として、ページカウンタ値のmyOutputPageを0に設定する。ステップS903において、PSインタプリタ201は、初期化処理として、ページカウンタ値のPageCountを0に設定する。
次にステップS904において、PSインタプリタ201は、ページ並列制御部200にDL生成の処理対象ページのページ番号を問い合わせる。ページ並列制御部200から、処理対象ページのページ番号(OutputPage)が通知されると、ステップS905へ処理を進める。
次にステップS905においてPSインタプリタ201は、内部ページカウンタ値のmyOutputPageに、ステップS904で通知された生成ページのページ番号の値を格納する。
次にステップS906においてPSインタプリタ201は、PDL言語解釈部202により印刷データの言語解釈処理を実行する。この言語解釈処理は、ページリセットコマンドまたはページ区切りコマンドを検知するまで実行する。
次にステップS907においてPSインタプリタ201は、ステップS906において、言語解釈した結果、startjobなどのPageCountをリセットするページリセットコマンドを検知したか判定する。検知していない場合はステップS909へ処理を進める。検知した場合は、ステップS908へ処理を進める。
次にステップS908においてPSインタプリタ201は、CachePageの値を更新する。前述の通り、startjobを検知すると内部的なページ数制御値であるPageCountはリセットしなければならない。本実施例では、このリセットを考慮して、ここでリセット前のPageCountの値をCachePageへ格納しておくことで、ページ並列制御部200において管理しているOutputPageの値との差異を無くす。なお、ページリセットコマンドが印刷データの中に複数回含まれている場合もあるので、ステップS908の処理では、それまでのCachePageの値にPageCountの値を加算した値をCachePageの値として更新する処理を行なう。そして、ステップS902に処理を戻す。
一方、ステップS909においてPSインタプリタ201は、言語解釈した結果、ページ区切りコマンドを検知したか判定する。ページ区切りコマンドとは、PSではshowpageやerasepage、copypageなどのコマンド(オペレーター)が該当する。ページ区切りコマンドを検知した場合は、ステップS910へ処理を進める。ページ区切りコマンドを検知しなかった場合、PDLデータの終端に達したことになるため、処理を終了する。
ステップS910においてPSインタプリタ201は、PageCountの値に1を加算して、カウンタ値を更新する。
ステップS911においてPSインタプリタ201は、myOutputPageの値がPageCountとCachePageとの和と等しいか判定する。このステップS911の処理では、ステップS906の処理を通じて言語解釈が終了したページがページ並列制御部200から通知されたDL生成の処理対象ページ(OutputPage)であるかを判定している。等しい場合は、ステップS906の処理で言語解釈が終了したページはDL生成の処理対象ページであるとして、ステップS912へ処理を進める。等しくない場合は、ステップS906へ戻り、処理を繰り返す。
次にステップS912においてPSインタプリタ201は、DL生成部203を用いてステップS906の処理で言語解釈が終了したページのDL生成処理を実行する。
次にステップS913においてPSインタプリタ201は、ページ並列制御部200にmyOutputPageのDL生成処理が完了したことを通知する。
以上の処理により、PSインタプリタ201による、スレッドB1、B2における並列DL生成制御が実施される。
以上、これまで説明したように、本実施例におけるマルチコアシステムを採用した中央演算装置101を備える画像形成装置は、マルチスレッドで印刷処理を実行する。この印刷処理の実行時にページリセットを指示するPDLコマンドを検知すると、内部のキャッシュ値へリセット前のページカウンタ値を格納して、以後の処理を継続する。内部ページカウンタ値リセット後、DL生成するか判定する際に、このキャッシュ値を判定処理に利用することで、ページ並列制御部200とPSインタプリタ201との内部ページカウンタ値の差異を無くすことができる。これにより、ページリセットコマンドを含む印刷データを処理する場合に、ページ制御の不整合を回避することができる。また、内部ページカウンタ値自体は、ページリセットコマンドに応じてリセットされるので、例えば同一ジョブ内で同じページ番号を複数用いて印刷するようなケースにも対応することができる。
<変形例>
なお、実施例1では、CachePageをPSインタプリタ201がそれぞれ保持し、ページ数の辻褄合わせをしている例を説明した。変形例としては、このCachPageに相当するカウンタ値をページ並列制御部200が保持し、ページ並列制御部200側の制御によって辻褄合わせをしてもよい。その場合は、PSインタプリタ201がstartjobを検知した時点のPageCountの値をページ並列制御部200に通知する。そして、ページ並列制御部200では、PSインタプリタ201から通知されたPageCountの値をページ並列制御部200自身が管理するCachePageに設定する。その際、ページ並列制御部200は、PageCountの値の通知元のPSインタプリタ201に対して通知していたOutputPageをリセットする。すなわち、PageCountの値の通知元のPSインタプリタ201からの再度の処理対象ページの問い合わせの処理を受け取ると、ページ並列制御部200は、OutputPageの値からCachePageの値を引いた値を通知する。PSインタプリタ201側では、PSインタプリタ201がstartjobを検知した時点のPageCountの値をページ並列制御部200に通知する処理を行なうだけでよい。すなわち、PSインタプリタ201側では、PageCount値とOutputPageとを比較して一致したページに対してDL生成処理を行なうという処理をすればよい。このように、ページ並列制御部200側の制御によってもページ並列制御を行なった際の不整合を回避することが可能である。
<実施例2>
実施例1はページリセットコマンドを検知した場合に生じるページ並列制御部200とPDL言語解釈部202と内部ページカウンタ値の差異そのものをキャッシュ値として保持しておく例を説明した。そして、ページ並列制御部200または、PDL言語解釈部202で辻褄合わせをする処理を説明した。本実施例では、両者のページカウンタ値の差異ではなく、ページリセットコマンドの指定を無視して、総ページ数をカウントするページカウンタ値を設け、その値をDL生成するか否かの判定に用いる処理を説明する。すなわち、実施例2においては、キャッシュ値ではなく、ページリセットコマンドの指定に影響されない、総ページ数をカウントするページカウンタを用いる例を説明する。この総ページ数をカウントするカウンタ値をTotalPageとして説明する。
<ページ並列処理のシーケンス>
図10は、実施例2における簡易シーケンス図である。本実施例でも図3で説明したような印刷データと同様に、startjobが1ページ目と2ページ目の間に含まれている例を用いて説明する。スレッドB1、B2へは、それぞれページ並列制御部200から、「2」「1」がOutputPageとして通知される。各スレッドのPSインタプリタ201はそれぞれOutputPageで指定されたページのDL生成を行うまで、言語解釈処理を進める。本実施例においては、現在処理中のページのDL生成をするか否かを判定する際は、OutputPageに対してPSインタプリタが自身が管理するTotalPageを比較して、等しい場合にDL生成をPSインタプリタが実行する。TotalPageはPageCountと同様、言語解釈処理が完了する度にインクリメントされるが、startjobなどのページリセットコマンドが検知されても、カウンタ値はリセットされない。
スレッドB1では、ページ並列制御部200からOutputPageが「2」で通知される。1ページ目の言語解釈処理が終わると、TotalPageとPageCountとの両方ともをインクリメントして、それぞれ「1」「1」とする。DL生成するか否か判定するため、OutputPageとTotalPageとを比較すると、同値ではないため、スレッドB1は1ページ目のDL生成は行わない。startjobは1ページ目と2ページ目の間に存在するため、スレッドB1は、2ページ目の処理を開始する前に、PageCountの値をリセットするが、TotalPageの値はリセットしない。そして、2ページ目の言語解釈処理を進め、PageCountとTotalPageをインクリメントして、それぞれ「1」、「2」とする。このとき、ページ並列制御部200からは再度「2」が通知され、スレッドB1では、TotalPageが「2」であり、同値であるので、DL生成処理を行う。
一方のスレッドB2では、ページ並列制御部200からOutputPageが「1」で通知される。1ページ目の言語解釈処理が終わると、TotalPageとPageCountをインクリメントして、それぞれ「1」「1」とする。DL生成するか判定するため、OutputPageとTotalPageを比較すると、同値であるため1ページ目のDL生成を実行する。startjobは1ページ目と2ページ目の間に存在するため、2ページ目の処理を開始する前に、スレッドB2においてもPageCountの値をリセットするが、TotalPageの値はリセットしない。そして、2ページ目の言語解釈処理を進め、PageCountとTotalPageをインクリメントして、それぞれ「1」、「2」とする。このとき、ページ並列制御部200からは「3」が通知されているが、TotalPageは「2」であり、OutputPageと同値とならない為、DL生成は行わない(ページスキップ処理)。続けて、3ページ目の言語解釈処理を開始する。3ページ目の言語解釈処理が完了すると、TotalPageとPageCountの値をともにインクリメントして、それぞれ「2」、「3」とする。ここでOutputPageとTotalPageを比較すると同値となるため、DL生成を実行する。
このようにページリセットコマンドに影響されないTotalPageの値がOutputPageと等しくなる場合をDL生成処理の実行条件することで、正常にページ並列処理を実行することができる。
<PSインタプリタの並列DL生成制御のフロー>
次に図11のフローチャートを用いて、実施例2のPSインタプリタ201のスレッドB1、B2における並列DL生成制御のフローについて説明する。
PSインタプリタ201は内部ページカウンタとして、PageCount、TotalPage、myOutputPageの3つのカウンタ値を持っている。PageCountとMyOutputPageは実施例1と同様である。TotalPageはstartjobなどのPageCountをリセットするPDLコマンドに影響されない、言語解釈済みの総ページ数の値を格納するカウンタ値である。
PSインタプリタ201はページ並列制御部200から処理対象とするページ数を受け取ると、myOutputPageに値を格納して、処理を開始する。TotalPageがmyOutputPageよりも小さい間は、PageCountとTotalPageをカウントアップしながら、言語解釈処理のみ(ページスキップ処理)を進める。TotalPageがmyOutputPageと等しくなったとき言語解釈とDL生成(ページ描画処理)を実行する。DL生成が終わると、ページ並列制御部200へDL生成したページ番号とともに完了通知を行い、次の処理対象となるページ番号をページ並列制御部200へ問い合わせる。
startjobを検知すると、PageCountの値は「0」へリセットするが、TotalPageはそのままの値を保持する。その後、ページ並列制御部200へ再度生成ページ数を問い合わせ、処理を繰り返す。PageCountの値はstartjobが検知されるとリセットされてしまうが、このリセット処理に関係なく総ページ数をTotalPageで管理している。そのため、処理中のページをDL生成するか判定する際に、TotalPageの値を用いることでリセット処理に影響を受けないページ制御が可能となる。図11の処理も実施例1で説明したPSインタプリタの処理と同様に、図5のステップS802にて、ページ並列制御部200からスレッドB1、B2が起動されると、処理が開始される。
まずステップS1101においてPSインタプリタ201は、初期化処理として、内部ページカウンタ値のTotalPageを0に設定する。ステップS1102においてPSインタプリタ201は、初期化処理として、内部ページカウンタ値のmyOutputPageを0に設定する。ステップS1103においてPSインタプリタ201は、初期化処理として、内部ページカウンタ値のPageCountを0に設定する。
その後、ステップS1104からステップS1107までの処理は、図9のステップS904からステップS907までの処理と同様である。
次にステップS1107においてPSインタプリタ201は、ステップS1106において、言語解釈した結果、startjobなどのPageCountをリセットするコマンドを検知したか判定する。検知していない場合はステップS1108へ処理を進める。検知した場合は、ステップS1102へ戻り、処理を繰り返す。
次にステップS1108においてPSインタプリタ201は、言語解釈した結果、ページ区切りコマンドを検知したか判定する。ページ区切りコマンドを検知した場合は、ステップS1109へ処理を進める。ページ区切りコマンドを検知しなかった場合、PDLデータの終端に達したことになるため、処理を終了する。
次にステップS1109においてPSインタプリタ201は、TotalPageの値に1を加算して、カウンタ値を更新する。
次にステップS1110においてPSインタプリタ201は、PageCountの値に1を加算して、カウンタ値を更新する。
次にステップS1111においてPSインタプリタ201は、myOutputPageの値がTotalPageの値と等しいか判定する。等しい場合は、ステップS1106で言語解釈をした処理中のページはDL生成の処理対象ページであるとして、ステップS1112へ処理を進める。等しくない場合は、ステップS1104へ戻り、処理を繰り返す。
次にステップS1112とS1113の処理は、図9のステップS912とS913と同じ処理であるので、説明を省略する。
以上の処理により、PSインタプリタ201による、スレッドB1、B2における並列DL生成制御が実施される。
以上、本実施例においては、マルチスレッドで印刷処理を実行時にページリセットを指示するPDLコマンドを検知した場合、内部のページカウンタ値をリセットする。一方で、総ページ数は別のカウンタ値で保持し、以後の処理を継続する。DL生成するか判定する際に、この総ページ数のカウンタ値を用いて判定処理することで、ページ並列制御部200とPDL言語解釈部202の内部ページカウンタ値の差異を気にすることなく処理を継続することができる。従って、印刷データの不整合を回避することができる。
<その他の実施例>
なお、上記の各実施例では、ページリセットコマンドとして、PSのstartjobオペレーターを例として挙げた。しかし、本発明の適用範囲は、このオペレーターに限定されるものではなく、例えば、PSのexitserverコマンド(オペレーター)でもよい。また、他のPDLで同様の意味をもつコマンドに対しても適用可能である。
また、上記の各実施例では、ページ並列制御部200とPSインタプリタ201とを区別する形態を説明したが、いずれかのPSインタプリタ内にページ並列制御部が行なっている機能を持たせることも可能である。
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。

Claims (14)

  1. 印刷データを解釈する解釈部と前記解釈部による解釈に基づいて前記印刷データの中間データを生成可能な生成部と、前記解釈部での解釈済みのページ数を保持する第一の保持部とをそれぞれ有する複数の解釈手段と、
    中間データを生成すべきページ番号を前記複数の解釈手段のうちの対応する解釈手段に通知する通知手段と
    を有する印刷データ処理装置であって、
    前記解釈手段は、
    前記第一の保持部とは異なる種別のページ数を保持する第二の保持部と、
    これまで解釈した内容を無効化するコマンドを検知した場合、前記無効化するコマンドを検知した時点において前記第一の保持部に保持しているページ数を前記第二の保持部に保持しているページ数に加算することで前記第二の保持部に保持しているページ数を更新し、前記第一の保持部に保持している前記解釈済みのページ数をリセットする第一の処理部と、
    前記第一の保持部に保持しているページ数と前記第二の保持部に保持しているページ数との和が、前記通知手段によって通知されたページ番号と一致する場合、前記生成部に前記中間データの生成を実行させる第二の処理部と
    をさらに有することを特徴とする印刷データ処理装置。
  2. 印刷データを解釈する解釈部と、前記解釈部による解釈に基づいて前記印刷データの中間データを生成可能な生成部と、前記解釈部での解釈済みのページ数を保持する第一の保持部とをそれぞれ有する複数の解釈手段と、
    中間データを生成すべきページ番号を前記複数の解釈手段のうちの対応する解釈手段に通知する通知手段と
    を有する印刷データ処理装置であって、
    前記解釈手段は、
    前記解釈部での解釈済みの総ページ数を保持する第二の保持部と、
    これまで解釈した内容を無効化するコマンドを検知した場合、前記第一の保持部に保持している前記解釈済みのページ数をリセットする第一の処理部と、
    前記第二の保持部に保持しているページ数が、前記通知手段によって通知されたページ番号と一致する場合、前記生成部に前記中間データの生成を実行させる第二の処理部とをさらに有することを特徴とする印刷データ処理装置。
  3. 前記第二の保持部に保持されているページ数は、前記無効化するコマンドを検知した場合にリセットされないことを特徴とする請求項1または2に記載の印刷データ処理装置。
  4. 印刷データを解釈する解釈部と、前記解釈部による解釈に基づいて前記印刷データの中間データを生成可能な生成部と、前記解釈部での解釈済みのページ数を保持する第一の保持部とをそれぞれ有する複数の解釈手段と、
    中間データを生成すべきページ番号を前記複数の解釈手段のうちの対応する解釈手段に通知する通知手段と
    を有する印刷データ処理装置であって、
    前記解釈手段は、
    これまで解釈した内容を無効化するコマンドを検知した場合、前記第一の保持部に保持している前記解釈済みのページ数を前記通知手段に通知し、リセットする第一の処理部と、前記第一の保持部に保持しているページ数が、前記通知手段によって通知されたページ番号と一致する場合、前記生成部に前記中間データの生成を実行させる第二の処理部とをさらに有し、
    前記通知手段は、前記解釈手段から通知されたページ数を、中間データを生成すべきページ番号から差し引いた値を前記解釈手段に通知する第三の処理部を有することを特徴とする印刷データ処理装置。
  5. 前記生成部は、前記第一の保持部に保持されている解釈済みページ数を、対応するページのページ番号として出力する中間データを生成することを特徴とする請求項1から4のいずれか一項に記載の印刷データ処理装置。
  6. 前記通知手段は、前記複数の解釈手段に対してそれぞれ異なるページ番号を通知することを特徴とする請求項1から5のいずれか一項に記載の印刷データ処理装置。
  7. 前記解釈手段は、前記解釈部に前記印刷データの全てのページのデータを解釈させることを特徴とする請求項1から6のいずれか一項に記載の印刷データ処理装置。
  8. 前記印刷データは、ページ非独立な言語のPDLデータであることを特徴とする請求項1から7のいずれか一項に記載の印刷データ処理装置。
  9. 前記ページ非独立な言語はPostScriptであり、前記無効化するコマンドは、startjobコマンドまたはexitserverコマンドであることを特徴とする請求項8に記載の印刷データ処理装置。
  10. 前記解釈手段および前記通知手段は、スレッドとして起動されることを特徴とする請求項1から9のいずれか一項に記載の印刷データ処理装置。
  11. 印刷データを解釈する解釈部と、前記解釈部による解釈に基づいて前記印刷データの中間データを生成可能な生成部と、前記解釈部での解釈済みのページ数を保持する第一の保持部と、前記第一の保持部とは異なる種別のページ数を保持する第二の保持部とをそれぞれ有する複数の解釈手段と、
    中間データを生成すべきページ番号を前記複数の解釈手段のうちの対応する解釈手段に通知する通知手段と
    を有する印刷データ処理装置における印刷データ処理方法であって、
    前記解釈手段に、
    これまで解釈した内容を無効化するコマンドを検知した場合、前記無効化するコマンドを検知した時点において前記第一の保持部に保持しているページ数を前記第二の保持部に保持しているページ数に加算することで前記第二の保持部に保持しているページ数を更新し、前記第一の保持部に保持している前記解釈済みのページ数をリセットする第一の処理ステップと、
    前記第一の保持部に保持しているページ数と前記第二の保持部に保持しているページ数との和が、前記通知手段によって通知されたページ番号と一致する場合、前記生成部に前記中間データの生成を実行させる第二の処理ステップと
    を実行することを特徴とする印刷データ処理方法。
  12. 印刷データを解釈する解釈部と、
    前記解釈部による解釈に基づいて前記印刷データの中間データを生成可能な生成部と、
    前記解釈部での解釈済みのページ数を保持する第一の保持部と、前記解釈部での解釈済みの総ページ数を保持する第二の保持部とをそれぞれ有する複数の解釈手段と、
    中間データを生成すべきページ番号を前記複数の解釈手段のうちの対応する解釈手段に通知する通知手段と
    を有する印刷データ処理装置における印刷データ処理方法であって、
    前記解釈手段は、
    これまで解釈した内容を無効化するコマンドを検知した場合、前記第一の保持部に保持している前記解釈済みのページ数をリセットする第一の処理ステップと、
    前記第二の保持部に保持しているページ数が、前記通知手段によって通知されたページ番号と一致する場合、前記生成部に前記中間データの生成を実行させる第二の処理ステップと
    を実行することを特徴とする印刷データ処理方法。
  13. 印刷データを解釈する解釈部と、
    前記解釈部による解釈に基づいて前記印刷データの中間データを生成可能な生成部と、前記解釈部での解釈済みのページ数を保持する第一の保持部とをそれぞれ有する複数の解釈手段と、
    中間データを生成すべきページ番号を前記複数の解釈手段のうちの対応する解釈手段に通知する通知手段と
    を有する印刷データ処理装置における印刷データ処理方法であって、
    前記解釈手段は、
    これまで解釈した内容を無効化するコマンドを検知した場合、前記第一の保持部に保持している前記解釈済みのページ数を前記通知手段に通知し、リセットする第一の処理ステップと、
    前記第一の保持部に保持しているページ数が、前記通知手段によって通知されたページ番号と一致する場合、前記生成部に前記中間データの生成を実行させる第二の処理ステップと
    を実行し、
    前記通知手段は、前記解釈手段から通知されたページ数を、中間データを生成すべきページ番号から差し引いた値を前記解釈手段に通知する第三の処理ステップを実行することを特徴とする印刷データ処理方法。
  14. コンピュータを、請求項1から10のいずれか一項に記載の印刷データ処理装置の各手段として機能させるためのプログラム。
JP2016006673A 2016-01-15 2016-01-15 印刷データ処理装置、印刷データ処理方法、およびプログラム Active JP6666036B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2016006673A JP6666036B2 (ja) 2016-01-15 2016-01-15 印刷データ処理装置、印刷データ処理方法、およびプログラム
EP16206914.0A EP3193249B1 (en) 2016-01-15 2016-12-27 Print data processing apparatus, print data processing method, and program
US15/391,028 US10242299B2 (en) 2016-01-15 2016-12-27 Print data processing apparatus
KR1020170004797A KR102145809B1 (ko) 2016-01-15 2017-01-12 인쇄 데이터 처리 장치, 인쇄 데이터 처리 방법, 및 저장 매체
US16/267,158 US10885409B2 (en) 2016-01-15 2019-02-04 Print data processing apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016006673A JP6666036B2 (ja) 2016-01-15 2016-01-15 印刷データ処理装置、印刷データ処理方法、およびプログラム

Publications (3)

Publication Number Publication Date
JP2017124589A JP2017124589A (ja) 2017-07-20
JP2017124589A5 JP2017124589A5 (ja) 2019-01-31
JP6666036B2 true JP6666036B2 (ja) 2020-03-13

Family

ID=57755056

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016006673A Active JP6666036B2 (ja) 2016-01-15 2016-01-15 印刷データ処理装置、印刷データ処理方法、およびプログラム

Country Status (4)

Country Link
US (2) US10242299B2 (ja)
EP (1) EP3193249B1 (ja)
JP (1) JP6666036B2 (ja)
KR (1) KR102145809B1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6996884B2 (ja) * 2017-07-06 2022-01-17 株式会社東芝 画像処理装置、画像処理方法及びプログラム
KR101996786B1 (ko) 2019-04-18 2019-07-04 유용호 데이터 다중 병렬 처리를 통한 원격 프린트 콘트롤 시스템

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5393343B2 (ja) 2009-08-21 2014-01-22 キヤノン株式会社 印刷データ処理装置、印刷データ処理方法、プログラム
JP5586934B2 (ja) * 2009-12-16 2014-09-10 キヤノン株式会社 情報処理方法、情報処理装置、及びコンピュータプログラム
JP5847460B2 (ja) 2011-07-01 2016-01-20 キヤノン株式会社 画像形成装置、データ処理方法及びプログラム
JP4905604B1 (ja) * 2011-09-26 2012-03-28 富士ゼロックス株式会社 印刷データ処理システム及びプログラム
JP6341628B2 (ja) 2012-05-10 2018-06-13 キヤノン株式会社 情報処理装置、情報処理方法、情報処理システム、プログラム

Also Published As

Publication number Publication date
KR20170085973A (ko) 2017-07-25
US20190171918A1 (en) 2019-06-06
EP3193249A1 (en) 2017-07-19
US10885409B2 (en) 2021-01-05
US10242299B2 (en) 2019-03-26
KR102145809B1 (ko) 2020-08-19
US20170206442A1 (en) 2017-07-20
JP2017124589A (ja) 2017-07-20
EP3193249B1 (en) 2020-08-12

Similar Documents

Publication Publication Date Title
JP5273420B1 (ja) 印刷制御装置、画像形成システムおよびプログラム
US10534986B2 (en) Printing apparatus having interpreters interpreting print data, printing method, and storage medium
JP6666036B2 (ja) 印刷データ処理装置、印刷データ処理方法、およびプログラム
US8767247B2 (en) Print data generation device, print data generation method and computer-readable medium for controlling rasterization processing
JP2013001059A (ja) 画像形成装置、画像形成装置の制御方法、及びプログラム
KR100657331B1 (ko) 멀티 프로세서를 채용한 화상형성장치 및 이를 이용한화상형성방법
JP6188735B2 (ja) 印刷装置、印刷装置の制御方法、およびプログラム
JP2011167857A (ja) 画像形成装置、画像形成方法、および画像形成プログラム
JP5968373B2 (ja) 印刷装置、情報処理方法及びプログラム
JP5232728B2 (ja) 画像形成装置
JP5847460B2 (ja) 画像形成装置、データ処理方法及びプログラム
US10262247B2 (en) Image forming apparatus for converting print data into intermediate data, method for controlling image forming apparatus, and storage medium
US9870184B2 (en) Information processing apparatus combining multiple filters, recording medium, and control method
JP2017030312A (ja) 画像出力装置とその制御方法、及びプログラム
JP6415487B2 (ja) 画像処理装置及び画像処理方法
JP5150214B2 (ja) 画像形成装置
JP2012000778A (ja) 画像処理装置及びプログラム
JP6818563B2 (ja) 情報処理システム、情報処理方法、およびプログラム
JP2016021137A (ja) 駆動用プログラム、画像形成装置の駆動方法及び情報処理装置
JP2012221195A (ja) 画像処理システム
JP2015116703A (ja) 画像形成装置及び画像形成方法
JP2005149316A (ja) 情報処理装置、情報処理方法、プログラム、記録媒体及び印刷装置

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181212

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181212

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190924

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190925

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191125

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20191210

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200108

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200121

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200218

R151 Written notification of patent or utility model registration

Ref document number: 6666036

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151