(57)【要約】【課題】複数のポートが割り当てられたプリントキューを作成されている情報処理装置にてプリンタドライバを利用して一連のデータを並列的に処理する場合に、データ処理の前後で順序を維持すること。【解決手段】帳票アプリ11の印刷処理部1101は、それぞれに順番を示すインデックスが付加された複数のデータを、複数のポートが割り当てられ対応するプリンタドライバでの複数のデータに対する処理が並列で行われる機能が有効化されたプリントキューを指定して出力指示する（S101〜S104）。帳票アプリ11の受信処理部1102は、前記プリントキューに対応するプリンタドライバ（ＰＤＦｗ12）からインデックスがそれぞれ付加された複数のデータを受信し（S108）、受信した複数のデータにそれぞれ付加された前記順番を示す情報に従い、該複数のデータを提供する（S109〜S111）。【選択図】図５
2018109812.tif 000002
【特許請求の範囲】
【請求項１】
複数のポートが割り当てられ、対応するプリンタドライバでの複数のデータに対する処理が並列で行われる機能が有効化されたプリントキューが作成されている情報処理装置であって、
複数のデータを管理する管理手段と、
それぞれに順番を示す情報が付加された複数のデータを、前記プリントキューを指定して出力指示する投入手段と、
前記プリントキューに対応するプリンタドライバから前記順番を示す情報がそれぞれ付加された複数のデータを受信する受信手段と、
前記受信手段で受信した複数のデータにそれぞれ付加された前記順番を示す情報に従い、該複数のデータを提供する提供手段と、
を有することを特徴とする情報処理装置。
【請求項２】
前記プリンタドライバでのデータに対する処理は、フォーマット変換であることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記提供手段による前記複数のデータの提供の後、前記プリントキューの複数のデータに対する処理が並列で行われる機能を無効化する無効化手段を更に有することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
複数のポートが割り当てられ、対応するプリンタドライバでの複数のデータに対する処理が並列で行われる機能が有効化されたプリントキューが作成されている情報処理装置であって、
複数のデータを管理する管理手段と、
前記プリントキューを用いた複数のデータの出力をそれぞれ順番にアプリケーションプログラムに指示する指示手段と、
前記プリントキューに対応するプリンタドライバから、前記複数のデータのそれぞれの前記指示手段が前記アプリケーションプログラムに出力を指示したタイミングを示す情報と、前記処理が行われた後の複数のデータと、を受信する受信手段と、
前記タイミングを示す情報に基づき、前記受信手段で受信した複数のデータを前記順番に従い提供する提供手段と、
を有することを特徴とする情報処理装置。
【請求項５】
前記指示手段により前記アプリケーションプログラムに対して出力が指示された複数のデータは、前記アプリケーションプログラムにより、前記出力が指示されたタイミングを示す情報がそれぞれ付加され、前記プリントキューが指定されて出力指示され、
前記受信手段は、前記プリントキューに対応するプリンタドライバから、前記タイミングを示す情報がそれぞれ付加された複数のデータを受信することを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記指示手段は、前記複数のデータのいずれかの出力をアプリケーションプログラムに指示した後、該アプリケーションプログラムから前記プリントキューに新たな出力指示が投入された場合に、前記順番に従い次のデータの出力をアプリケーションプログラムに指示することを特徴とする請求項４又は５に記載の情報処理装置。
【請求項７】
前記プリンタドライバでのデータに対する処理は、フォーマット変換であることを特徴とする請求項４〜６のいずれか１項に記載の情報処理装置。
【請求項８】
前記提供手段による前記複数のデータの提供の後、前記プリントキューの複数のデータに対する処理が並列で行われる機能を無効化する無効化手段を更に有することを特徴とする請求項４〜７のいずれか１項に記載の情報処理装置。
【請求項９】
複数のデータを管理する管理手段を有し、複数のポートが割り当てられ、対応するプリンタドライバでの複数のデータに対する処理が並列で行われる機能が有効化されたプリントキューが作成されている情報処理装置の制御方法であって、
それぞれに順番を示す情報が付加された複数のデータを、前記プリントキューを指定して出力指示する投入ステップと、
前記プリントキューに対応するプリンタドライバから前記順番を示す情報がそれぞれ付加された複数のデータを受信する受信ステップと、
前記受信ステップで受信した複数のデータにそれぞれ付加された前記順番を示す情報に従い、該複数のデータを提供する提供ステップと、
を有することを特徴とする情報処理装置の制御方法。
【請求項１０】
複数のデータを管理する管理手段を有し、複数のポートが割り当てられ、対応するプリンタドライバでの複数のデータに対する処理が並列で行われる機能が有効化されたプリントキューが作成されている情報処理装置の制御方法であって、
前記プリントキューを用いた複数のデータの出力をそれぞれ順番にアプリケーションプログラムに指示する指示ステップと、
前記プリントキューに対応するプリンタドライバから、前記複数のデータのそれぞれの前記指示ステップで前記アプリケーションプログラムに出力を指示したタイミングを示す情報と、前記処理が行われた後の複数のデータと、を受信する受信ステップと、
前記タイミングを示す情報に基づき、前記受信ステップで受信した複数のデータを前記順番に従い提供する提供ステップと、
を有することを特徴とする情報処理装置の制御方法。
【請求項１１】
コンピュータを、請求項１〜３のいずれか１項に記載の手段として機能させるためのプログラム。
【請求項１２】
コンピュータを、請求項４〜８のいずれか１項に記載の手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のポートが割り当てられ、対応するプリンタドライバでの複数のデータに対する処理が並列で行われる機能が有効化されたプリントキューを作成可能な情報処理装置の制御に関する。
【背景技術】
【０００２】
近年、プリンタドライバを利用した文書フォーマット変換技術が開発されている。例えば、帳票アプリケーションや文書管理アプリケーションにおいて、任意形式の文書データをＰＤＦデータに変換するため、ＧＤＩなどの印刷描画命令をＰＤＦデータとして出力するＰＤＦ変換プリンタドライバ（PDF Writer）を用いる方法が知られている。
【０００３】
これらアプリケーションでは、しばしば複数の一連の文書をまとめて変換することがあるが、通常、プリンタドライバはプリントキューにおいて逐次的にジョブを処理するため、全ての文書の変換が終わるまでに時間がかかってしまうことがある。
【０００４】
特許文献１には、プリントキューに対して２つ以上のポートを割り当てることが開示されている。この種の技術として、Microsoft（登録商標、以下省略）社のWindows（登録商標、以下省略）のプリンタプーリングが知られている。プリンタプーリングは、プリントキューに対して２つ以上のポートを割り当て、プリンタドライバの印刷を逐次的でなく並列的に処理する分散印刷を可能にする。プリンタプーリングが有効化されたプリントキューでは、割り当てられた複数のポート数と同じだけ、複数のジョブが同時にマルチスレッドで並列的に処理される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−２３６３３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、プリンタプーリングを有効化して並列処理を行うと、個々の文書データごとに処理負荷や計算資源の割り当てが異なるため、変換を開始した順番とは異なる順番で変換が終了してしまう場合がある。そのため、決まった順序で整列された一連の文書データが、ＰＤＦデータに変換されると順不同になってしまう可能性があるといった問題があった。なお、この問題は、プリンタドライバを利用した文書フォーマット変換に限定されるものではなく、プリンタドライバを利用した各種のデータ処理に共通の問題である。
【０００７】
本発明の目的は、上記の問題点を考慮して、複数のポートが割り当てられ、対応するプリンタドライバでの複数のデータに対する処理が並列で行われる機能が有効化されたプリントキューが作成されている情報処理装置にてプリンタドライバを利用して一連のデータを並列的に処理する場合に、データ処理の前後で順序を維持することができる仕組みを提供することである。
【課題を解決するための手段】
【０００８】
本発明は、複数のポートが割り当てられ、対応するプリンタドライバでの複数のデータに対する処理が並列で行われる機能が有効化されたプリントキューが作成されている情報処理装置であって、複数のデータを管理する管理手段と、それぞれに順番を示す情報が付加された複数のデータを、前記プリントキューを指定して出力指示する投入手段と、前記プリントキューに対応するプリンタドライバから前記順番を示す情報がそれぞれ付加された複数のデータを受信する受信手段と、前記受信手段で受信した複数のデータにそれぞれ付加された前記順番を示す情報に従い、該複数のデータを提供する提供手段と、を有することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、複数のポートが割り当てられ、対応するプリンタドライバでの複数のデータに対する処理が並列で行われる機能が有効化されたプリントキューが作成されている情報処理装置にてプリンタドライバを利用して一連のデータを並列的に処理する場合に、データ処理の前後で順序を維持することができる。
【図面の簡単な説明】
【００１０】
【図１】本実施例の印刷システムを適用可能な情報処理装置のハードウェア構成図
【図２】実施例１の文書フォーマット変換処理に関わるソフトウェア構成図
【図３】本実施例の印刷システムの挙動を説明する模式図
【図４】帳票データと変換後のＰＤＦデータの例を表す模式図
【図５】実施例１における文書フォーマット変換処理を例示するシーケンス図
【図６】本実施例のプリンタプーリング有効化処理を例示するフローチャート
【図７】本実施例のプリンタプーリング無効化処理を例示するフローチャート
【図８】本実施例におけるＰＤＦ＋ＣＭＤのデータ例を示す図
【図９】実施例２の文書フォーマット変換処理に関わるソフトウェア構成図
【図１０】実施例２における文書フォーマット変換処理を例示するシーケンス図
【図１１】実施例２のタイミング印刷処理を例示するフローチャート
【発明を実施するための形態】
【００１１】
以下、本発明を実施するための形態について図面を用いて説明する。
【実施例１】
【００１２】
図１は、本発明の一実施例を示す印刷システムを適用可能な情報処理装置のハードウェア構成を例示するブロック図である
【００１３】
図１において、ＰＣ10は、本実施例の印刷システムを適用可能なパーソナルコンピュータ等の情報処理装置である。ＰＣ10において、ＣＰＵ101は、ＲＯＭ103又は外部メモリ111からＲＡＭ102に読み出されたプログラムに従って、システムバス104に接続される各デバイスを総括的に制御する。ＲＡＭ102は、ＣＰＵ101の主メモリ、ワークエリア等としても機能する。
【００１４】
ＲＯＭ103は、各種プログラム及びデータを格納しており、例えば各種フォントを記憶するフォントＲＯＭ103a、ブートプログラムやＢＩＯＳ等を記憶するプログラムＲＯＭ103b、及び各種データを記憶するデータＲＯＭ103cに区分けして構成される。
【００１５】
ネットワークＩ／Ｆ105は、ＬＡＮ（ローカルエリアネットワーク）等のネットワークに接続され、通信処理を行なう。キーボードコントローラＩ／Ｆ106は、キーボード109や不図示のポインティングデバイス（マウスやタッチパネル等）からの入力を制御する。ディスプレイＩ／Ｆ107は、ディスプレイ110への表示処理を制御する。
【００１６】
外部メモリＩ／Ｆ108は、例えばハードディスク（ＨＤ）やソリッドステートドライブ（ＳＳＤ）等の外部メモリ111とのアクセスを制御する。外部メモリ111は、オペレーティングシステム（以下「ＯＳ」）112や、本実施例の印刷システムを担う各種ソフトウェア113、さらに、ユーザファイル、編集ファイル等の各種データ114等を記憶する記憶媒体として機能する。なお、ＯS112は、本実施例ではMicrosoft社のWindowsを使用するものとし、本実施例の印刷システムをWindows印刷システムとするが、本発明はこれらに限定されるものではない。
【００１７】
図２は、実施例１の文書フォーマット変換処理に関わるソフトウェアモジュールの構成を例示する図である。図２に示す各ソフトウェアモジュールは、ＣＰＵ101が外部メモリ111等に記憶されるプログラムをＲＡＭ102に読み出して実行することにより実現されるものである。
【００１８】
帳票アプリ11は、帳票データを作成するためのソフトウェア（帳票アプリケーションプログラム）である。さらに、帳票アプリ11は、帳票データを作成するだけでなく、帳票データをＰＤＦデータに変換するための機能も有している。帳票アプリ11は、印刷指示部1101、受信処理部1102を有する。
【００１９】
印刷指示部1101は、帳票データをＰＤＦデータに変換するため、帳票データをＧＤＩ（Graphics Device Interface）の描画命令としてＰＤＦｗ（PDF Writer）12に出力する。なお、受信処理部1102については後述する。
【００２０】
ＰＤＦｗ12は、プリンタドライバ形態の文書フォーマット変換ソフトであり、帳票アプリ11と共にＯS112上で利用可能となるよう組み込まれる。ＰＤＦｗ12は、帳票アプリ11から受信したＧＤＩをＰＤＦに変換し、さらにジョブに関する属性情報（ジョブ名、印刷ユーザー名、印刷開始時刻など）とともにコマンド化して、ポートモニター13に送信する。以下、属性情報とともにコマンド化されたＰＤＦを「ＰＤＦ＋ＣＭＤ」と表記する。ＰＤＦ＋ＣＭＤの詳細については後述する。
【００２１】
ポートモニター13は、ＯS112が提供する標準のＴＣＰ／ＩＰポートモニターであって、プリンタドライバが出力した印刷コマンドをＴＣＰ／ＩＰプロトコルでプリンタに送信するためのモジュールである。本実施例では、ポートモニター13は、外部のプリンタ装置ではなく、ＰＣ10に組み込まれた帳票アプリ11のコンポーネントである受信処理部1102に対し、ＰＤＦ＋ＣＭＤをループバックで送信するために用いられる。なお、標準のＴＣＰ／ＩＰポートモニターは、ＲＡＷプロトコルとＬＰＲプロトコルの２つのモードを備えるが、本実施例ではＲＡＷプロトコルを用いる。
受信処理部1102は、ポートモニター13からＰＤＦ＋ＣＭＤを受信し、保存する。
【００２２】
図３は、本実施例の印刷システムの挙動を説明する模式図である。
図３（ａ）は、プリンタプーリング無効化時の本実施例の印刷システムの挙動を表す。本実施例の印刷システムでは、印刷出力先はプリントキューという単位で管理される。プリンタプーリング無効化時は、図３（ａ）のように、プリントキューに対して１つのポートが関連付けて管理され、これがＯS112における既定の構成である。
【００２３】
ポートは、プリンタ装置との接続および送信を管理するための単位であり、ポートの設定にしたがって、ポートモニター13が印刷コマンドの送信処理を行う。
なお、プリントキューに対してアプリケーションから描画命令として入力される印刷要求の１つ１つは、ジョブという単位で管理される。
【００２４】
プリントキューは、複数のアプリケーションプロセスまたは複数スレッドからの印刷要求を同時に受け付けることができる。しかし、プリンタプーリング無効化時では、関連付けられたポートは１つであるため、図３（ａ）のように、ジョブのレンダリング処理および送信処理は１つずつ順に行われる。
【００２５】
レンダリング処理とは、プリンタドライバによるＧＤＩの描画命令を印刷コマンドに変換する処理である（本実施例ではＰＤＦｗ12によるＰＤＦへの変換処理）。
レンダリング処理および送信処理は、印刷要求が開始された時刻順にプリントキュー内でスケジューリングされる。以下、プリントキューに対する印刷要求の開始を「ジョブの投入」と呼ぶ。スケジューリングによって後ろに回されたジョブは、レンダリング待ちの状態で待機する。
【００２６】
一方、図３（ｂ）は、プリンタプーリング有効化時のWindows印刷システムの挙動を表す。プリンタプーリング有効化時は、図３（ｂ）のように、プリントキューに対して複数のポートを関連付けることができる。本実施例では、ループバックアドレス「127.0.0.1」およびポート番号9100を指定した、同様の設定がされたポートを２つ作成し、プリントキューに関連付けるものとする。
【００２７】
このように、プリントキューに２つのポートが関連付けられると、ジョブのレンダリング処理および送信処理は、最大で２つずつ順に行われるようになる。２つのジョブが同時に処理されるようになると、図３（ｂ）のように、２つのジョブの処理は、それぞれ別のスレッドで実行されるので、ＣＰＵ101がマルチコア構成であれば、大量ジョブの印刷をより短時間で行うことが可能となる。本実施例では、２つのポートが割り当てられたプリントキューを例に説明するが、３つ以上のポートが割り当てられたプリントキューであってもよい。
【００２８】
なお、各ジョブの処理負荷や計算資源の割り当てはまちまちであるため、プリンタプーリング有効化時では、プリントキュー内でスケジューリングされた順序とは異なる順序で変換後の印刷コマンドが送信されていく可能性がある。
【００２９】
以下、文書データの具体例を用いて、プリントキュー内でスケジューリングされた順序とは異なる順序で変換後の印刷コマンドが送信されるケースについて説明する。
【００３０】
図４は、帳票データと変換後のＰＤＦデータの例を表す模式図である。
ここでは、帳票アプリ11で作成したfoo.form、bar.form、baz.formという３つの帳票データを考える。これら一連の帳票データは、まとめて「複合帳票」として帳票アプリ11によって管理され、foo.form、bar.form、baz.formの順序でリスト化されているものとする。各帳票データのページ数や描画内容はまちまちであるが、ここではbar.formはfoo.formに比べてページ数が少なく描画内容も単純であるものとする。
【００３１】
本実施例では、図４（ａ）に示すように、複合帳票を構成する上記３つの帳票データ（foo.form、bar.form、baz.form）をそれぞれ変換し、foo.pdf、bar.pdf、baz.pdfという変換前の帳票データと同じ順序で３つの連続したＰＤＦデータを得ることを目的とする。
【００３２】
例えば、プリンタプーリングが無効化されていて、foo.form、bar.form、baz.formを順に変換するようＰＤＦｗ12のプリントキューに投入した場合には、ジョブは１つずつ処理される。このため、受信処理部1102は、ポートモニター13から受信した３つのＰＤＦ＋ＣＭＤを順にfoo.pdf、bar.pdf、baz.pdfとして保存すれば所望の複合帳票を得ることができる。
【００３３】
しかし、高速化等のため、プリンタプーリングを有効化すると、プリントキューに投入された順とは異なる順に受信処理部1102がＰＤＦ＋ＣＭＤを受信する可能性がある。具体的には、図４（ｂ）に示すように、foo.formの処理よりもページ数が少ないbar.formの処理が先に完了し、bar.formの変換後のＰＤＦをfoo.pdfとし、bar.formの変換後のＰＤＦをfoo.pdfとして取り違えて保存してしまう可能性がある。
以下、複合帳票の印刷時に、プリンタプーリング有効化時であっても、上述したような取り違えが起きないようにする構成について述べる。
【００３４】
図５は、実施例１における文書フォーマット変換処理を例示するシーケンス図である。ここでは、実施例１において、印刷指示部1101、ＰＤＦｗ12、受信処理部1102がそれぞれどのような処理を行うかについて説明する。なお、図５に示す印刷指示部1101、ＰＤＦｗ12、受信処理部1102の処理は、それぞれＣＰＵ101が外部メモリ111等に記憶されるプログラムをＲＡＭ102に読み出して実行することにより実現されるものである。なお、ここでは、ポートモニター13は、ＰＤＦｗ12から受信したＰＤＦ＋ＣＭＤを受信処理部1102に送信するだけであるため、図５のシーケンス図からは省略してある。
【００３５】
印刷対象の帳票の文書フォーマット変換が指示されると、印刷指示部1101は、S101に処理を進め、本シーケンスが開始される。
はじめに、S101において、印刷指示部1101は、プリンタプーリング有効化処理を実行する。以下、図６のフローチャートを用いて、プリンタプーリング有効化処理について説明する。
【００３６】
図６は、本実施例のプリンタプーリング有効化処理を例示するフローチャートである。このフローチャートの示す処理は、ＣＰＵ101が外部メモリ111等に記憶されるプログラムをＲＡＭ102に読み出して実行することにより実現されるものである。
【００３７】
まず、S1011において、印刷指示部1101は、印刷対象の帳票が複合帳票か否かを判断する。そして、印刷対象の帳票が複合帳票であると判断した場合（S1011でYesの場合）、印刷指示部1101は、S1012に処理を進める。
S1012において、印刷指示部1101は、プリンタプーリングを有効化し、本フローチャートの処理を終了する。該プリンタプーリングの有効化により、複数のポート（本実施例では２つのポート）が割り当てられ、対応するプリンタドライバでの複数のデータに対する処理が並列で行われる機能が有効化される。以下、該複数のポートが割り当てられ、対応するプリンタドライバでの複数のデータに対する処理が並列で行われる機能が有効化されたプリントキューを、プリンタプーリングが有効化されたプリントキューという。
【００３８】
一方、印刷対象の帳票が複合帳票でないと判断した場合（S1011でNoの場合）、印刷指示部1101は、プリンタプーリングを有効化することなく本フローチャートの処理を終了する。本実施例における一連の文書フォーマット変換処理は、複合帳票を変換するときにのみ有効であり、個別の帳票を変換する際には意図しない結果となってしまう。そのため、本実施例では、複合帳票でない場合にはプリンタプーリングを有効化しないようにする。
【００３９】
以下、図５のシーケンス図の説明に戻る。
上記S101のプリンタプーリング有効化処理の後、印刷指示部1101は、S102に処理を進める。S102において、印刷指示部1101は、インデックスをインクリメントする。ここでインデックスとは、複合帳票内の帳票を番号付けするために用いられる、印刷指示部1101が有する情報であり、複合帳票の変換開始時に「０」に初期化されるものとする。複合帳票内の各帳票を変換していくと、先頭から順に１、２、・・・というインデックスが関連付けられていく。
【００４０】
次に、S103において、印刷指示部1101は、ＰＤＦｗ12に投入するジョブ（上述の印刷対象の帳票のデータをＰＤＦデータに変換するためのジョブ）のジョブ名に、上記インデックスの情報を付加する。
次に、S104において、印刷指示部1101は、上記S103でジョブ名にインデックスの情報を付加したジョブを投入する。印刷指示部1101がジョブ投入時に指定するプリントキューは、印刷対象の帳票が複合帳票の場合、上記S101においてプリンタプーリングが有効化されたプリントキューとなる。
【００４１】
ジョブ名は、ＧＤＩのＡＰＩ（Application Programming Interface）でジョブに対して付けることのできる文字列情報である。例えば、１つ目の帳票であるfoo.formの拡張子を除いた「foo」という文字列をジョブ名とするとき、その前に「1*」というインデックス情報を付加して「1*foo」というジョブ名を生成し、ジョブを投入する。「*」はインデックス情報と元のジョブ名とを分離するための区切り文字である。
【００４２】
なお、印刷指示部1101は、以上のS102〜S104を、並列化のため複合帳票内の帳票数だけループさせ実行する。すなわち、１つ目の帳票であるfoo.formのジョブを投入した後、印刷指示部1101は、インデックスをインクリメントし、２つ目の帳票であるbar.formの拡張子を除いた「bar」という文字列の前に「2*」というインデックス情報を付加して「2*bar」というジョブ名を生成し、ジョブを投入する。さらに、印刷指示部1101は、インデックスをインクリメントし、３つ目の帳票であるbaz.formの拡張子を除いた「baz」という文字列の前に「3*」というインデックス情報を付加して「3*baz」というジョブ名を生成し、ジョブを投入する。このように、印刷指示部1101は、それぞれにインデックス（順番を示す情報）が付加された複数のデータを、上記S101のプリンタプーリング有効化処理によって２つのポートが割り当てられたプリントキューを指定して出力指示（投入）する。これにより、プリントキューには、３つのジョブが時間間隔を開けず投入され、以下に説明するＰＤＦｗ12のレンダリング処理が最大２つのスレッドにより同時実行される。
【００４３】
ＰＤＦｗ12は、ジョブが投入されるとレンダリング処理（S105〜S107）を開始する。
まず、S105において、ＰＤＦｗ12は、上記投入されたジョブの、帳票アプリ11によってＧＤＩで指定されたジョブ名からインデックスの情報を取得する。
【００４４】
次に、S106において、ＰＤＦｗ12は、上記S105で取得したインデックスとジョブ名をコマンドとして、ポートモニター13を通じて、受信処理部1102に送信する。
次に、S107において、ＰＤＦｗ12は、帳票アプリ11から入力されたＧＤＩの描画命令をＰＤＦデータに変換し、コマンドとして、同様にポートモニター13を通じて、受信処理部1102に送信し、レンダリング処理を終了する。
図３（ｂ）に示したように、本実施例では、プリントキューに２つのポートが関連付けられているため、ＰＤＦｗ12によるレンダリング処理は、最大２つのスレッドによって並列に実行される。
【００４５】
図８（ａ）は、図５のS105〜S107においてＰＤＦｗ12が受信処理部1102に対して送信するコマンドであるＰＤＦ＋ＣＭＤのデータ例を示す図である。
ＰＤＦ＋ＣＭＤは、可変長のバイナリプロトコルであり、図８（ａ）の各ブロックは、各コマンドを表現している。例えば、「ジョブ名」と「インデックス」は、それぞれ別のコマンドで送信される。変換されたＰＤＦデータもコマンド化されて送信される。
【００４６】
図８（ａ）の例において、ＰＤＦデータは、送信処理・受信処理の効率化のため、４ＫＢごとのサイズに分割された複数のコマンドとして送信される。このような、ＰＤＦ＋ＣＭＤのバイナリプロトコルによって、変換後のＰＤＦデータばかりでなく、ジョブ名やインデックスといった文書フォーマット変換処理に付随する情報もあわせて、ＰＤＦｗ12から受信処理部1102に送信することが可能となる。
【００４７】
以下、図５のシーケンス図の説明に戻る。
受信処理部1102は、S108において、ポートモニター13を通じてＰＤＦ＋ＣＭＤのコマンドを受信する。本実施例では、S108の受信処理は、ＴＣＰ／ＩＰの受信処理として実装される。ＰＤＦｗ12によってレンダリングされ、ポートモニター13に送信される処理は、本実施例では最大２つのスレッドによって同時に実行される。このため、並列処理のメリットを生かすべく、受信処理部1102は、上記S108の受信処理を並列処理として実行する。すなわち、各ジョブのＰＤＦ＋ＣＭＤは、それぞれ別々のＴＣＰ／ＩＰセッションで送信され、少なくとも２つのスレッドによって同時に受信可能なように構成されるものとする。
【００４８】
上記S108においてＰＤＦ＋ＣＭＤを受信したら、受信処理部1102は、S109に処理を進める。S109において、受信処理部1102は、上記S108で受信したコマンドから、ジョブ名、インデックス、ＰＤＦデータを取得する。
次に、S110において、受信処理部1102は、上記S109で取得したジョブ名をファイル名としてＰＤＦデータを、外部メモリ111にファイルとして保存する。
【００４９】
次に、S111において、受信処理部1102は、上記S109で取得したインデックスの情報を基に、ＰＤＦデータ同士の順序を並べ替える（すなわちインデックスの情報に従い、ＰＤＦデータを提供する）。インデックスの情報を基にすることにより、並列処理によってまちまちの順序で変換が終了しポートモニター13から送信されてくるＰＤＦデータを、元の複合帳票の帳票と同じ順序で並べ替えることが可能となる。よって、帳票アプリ11は、元の複合帳票の帳票と同じ順序でＰＤＦデータを管理、提供（例えば表示）することができる。なお、S108〜S111の処理は、最大２つのスレッドによって並列的に処理される。
【００５０】
最後に、S112において、受信処理部1102は、プリンタプーリング無効化処理を実行する。以下、図７のフローチャートを用いて、プリンタプーリング無効化処理について説明する。
【００５１】
図７は、本実施例のプリンタプーリング無効化処理を例示するフローチャートである。このフローチャートの示す処理は、ＣＰＵ101が外部メモリ111等に記憶されるプログラムをＲＡＭ102に読み出して実行することにより実現されるものである。
【００５２】
まずS1111において、受信処理部1102は、プリントキューのジョブ数が０個であるか否かを判断する。プリントキューのジョブ数が０個でないと判断した場合（S1111でNoの場合）、受信処理部1102は、プリントキューのジョブ数が０個になるまで待機する。
【００５３】
そして、プリントキューのジョブ数が０個であると判断した場合（S1111でYesの場合）、受信処理部1102は、S1112に処理を進める。
S1112において、受信処理部1102は、プリントキューのプリンタプーリングを無効化し、１つのポートだけが割り当てられるようにし、本フローチャートの処理を終了する。
【００５４】
なお、上記図７のS1111は、本実施例の印刷システムにおいてプリントキューの状況をモニタリングするＡＰＩであるFindFirstPrinterChangeNotificationとFindNextPrinterChangeNotificationを使用することにより実現される。これらのＡＰＩを使用することにより、受信処理部1102は、プリントキューに存在するジョブの個数が変化したタイミングでコールバック関数が呼ばれ、イベント駆動の処理を行うことができる。
【００５５】
印刷指示部1101のジョブ投入処理（S104）は、レンダリング処理（S105〜S107）の完了を待たず連続して行われる。そのため、プリントキューから全てのジョブがなくなれば（プリントキューのジョブ数が０個となれば）、それは複合帳票に含まれる全帳票の変換処理が完了したことを意味する。すなわち、プリンタプーリング無効化処理（S112）は、複合帳票の処理が終わったら、後に開始される可能性のある複合帳票でない個々の帳票の処理に備えてプリンタプーリングを無効化しておくことを目的に実行されるものである。
【００５６】
以上、本発明の実施例１における文書フォーマット変換処理について説明した。
なお、上述の説明では、印刷指示部1101からＰＤＦｗ12にインデックスの情報を送るために、ジョブに関連付けられたジョブ名を利用した。しかし、ジョブ名の代わりに、DEVMODEやPrintTicketといった印刷設定データ、あるいはEscapeのようなＧＤＩにおけるメタ情報送信用のＡＰＩを用いてもよい。
【００５７】
以上説明したように、実施例１によれば、プリンタドライバを利用した文書フォーマット変換において、一連の文書データを並列的に処理する場合でも、フォーマット変換前後で文書データの順序を維持することができる。すなわち、順序を維持する必要のある一連の文書データをプリンタドライバによって並列的にフォーマット変換する場合、変換後のデータについても元の順序を維持するように並べ替えて、変換後のデータを提供可能となる。
【実施例２】
【００５８】
上記実施例１では、ＰＤＦｗ12を用いて並列的に一連のジョブを変換する際に、帳票アプリ11がジョブごとにインデックスの情報をＰＤＦｗ12に送ることで、受信処理部1102が変換後のデータを所望の順序で並べ替えられる構成について説明した。
なお、文書管理アプリケーションプログラム（以下「文書管理アプリ」）等では、印刷機能が外部のアプリケーションプログラム（以下「外部アプリ」）に依存する構成になっているものがある。このようなケースでは、直接的にＰＤＦｗ12に対してインデックスの情報を送信できない。このため、実施例１の構成では並べ替えを実現することができず、変換後のデータについて変化前のデータの順序を維持することができない。本実施例２では、上述のようなケースにおいても、変換後のデータについて変化前のデータの順序を維持可能にする構成について説明する。
【００５９】
図９は、実施例２の文書フォーマット変換処理に関わるソフトウェアモジュールの構成を例示する図である。
【００６０】
文書管理アプリ14は、外部の様々な文書作成アプリケーションで作成された文書データをＰＤＦデータに変換して取り込む機能や、取り込んだＰＤＦデータに対して編集等を行う機能を提供するソフトウェアである。実施例１に示した帳票アプリ11が一連の帳票をリスト化した複合帳票を扱ったように、文書管理アプリ14も一連の文書データをリスト化した複合文書を扱う。文書管理アプリ14は、印刷指示部1401、受信処理部1402を有する。
【００６１】
外部アプリ15は、多数の種類がある文書作成アプリケーションの一例を示すものである。例えば、外部アプリ15は、ワードプロセッシングソフトウェアや、表計算ソフトウェアである。
【００６２】
文書管理アプリ14に対して、外部アプリ15で作成した一連の文書データをＰＤＦデータに変換して取り込むようユーザーから指示が入力されると、印刷指示部1401は、外部アプリ15をＳｈｅｌｌＡＰＩで起動し、さらに印刷を外部アプリ15に実行させる。
【００６３】
外部アプリ15によって印刷が実行されると、文書データの描画内容がＧＤＩのＡＰＩによってＰＤＦｗ12に入力され、ＰＤＦｗ12によってＰＤＦ＋ＣＭＤにレンダリングされ、ポートモニター13を通じて受信処理部1402に送信される。このように、実施例２の構成では、ＧＤＩによるジョブ投入を実行しているのは、外部アプリ15である。
【００６４】
印刷指示部1401で使用する印刷指示を行うＳｈｅｌｌＡＰＩでは、外部アプリ15に対して出力先のプリントキューを指定することは可能であるが、その他のジョブ名や印刷設定を指定することはできず、外部アプリ15にEscapeのようなＡＰＩを指示に基づいて呼ばせることもできない。そのため、実施例２では、実施例１で活用したインデックスの情報をＰＤＦｗ12に送信することができないため、実施例１と同様の処理では変換後のＰＤＦデータを並べ替えることができない。
【００６５】
図１０は、実施例２における文書フォーマット変換処理を例示するシーケンス図である。以下、上述のような制限下においても並べ替えを可能にする手段について説明する。図１０に示す印刷指示部1401、外部アプリ15、ＰＤＦｗ12、受信処理部1402の処理は、ＣＰＵ101が外部メモリ111等に記憶されるプログラムをＲＡＭ102に読み出して実行することにより実現されるものである。
【００６６】
はじめに、S101において、印刷指示部1401は、プリンタプーリング有効化処理を実行する。S101の処理は実施例１における処理（図５のS101）と同様である。
次に、S201において、印刷指示部1401は、タイミング印刷処理を実行する。以下、図１１のフローチャートを用いて、タイミング印刷処理について説明する。
【００６７】
図１１は、実施例２のタイミング印刷処理を例示するフローチャートである。このフローチャートの示す処理は、ＣＰＵ101が外部メモリ111等に記憶されるプログラムをＲＡＭ102に読み出して実行することにより実現されるものである。
【００６８】
実施例２では、変換後のデータを変換前の順序に並べ替えるためにジョブ名などが使用できないため、代わりにジョブの印刷開始時刻を用いる。各ジョブのレンダリング処理にかかる時間はまちまちであるため、印刷指示部1401から制御することはできないが、印刷開始時刻に関してはタイミングを見計らってプリントキューにジョブを投入することによって、前後関係を制御することができる。すなわち、タイミング印刷処理は、複合文書内のある文書データＡとそれに続く文書データＢがあるとき、文書データＢに対応するジョブの印刷開始時刻が文書データＡのそれより後の時刻になるようタイミングをはかってジョブを投入する処理である。
【００６９】
はじめに、S2011において、印刷指示部1401は、複合文書に次の未印刷の文書データがあるか否かを判断する。そして、複合文書に次の未印刷の文書データがあると判断した場合（S2011でYesの場合）、印刷指示部1401は、S2012に処理を進める。
S2012において、印刷指示部1401は、次の文書データの印刷指示（上記S101においてプリンタプーリングが有効化されたプリントキューを用いた印刷指示）を外部アプリ15に対してＳｈｅｌｌＡＰＩで行う。
【００７０】
次に、S2013において、印刷指示部1401は、新しいジョブがＰＤＦｗ12のプリントキューに投入されるまで待機する。S2013は、プリントキューを監視するS1112と同様のＡＰＩを用いることで、新しいジョブがプリントキューに投入されるまで待機し、新しいジョブがプリントキューに投入されたら、S2011に処理を戻し、複合文書の次の未印刷の文書データに処理を移行する。
【００７１】
一方、上記S2011において、複合文書に次の未印刷の文書データがないと判断した場合（S2011でNoの場合）、印刷指示部1401は、本フローチャートの処理を終了する。
【００７２】
以下、図１０のシーケンスの説明に戻る。
外部アプリ15は、図１１のS2012のＳｈｅｌｌＡＰＩによる印刷指示に呼応してプロセス起動し、指定された文書データをロードする（S202）。
次に、S203において、外部アプリ15は、文書データをＧＤＩのＡＰＩを用いて印刷要求する（ジョブを投入する）。
【００７３】
ＰＤＦｗ12は、ジョブが投入されるとレンダリング処理（S204〜S206）を開始する。なお、レンダリング処理が開始されると、印刷指示部1401の「新しいジョブが投入されるまで待機する」状態が解除される。
【００７４】
まず、S204において、ＰＤＦｗ12は、上記投入されたジョブの印刷開始時刻とジョブ名を取得する。
次に、S205において、ＰＤＦｗ12は、上記S204で取得した印刷開始時刻とジョブ名をコマンドとして、ポートモニター13を通じて、受信処理部1402に送信する。
次に、S206において、ＰＤＦｗ12は、外部アプリ15から入力されたＧＤＩの描画命令をＰＤＦデータに変換し、コマンドとして、同様にポートモニター13を通じて、受信処理部1402に送信し、レンダリング処理を終了する。
図３（ｂ）に示したように、本実施例では、プリントキューに２つのポートが関連付けられているため、ＰＤＦｗ12によるレンダリング処理は、最大２つのスレッドによって並列に実行される。
【００７５】
図８（ｂ）は、図１０のS204〜S206においてＰＤＦｗ12が受信処理部1402に対して送信するコマンドであるＰＤＦ＋ＣＭＤのデータ例を示す図である。
実施例１の図８（ａ）と同様に、ＰＤＦ＋ＣＭＤは、可変長のバイナリプロトコルであり、図８（ｂ）の各ブロックは、各コマンドを表現している。例えば、「ジョブ名」と「印刷開始時刻」は、それぞれ別のコマンドで送信される。変換されたＰＤＦデータもコマンド化されて送信される。
【００７６】
また実施例１の図８（ａ）と同様に、ＰＤＦデータは、送信処理・受信処理の効率化のため、４ＫＢごとのサイズに分割された複数のコマンドとして送信される。このような、ＰＤＦ＋ＣＭＤのバイナリプロトコルによって、変換後のＰＤＦデータばかりでなく、ジョブ名やインデックスといった文書フォーマット変換処理に付随する情報もあわせて、ＰＤＦｗ12から受信処理部1402に送信することが可能となる。
【００７７】
以下、図１０のシーケンス図の説明に戻る。
受信処理部1402は、S108において、ポートモニター13を通じてＰＤＦ＋ＣＭＤのコマンドを受信する。S108の処理は実施例１における処理（図５のS108）と同様である。
上記S108においてＰＤＦ＋ＣＭＤを受信したら、受信処理部1402は、S207に処理を進める。S207において、受信処理部1402は、上記S108で受信したコマンドから、ジョブ名、印刷開始時刻、ＰＤＦデータを取得する。
次に、S110において、受信処理部1402は、上記S207で取得したジョブ名をファイル名としてＰＤＦデータを、外部メモリ111にファイルとして保存する。S110の処理は実施例１における処理（図５のS110）と同様である。
【００７８】
次に、S208において、受信処理部1402は、上記S207で取得した印刷開始時刻の情報を基に、ＰＤＦデータ同士の順序を並べ替える（すなわち印刷開始時刻の情報に従い、ＰＤＦデータを提供する）。印刷開始時刻の情報を基にすることにより、並列処理によってまちまちの順序で変換が終了しポートモニター13から送信されてくるＰＤＦデータを、元の複合帳票の帳票と同じ順序で並べ替えることが可能となる。よって、帳票アプリ11は、元の複合帳票の帳票と同じ順序でＰＤＦデータを管理、提供（例えば表示）することができる。なお、S108、S207、S110、S208の処理は実施例１における受信処理部1102の処理と同様に、最大２つのスレッドによって並列的に処理される。
【００７９】
最後に、S112において、受信処理部1402は、プリンタプーリング無効化処理を実行する。S112の処理は実施例１における処理（図５のS112）と同様である。すなわち、複合文書を変換するための全てのジョブが処理されるのを待ってからプリンタプーリングを無効化し、終了する。
【００８０】
以上、本発明の実施例２における文書フォーマット変換処理について説明した。
以上説明したように、実施例２によれば、印刷機能が外部アプリに依存する文書管理アプリケーション等から行うプリンタドライバを利用した文書フォーマット変換において、一連の文書データを並列的に処理する場合でも、フォーマット変換前後で文書データの順序を維持することができる。すなわち、順序を維持する必要のある一連の文書データをプリンタドライバによって並列的にフォーマット変換する場合、変換後のデータについても元の順序を維持するように並べ替えて、変換後のデータを提供可能となる。
【００８１】
なお、上記各実施例では、プリンタドライバを利用した文書フォーマット変換を例に説明したが、本発明は文書フォーマット変換に限定されるものではなく、プリンタドライバを利用して各種データ処理を行う構成に適用可能である。よって、複数のポートが割り当てられたプリントキューを作成されている情報処理装置にてプリンタドライバを利用して一連のデータを並列的に処理する場合に、データ処理の前後で順序を維持することができる。
【００８２】
以上のように、各実施例によれば、複数のポートが割り当てられ、対応するプリンタドライバでの複数のデータに対する処理が並列で行われる機能が有効化されたプリントキューが作成されている情報処理装置にてプリンタドライバを利用して一連のデータを並列的に処理する場合に、データ処理の前後で順序を維持することができる。
【００８３】
なお、上述した各種データの構成及びその内容はこれに限定されるものではなく、用途や目的に応じて、様々な構成や内容で構成されていてもよい。
以上、一実施形態について示したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
また、上記各実施例を組み合わせた構成も全て本発明に含まれるものである。
【００８４】
（その他の実施例）
本発明は、上述の実施例の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
また、本発明は、複数の機器から構成されるシステムに適用しても、１つの機器からなる装置に適用してもよい。
本発明は上記実施例に限定されるものではなく、本発明の趣旨に基づき種々の変形（各実施例の有機的な組合せを含む）が可能であり、それらを本発明の範囲から除外するものではない。即ち、上述した各実施例及びその変形例を組み合わせた構成も全て本発明に含まれるものである。
【図１】
2018109812.tif 000003
【図２】
2018109812.tif 000004
【図３】
2018109812.tif 000005
【図４】
2018109812.tif 000006
【図５】
2018109812.tif 000007
【図６】
2018109812.tif 000008
【図７】
2018109812.tif 000009
【図８】
2018109812.tif 000010
【図９】
2018109812.tif 000011
【図１０】
2018109812.tif 000012
【図１１】
2018109812.tif 000013