以下、本発明の各実施形態について、図面を参照しながら詳細に説明する。
[第一の実施形態]
<全体構成>
まず、本実施形態に係る印刷システム1の全体構成について、図1を参照しながら説明する。図1は、第一の実施形態に係る印刷システム1の全体構成の一例を示す図である。
図1に示すように、本実施形態に係る印刷システム1には、1台以上の端末装置10と、1台以上の機器20とが含まれる。また、端末装置10と機器20とは、例えば、Bluetooth(登録商標)等の近距離無線通信を用いて、通信可能に接続される。更に、端末装置10と機器20とは、例えば、Wi-Fi等の無線LAN(Local Area Network)を用いて、通信可能に接続される。
機器20は、MFP等の画像処理装置である。機器20は、端末装置10からの要求に応じて、印刷処理やスキャン処理等の各種画像処理を行う。本実施形態では、機器20がMFPであるものとして説明する。なお、機器20は、MFPに限られず、例えば、コピー機、印刷装置、スキャナ装置、ファクシミリ、デジタルカメラ、プロジェクタ、電子会議用端末、電子黒板装置、オーディオ機器、車載機(例えばカーナビ等)、家電製品(例えば冷蔵庫等)であっても良い。
端末装置10は、スマートフォン等の情報処理装置である。端末装置10には、機器20の製造元企業とは異なる外部企業(以降、「サードベンダ」と表す。)により開発され、機器20と連携した処理を行う印刷アプリケーション100がインストールされている。端末装置10のユーザは、印刷アプリケーション100を用いて、機器20で印刷を行うことができる。
なお、端末装置10は、スマートフォンに限られず、例えば、タブレット端末、ノート型PC(パーソナルコンピュータ)、デスクトップ型PC、ゲーム機器、デジタルカメラ、ウェアラブルデバイス等であっても良い。
<印刷アプリケーション100の構成>
ここで、サードベンダにより開発された印刷アプリケーション100の構成について、図2を参照しながら説明する。図2は、印刷アプリケーション100の構成の一例を説明する図である。
図2に示すように、印刷アプリケーション100は、サードベンダにより開発され、独自の機能を提供するプログラムであるベンダ開発プログラム110と、機器20の製造元企業が提供するAPI群である印刷ライブラリ120とを有する。
印刷ライブラリ120は、印刷機能を提供するためのプログラムである。印刷ライブラリ120には、例えば、機器20から機器情報を取得するためのAPIや機器20に対して印刷を要求するためのAPI等が定義されている。このため、ベンダ開発プログラム110は、印刷ライブラリ120に定義されたAPIを呼び出すことで、機器20からの機器情報の取得や機器20への印刷要求等、機器20と連携した処理を実現することができる。
このとき、印刷ライブラリ120は、例えば、機器20から取得した機器情報等をベンダ開発プログラム110で書き換えることができないようにする。これにより、印刷ライブラリ120により取得された機器情報等が、ベンダ開発プログラム110で不正に書き換えられてしまう事態を防止することができる。
また、印刷ライブラリ120は、例えば、機器20から取得した機器情報等をベンダ開発プログラム110が読み取る場合にも、少なくとも一部の情報を読み取ることができないようにする。これにより、印刷ライブラリ120により取得された機器情報等について、ベンダ開発プログラム110による不要な参照を防止することができ、機器20のセキュリティリスクの低下等を防止することができる。
本実施形態では、ベンダ開発プログラム110及び印刷ライブラリ120は、Java(登録商標)言語で開発されたプログラムであるものとする。したがって、印刷ライブラリ120にはJavaのクラスが定義されている。ベンダ開発プログラム110は、クラス内のメソッド(API)を呼び出すことで、機器20からの機器情報の取得や機器20への印刷要求等を実現することができる。ただし、ベンダ開発プログラム110及び印刷ライブラリ120は、Java言語で開発されている場合に限られない。例えば、C言語、C++言語、Objective-C言語、C#言語等、種々のプログラミング言語で開発されても良い。
なお、印刷ライブラリ120は、機器20の製造元企業により提供される場合に限られない。印刷ライブラリ120は、例えば、機器20の製造元企業の関連会社等により提供される場合も有り得る。また、印刷ライブラリ120は、例えば、SDK(Software Development Kit)の一部として提供されても良い。
<ハードウェア構成>
≪端末装置10≫
次に、本実施形態に係る端末装置10のハードウェア構成について、図3を参照しながら説明する。図3は、第一の実施形態に係る端末装置10のハードウェア構成の一例を示す図である。
図3に示すように、本実施形態に係る端末装置10は、入力装置11と、表示装置12と、外部I/F13と、RAM(Random Access Memory)14とを有する。また、本実施形態に係る端末装置10は、ROM(Read Only Memory)15と、CPU(Central Processing Unit)16と、通信I/F17と、補助記憶装置18とを有する。これらの各ハードウェアは、それぞれがバスBで接続されている。
入力装置11は、例えばタッチパネル等であり、ユーザが各種操作を入力するのに用いられる。なお、入力装置11は、例えば、キーボードやマウス等であっても良い。
表示装置12は、ディスプレイ等であり、端末装置10による処理結果を表示する。外部I/F13は、外部装置とのインタフェースである。外部装置には、記録媒体13a等がある。端末装置10は、外部I/F13を介して、記録媒体13aの読み取りや書き込みを行うことができる。
記録媒体13aには、例えば、USBメモリ、SDメモリカード、フレキシブルディスク、CD、DVD等がある。
RAM14は、プログラムやデータを一時保持する揮発性の半導体メモリである。ROM15は、電源を切ってもプログラムやデータを保持することができる不揮発性の半導体メモリである。ROM15には、例えば、端末装置10の起動時に実行されるBIOS(Basic Input/Output System)、OS(Operating System)設定、及びネットワーク設定等のプログラムやデータが格納されている。
CPU16は、ROM15や補助記憶装置18等からプログラムやデータをRAM14上に読み出し、処理を実行することで、端末装置10全体の制御や機能を実現する演算装置である。
通信I/F17は、端末装置10が機器20と通信を行うためのインタフェースである。通信I/F17には、例えば、Bluetoothにより機器20と通信を行うためのBluetoothモジュールと、Wi-Fi等の無線LANにより機器20と通信を行うための無線LANモジュールとが含まれる。
補助記憶装置18は、例えばHDD(Hard Disk Drive)やSSD(Solid State Drive)等であり、プログラムやデータを格納している不揮発性の記憶装置である。補助記憶装置18に格納されるプログラムやデータには、端末装置10全体を制御する基本ソフトウェアであるOS、印刷アプリケーション100、その他の各種機能を提供するアプリケーション等がある。補助記憶装置18は、格納しているプログラムやデータを所定のファイルシステムやDB(データベース)により管理している。
本実施形態に係る端末装置10は、図3に示すハードウェア構成を有することにより、後述するような各種処理を実現できる。
≪機器20≫
次に、本実施形態に係る機器20が、MFP等の画像処理装置である場合におけるハードウェア構成について、図4を参照しながら説明する。図4は、第一の実施形態に係る機器20のハードウェア構成の一例を示す図である。
図4に示すように、本実施形態に係る機器20は、コントローラ21と、操作パネル22と、外部I/F23と、通信I/F24と、プロッタ25と、スキャナ26とを有する。また、コントローラ21は、CPU31と、RAM32と、ROM33と、NVRAM34と、補助記憶装置35とを有する。
ROM33は、電源を切ってもプログラムやデータを保持することができる不揮発性の半導体メモリである。RAM32は、プログラムやデータを一時保持する揮発性の半導体メモリである。NVRAM34は、例えば設定情報等を格納している不揮発性の半導体メモリである。また、補助記憶装置35は、例えばHDDやSSD等であり、プログラムやデータを格納している不揮発性の記憶装置である。
CPU31は、ROM33やNVRAM34、補助記憶装置35等からプログラムやデータ、設定情報等をRAM32上に読み出し、処理を実行することで、機器20全体の制御や機能を実現する演算装置である。
操作パネル22は、ユーザからの入力を受け付ける入力部と、表示を行う表示部とを備えている入出力装置である。外部I/F23は、外部装置とのインタフェースである。外部装置には、記録媒体23a等がある。機器20は、外部I/F23を介して、記録媒体23aの読み取りや書き込みを行うことができる。
記録媒体23aには、例えば、ICカード、USBメモリ、SDメモリカード、フレキシブルディスク、CD、DVD等がある。
通信I/F24は、機器20が端末装置10通信を行うためのインタフェースである。通信I/F24には、例えば、Bluetoothにより端末装置10と通信を行うためのBluetoothモジュールと、無線LANにより端末装置10と通信を行うための無線LANモジュールとが含まれる。なお、通信I/F24には、有線LANにより端末装置10と通信を行うためのLANボード等が含まれても良い。
プロッタ25は、印刷データを被印刷媒体に印刷するための装置である。なお、被印刷媒体は、紙に限られない。被印刷媒体は、例えば、OHPシートやプラスチックフィルム、銅箔、布等であっても良い。スキャナ26は、原稿を読み取って、画像データを生成する装置である。
本実施形態に係る機器20は、図4に示すハードウェア構成を有することにより、後述するような各種処理を実現できる。
<機能構成>
次に、本実施形態に係る端末装置10の機能構成について、図5を参照しながら説明する。図5は、第一の実施形態に係る端末装置10の機能構成の一例を示す図である。
図5に示すように、本実施形態に係る端末装置10は、機器情報取得要求部111と、表示制御部112と、印刷対象データ設定部113と、印刷設定部114と、実行操作受付部115と、印刷実行要求部116とを有する。これら各部は、ベンダ開発プログラム110がCPU16に実行させる処理により実現される。
また、本実施形態に係る端末装置10は、機器情報取得部121と、印刷処理部122とを有する。これら各部は、印刷ライブラリ120がCPU16に実行させる処理により実現される。
機器情報取得要求部111は、ユーザによる機器情報の取得操作を受け付ける。また、機器情報取得要求部111は、ユーザによる機器情報の取得操作を受け付けると、機器情報の取得を機器情報取得部121に要求する。機器情報取得要求部111は、機器情報取得部121を実現するクラス(このクラスを、以降では「機器情報取得クラス1300」と表す。)内のメソッドを呼び出すことで、機器情報の取得を要求することができる。
表示制御部112は、機器情報取得部121により取得された機器情報を表示装置12上に表示する。
印刷対象データ設定部113は、ユーザによる印刷対象データの選択操作を受け付ける。印刷対象データとは、ユーザが印刷を所望するコンテンツデータのことである。コンテンツデータには、例えば、写真等の画像データや文書データ等が挙げられる。なお、機器20がプロジェクタやオーディオ機器等である場合には、コンテンツデータは、例えば、動画データや音楽データ等であっても良い。
また、印刷対象データ設定部113は、ユーザによる印刷対象データの選択操作を受け付けると、選択されたコンテンツデータを印刷対象データに設定する。
印刷設定部114は、ユーザによる印刷設定情報の指定操作を受け付ける。印刷設定情報には、例えば、部数、印刷ページ範囲、印刷カラー等がある。
また、印刷設定部114は、ユーザによる印刷設定情報の指定操作を受け付けると、各印刷設定情報が保持される印刷設定情報インスタンス300を生成する。そして、印刷設定部114は、ユーザにより指定された印刷設定情報を印刷設定情報インスタンス300に設定する。印刷設定部114は、印刷設定情報インスタンス300を実現するクラス(このクラスを、以降では「印刷設定情報クラス1200」と表す。)内のメソッドを呼び出すことで、印刷設定情報を設定することができる。
実行操作受付部115は、ユーザによる印刷実行操作を受け付ける。印刷実行要求部116は、実行操作受付部115により印刷実行操作が受け付けられると、印刷実行を印刷処理部122に要求する。印刷実行要求部116は、印刷処理部122を実現するクラス(このクラスを、以降では「印刷処理クラス1400」と表す。)内のメソッドを呼び出すことで、印刷実行を要求することができる。
機器情報取得部121は、機器情報取得要求部111からの要求に応じて、機器20から機器情報を取得する。このとき、機器情報取得部121は、例えばBluetooth等の近距離無線通信を用いて、機器20から機器情報を取得する。機器情報には、例えば、IPアドレス、モデル名、サポートPDL(Page Description Language)、ネットワーク情報等がある。
また、機器情報取得部121は、機器20から機器情報を取得すると、取得した各機器情報が保持される機器情報インスタンス200を生成する。そして、機器情報取得部121は、取得した機器情報を機器情報インスタンス200に設定する。機器情報取得部121は、機器情報インスタンス200を実現するクラス(このクラスを、以降では「機器情報クラス1100」と表す。)内のメソッドを呼び出すことで、機器情報を設定することができる。
印刷処理部122は、印刷実行要求部116からの要求に応じて、印刷データを生成した上で、印刷要求を機器20に送信する。このとき、印刷処理部122は、例えばWi-Fi等の無線LANを用いて、印刷要求を機器20に送信する。
印刷処理部122には、印刷データ生成部123と、印刷要求部124とが含まれる。印刷データ生成部123は、印刷データを生成する。印刷データとは、印刷対象データを機器20が解釈可能なデータ形式(すなわち、機器20がサポートしているPDL)に変換したデータである。印刷要求部124は、印刷データ生成部123により生成された印刷データが含まれる印刷要求を機器20に送信する。
ここで、機器情報インスタンス200について、図6を参照しながら説明する。図6は、機器情報インスタンス200の一例を示す図である。
図6に示すように、機器情報インスタンス200は、フィールド名「IPアドレス」の機器情報と、フィールド名「モデル名」の機器情報と、フィールド名「サポートPDL」の機器情報と、フィールド名「ネットワーク情報」の機器情報とを保持する。
フィールド名「IPアドレス」の機器情報は、フィールド値として、機器20のIPアドレスが設定される。また、フィールド名「IPアドレス」の機器情報の読取範囲は「全域」であり、書換範囲は「ライブラリ内」である。これは、フィールド名「IPアドレス」の機器情報は、印刷ライブラリ120以外のプログラム(ベンダ開発プログラム110)からも読み取り可能であるが、書き替え(フィールド値の更新)は不可であることを示している。
フィールド名「モデル名」の機器情報は、フィールド値として、機器20のモデル名(例えば型番等)が設定される。また、フィールド名「モデル名」の機器情報の読取範囲は「全域」であり、書換範囲は「ライブラリ内」である。これは、フィールド名「モデル名」の機器情報は、印刷ライブラリ120以外のプログラムからも読み取り可能であるが、書き替えは不可であることを示している。
フィールド名「サポートPDL」の機器情報は、フィールド値として、機器20が解釈可能なデータ形式名が設定される。また、フィールド名「サポートPDL」の機器情報の読取範囲及び書換範囲は「ライブラリ内」である。これは、フィールド名「サポートPDL」の機器情報は、印刷ライブラリ120以外のプログラムからは読み取りも書き換えも不可であることを示している。
フィールド名「ネットワーク情報」の機器情報は、フィールド値として、機器20のSSID(Service Set Identifier)や暗号化方式、アクセスポイントのパスワード等が設定される。また、フィールド名「ネットワーク情報」の機器情報の読取範囲及び書換範囲は「ライブラリ内」である。これは、フィールド名「ネットワーク情報」の機器情報は、印刷ライブラリ120以外のプログラムからは読み取りも書き換えも不可であることを示している。
以上のように、機器情報インスタンス200には、当該機器情報インスタンス200が保持している機器情報の読取範囲及び書換範囲が設定されている。これにより、機器20の製造元企業は、サードベンダにより開発されたベンダ開発プログラム110が不要な機器情報を参照したり、不正に機器情報を書き換えたりすることを防止することができる。なお、機器情報インスタンス200が保持する機器情報は、上記の「IPアドレス」、「モデル名」、「サポートPDL」、及び「ネットワーク情報」に限られない。機器情報インスタンス200は、例えば、機器番号や製造年月日、製造元企業の情報等、種々の機器情報を保持しても良い。
次に、印刷設定情報インスタンス300について、図7を参照しながら説明する。図7は、印刷設定情報インスタンス300の一例を示す図である。
図7に示すように、印刷設定情報インスタンス300は、フィールド名「部数」の印刷設定情報と、フィールド名「印刷ページ範囲」の印刷設定情報と、フィールド名「印刷カラー」の印刷設定情報とを保持する。
フィールド名「部数」の印刷設定情報は、フィールド値として、ユーザにより指定された印刷部数(又はデフォルトの印刷部数)が設定される。また、フィールド名「部数」の印刷設定情報の読取範囲及び書換範囲は「全域」である。これは、フィールド名「部数」の印刷設定情報は、印刷ライブラリ120以外のプログラムから読み取りも書き換えも可能であることを示している。
フィールド名「印刷ページ範囲」の印刷設定情報は、フィールド値として、ユーザにより指定された印刷ページ範囲(又はデフォルトの印刷ページ範囲)が設定される。また、フィールド名「印刷ページ範囲」の印刷設定情報の読取範囲及び書換範囲は「全域」である。これは、フィールド名「印刷ページ範囲」の印刷設定情報は、印刷ライブラリ120以外のプログラムから読み取りも書き換えも可能であることを示している。
フィールド名「印刷カラー」の印刷設定情報は、フィールド値として、ユーザにより指定された印刷カラー(又はデフォルトの印刷カラー)が設定される。また、フィールド名「印刷カラー」の印刷設定情報の読取範囲及び書換範囲は「全域」である。これは、フィールド名「印刷カラー」の印刷設定情報は、印刷ライブラリ120以外のプログラムから読み取りも書き換えも可能であることを示している。
以上のように、印刷設定情報インスタンス300には、当該印刷設定情報インスタンス300が保持している印刷設定情報の読取範囲及び書換範囲が設定されている。これにより、機器20の製造元企業は、サードベンダにより開発されたベンダ開発プログラム110が不要な印刷設定情報を参照したり、例えばデフォルト値のみが適用される印刷設定情報が書き換えられたりすることを防止することができる。なお、印刷設定情報インスタンス300が保持する印刷設定情報は、上記の「部数」、「印刷ページ範囲」、及び「印刷カラー」に限られない。印刷設定情報インスタンス300は、例えば、地紋印刷の有無、集約の有無、両面印刷の有無等、種々の印刷設定情報を保持しても良い。
ここで、上記の機器情報インスタンス200及び印刷設定情報インスタンス300の読取範囲及び書換範囲は、Java言語のパッケージを用いて実現することができる。例えば、図8に示すように、ベンダ開発プログラム110に定義された各クラスが属するパッケージと、印刷ライブラリ120に定義された各クラスが属するパッケージとを異なるパッケージとする。
これにより、機器情報インスタンス200が保持するフィールド(すなわち、機器情報)を操作するメソッドに対してアクセスレベルを定義することで、このフィールドの読取範囲及び書換範囲を制限することができる。同様に、印刷設定情報インスタンス300が保持するフィールド(すなわち、印刷設定情報)を操作するメソッドに対してアクセスレベルを定義することで、このフィールドの読取範囲及び書換範囲を制限することができる。以降では、印刷ライブラリ120に定義された各クラスが属するパッケージのパッケージ名を「printlibrary」とする。
なお、図8に示す例では、ベンダ開発プログラム110に定義された各クラスが同一のパッケージに属する場合を示しているが、これに限られず、例えば、これらの各クラスが異なるパッケージに属していても良い。
ここで、機器情報インスタンス200を実現する機器情報クラス1100について、図9を参照しながら説明する。図9は、機器情報クラス1100の一例を示す図である。機器情報インスタンス200は、例えば図9に示す機器情報クラス1100をインスタンス化することで生成される。
図9に示すように、機器情報クラス1100には、パッケージ宣言1101と、クラス宣言1102とが含まれる。パッケージ宣言1101には、パッケージ名「printlibrary」が定義されている。クラス宣言1102には、各機器情報に対するメソッド宣言1103~1110が含まれる。
メソッド宣言1103には、フィールド名「IPアドレス」の機器情報を取得(読み取る)ためのメソッド「getIPAddress」が定義されている。また、メソッド宣言1103には、このメソッド「getIPAddress」のアクセスレベルを示す修飾子(以降では、「アクセス修飾子」と表す。)「public」が定義されている。このため、メソッド「getIPAddress」は、同一パッケージ以外のパッケージに属するクラス(すなわち、印刷ライブラリ120以外のプログラムに定義されたクラス)からも呼び出すことができる。これにより、フィールド名「IPアドレス」の機器情報の読取範囲「全域」が実現され、当該機器情報をベンダ開発プログラム110からも読み取ることができるようになる。
メソッド宣言1104には、フィールド名「IPアドレス」の機器情報を更新(書き換える)ためのメソッド「setIPAddress」が定義されている。また、メソッド宣言1104では、このメソッド「setIPAddress」のアクセス修飾子が定義されていない。このため、メソッド「setIPAddress」は、同一パッケージ内のクラス(すなわち、印刷ライブラリ120に定義されたクラス)からのみ呼び出すことができる。これにより、フィールド名「IPアドレス」の機器情報の書換範囲「ライブラリ内」が実現され、当該機器情報を印刷ライブラリ120以外のプログラムからは書き換えすることができないようになる。なお、アクセス修飾子がメソッドに対して定義されていない場合、このメソッドのアクセスレベルは、同一パッケージ内からのみ呼び出し可能となる。すなわち、この場合、同一パッケージでないベンダ開発プログラム110からは、当該メソッドを呼び出すことができない。
メソッド宣言1105には、フィールド名「モデル名」の機器情報を読み取るためのメソッド「getModelName」が定義されている。また、メソッド宣言1105には、このメソッド「getModelName」のアクセス修飾子「public」が定義されている。これにより、メソッド「getIPAddress」と同様に、フィールド名「モデル名」の機器情報の読取範囲「全域」が実現される。
メソッド宣言1106には、フィールド名「モデル名」の機器情報を書き換えるためのメソッド「setModelName」が定義されている。また、メソッド宣言1106では、このメソッド「setModelName」のアクセス修飾子が定義されていない。これにより、メソッド「setIPAddress」と同様に、フィールド名「モデル名」の機器情報の書換範囲「ライブラリ内」が実現される。
メソッド宣言1107には、フィールド名「サポートPDL」の機器情報を読み取るためのメソッド「getSupportPDL」が定義されている。また、メソッド宣言1107では、このメソッド「getSupportPDL」のアクセス修飾子が定義されていない。これにより、上記と同様に、フィールド名「サポートPDL」の機器情報の読取範囲「ライブラリ内」が実現される。
メソッド宣言1108には、フィールド名「サポートPDL」の機器情報を書き換えるためのメソッド「setSupportPDL」が定義されている。また、メソッド宣言1108では、このメソッド「setSupportPDL」のアクセス修飾子が定義されていない。これにより、上記と同様に、フィールド名「サポートPDL」の機器情報の書換範囲「ライブラリ内」が実現される。
メソッド宣言1109には、フィールド名「ネットワーク情報」の機器情報を読み取るためのメソッド「getNetworkInfo」が定義されている。また、メソッド宣言1109では、このメソッド「getNetworkInfo」のアクセス修飾子が定義されていない。これにより、上記と同様に、フィールド名「ネットワーク情報」の機器情報の読取範囲「ライブラリ内」が実現される。
メソッド宣言1110には、フィールド名「ネットワーク情報」の機器情報を書き換えるためのメソッド「setNetworkInfo」が定義されている。また、メソッド宣言1108では、このメソッド「setNetworkInfo」のアクセス修飾子が定義されていない。これにより、上記と同様に、フィールド名「ネットワーク情報」の機器情報の書換範囲「ライブラリ内」が実現される。
以上のように、機器情報クラス1100では、機器情報を操作(読み取り又は書き換え)するためのメソッドに対して、アクセス修飾子「public」を定義することで、他のパッケージに属するクラスからも機器情報に対する操作を行うことができるようになる。一方で、機器情報クラス1100では、機器情報を操作するためのメソッドに対して、アクセス修飾子を定義しないことで、他のパッケージに属するクラスからは機器情報に対する操作を行えないようにすることができる。
なお、機器情報インスタンス200に対する機器情報の設定は、例えば、この機器情報インスタンス200の生成時に行っても良い。この場合、初期設定用のパラメータを引数として受け取って、機器情報の初期化を行うメソッド(コンストラクタ)がベンダ開発プログラム110のプログラムコード内に定義されている必要がある。コンストラクタは、引数として、IPアドレス、モデル名、サポートPDL、及びネットワーク情報を受け取って、メソッド宣言1103、1105、1107、1109に定義された各メソッドでIPアドレス、モデル名、サポートPDL、及びネットワーク情報をそれぞれ取得可能なように定義されていれば良い。また、機器情報インスタンス200の生成後は機器情報が変更されない場合、メソッド宣言1104、1106、1108、1110は不要であるため、この場合、これらのメソッド宣言は機器情報クラス1100に定義されていなくても良い。
次に、印刷設定情報インスタンス300を実現する印刷設定情報クラス1200について、図10を参照しながら説明する。図10は、印刷設定情報クラス1200の一例を示す図である。印刷設定情報インスタンス300は、例えば図10に示す印刷設定情報クラス1200をインスタンス化することで生成される。
図10に示すように、印刷設定情報クラス1200には、パッケージ宣言1201と、クラス宣言1202とが含まれる。パッケージ宣言1201には、パッケージ名「printlibrary」が定義されている。クラス宣言1202には、各印刷設定情報に対するメソッド宣言1203~1208が含まれる。
メソッド宣言1203には、フィールド名「部数」の印刷設定情報を読み取るためのメソッド「getCopies」が定義されている。また、メソッド宣言1203には、このメソッド「getCopies」のアクセス修飾子「public」が定義されている。これにより、機器情報クラス1100で説明したのと同様に、フィールド名「部数」の印刷設定情報の読取範囲「全域」が実現される。
メソッド宣言1204には、フィールド名「部数」の印刷設定情報を書き換えるためのメソッド「setCopies」が定義されている。また、メソッド宣言1204には、このメソッド「setCopies」のアクセス修飾子「public」が定義されている。これにより、機器情報クラス1100で説明したのと同様に、フィールド名「部数」の印刷設定情報の書換範囲「全域」が実現される。
メソッド宣言1205には、フィールド名「印刷ページ範囲」の印刷設定情報を読み取るためのメソッド「getPrintPage」が定義されている。また、メソッド宣言1205には、このメソッド「getPrintPage」のアクセス修飾子「public」が定義されている。これにより、上記と同様に、フィールド名「印刷ページ範囲」の印刷設定情報の読取範囲「全域」が実現される。
メソッド宣言1206には、フィールド名「印刷ページ範囲」の印刷設定情報を書き換えるためのメソッド「setPrintPage」が定義されている。また、メソッド宣言1206には、このメソッド「setPrintPage」のアクセス修飾子「public」が定義されている。これにより、上記と同様に、フィールド名「印刷ページ範囲」の印刷設定情報の書換範囲「全域」が実現される。
メソッド宣言1207には、フィールド名「印刷カラー」の印刷設定情報を読み取るためのメソッド「getColor」が定義されている。また、メソッド宣言1207には、このメソッド「getColor」のアクセス修飾子「public」が定義されている。これにより、上記と同様に、フィールド名「印刷カラー」の印刷設定情報の読取範囲「全域」が実現される。
メソッド宣言1208には、フィールド名「印刷カラー」の印刷設定情報を書き換えるためのメソッド「setColor」が定義されている。また、メソッド宣言1208には、このメソッド「setColor」のアクセス修飾子「public」が定義されている。これにより、上記と同様に、フィールド名「印刷カラー」の印刷設定情報の書換範囲「全域」が実現される。
以上のように、印刷設定情報クラス1200では、印刷設定情報を操作(読み取り又は書き換え)するためのメソッドに対して、アクセス修飾子「public」を定義することで、他のパッケージに属するクラスからも印刷設定情報に対する操作を行うことができるようになる。一方で、印刷設定情報クラス1200では、印刷設定情報を操作するためのメソッドに対して、アクセス修飾子を定義しないことで、他のパッケージに属するクラスからは印刷設定情報に対する操作を行えないようにすることができる。
次に、機器情報取得部121を実現する機器情報取得クラス1300について、図11を参照しながら説明する。図11は、機器情報取得クラス1300の一例を示す図である。機器情報取得部121は、例えば図11に示す機器情報取得クラス1300をインスタンス化することで生成される。
図11に示すように、機器情報取得クラス1300には、パッケージ宣言1301と、クラス宣言1302とが含まれる。パッケージ宣言1301には、パッケージ名「printlibrary」が定義されている。クラス宣言1302には、メソッド宣言1303が含まれる。
メソッド宣言1303には、機器20から機器情報を取得するためのメソッド「getMfpInfo」が定義されている。また、メソッド宣言1303には、このメソッド「getMfpInfo」のアクセス修飾子「public」が定義されている。これにより、メソッド「getMfpInfo」は、同一パッケージ以外のパッケージに属するクラス(すなわち、印刷ライブラリ120以外のプログラムに定義されたクラス)からも呼び出すことができる。
次に、印刷処理部122を実現する印刷処理クラス1400について、図12を参照しながら説明する。図12は、印刷処理クラス1400の一例を示す図である。印刷処理部122は、例えば図12に示す印刷処理クラス1400をインスタンス化することで生成される。
図12に示すように、印刷処理クラス1400には、パッケージ宣言1401と、クラス宣言1402とが含まれる。パッケージ宣言1401には、パッケージ名「printlibrary」が定義されている。クラス宣言1402には、メソッド宣言1403が含まれる。
メソッド宣言1403には、印刷要求を機器20に送信するためのメソッド「print」が定義されている。また、メソッド宣言1403には、このメソッド「print」のアクセス修飾子「public」が定義されている。これにより、メソッド「print」は、同一パッケージ以外のパッケージに属するクラス(すなわち、印刷ライブラリ120以外のプログラムに定義されたクラス)からも呼び出すことができる。
なお、メソッド宣言1403には、メソッド「print」の引数として、「MfpInfo info」と、「PrintData data」と、「PrintSetting setting」とが定義されている。これは、メソッド「print」の引数として、機器情報と、印刷対象データと、印刷設定情報とが指定されることを示している。
次に、ベンダ開発プログラム110のプログラムコード1500について、図13を参照しながら説明する。図13は、ベンダ開発プログラム110のプログラムコード1500の一例を示す図である。なお、図13では、一例として、機器情報取得要求部111と、印刷対象データ設定部113と、印刷設定部114と、印刷実行要求部116とにそれぞれ対応するコードが定義されたプログラムコード1500について説明する。表示制御部112や実行操作受付部115等に対応するコードは別途それぞれ定義する必要がある。
図13に示すように、プログラムコード1500には、パッケージ宣言1501と、クラス宣言1502とが含まれる。パッケージ宣言1501には、パッケージ名「printapp」が定義されている。このため、ベンダ開発プログラム110は、パッケージ名「printlibrary」に属する各クラスに定義されたメソッドのうち、アクセス修飾子「public」が定義されていないメソッドを呼び出すことができない。
クラス宣言1502には、印刷実行クラス1503が含まれる。そして、印刷実行クラス1503には、機器情報取得要求部111に対応するコードが定義されたコード定義1504と、印刷設定部114に対応するコードが定義されたコード定義1505とが含まれる。また、印刷実行クラス1503には、印刷対象データ設定部113に対応するコードが定義されたコード定義1506と、印刷実行要求部116に対応するコードが定義されたコード定義1507とが含まれる。
コード定義1507に示すように、ベンダ開発プログラム110は、パッケージ名「printlibrary」に属する印刷処理クラス1400のメソッド「print」を呼び出す際に、機器情報インスタンス200を示す「info」を引数に指定する。これにより、メソッド「print」における処理で、機器情報インスタンス200のアクセス修飾子「public」が定義されていないメソッドを呼び出した上で、機器20に対して、処理要求(印刷要求)を行うことができる。例えば、メソッド「print」における処理で、機器情報インスタンス200を示す「info」のメソッド「getSupportPDL」を呼び出してフィールド名「サポートPDL」の機器情報を取得した上で、この機器情報を指定した印刷要求を機器20に行うことができる。
このため、印刷アプリケーション100は、機器20に対して、ベンダ開発プログラム110が操作することができない情報(例えば、フィールド名「サポートPDL」の機器情報やフィールド名「ネットワーク情報」の機器情報)を使用した処理要求(印刷要求)を行うことが可能となる。
<印刷処理>
次に、本実施形態に係る印刷システム1の印刷処理について説明する。以降では、端末装置10のユーザが、印刷アプリケーション100を用いて、機器20で印刷を行う場合の処理について、図14を参照しながら説明する。図14は、第一の実施形態に係る印刷処理の一例を示すシーケンス図である。
以降の図14では、機器情報クラス1100及び印刷設定情報クラス1200を除いて、ベンダ開発プログラム110及び印刷ライブラリ120に定義されている各クラスはインスタンス化されているものとして説明する。なお、ベンダ開発プログラム110及び印刷ライブラリ120に定義されている各クラスで、インスタンス化されていないクラスがあっても良い。この場合、当該クラスにより実現される機能部(インスタンス)の処理を実行する前に、適宜、インスタンス化されれば良い。また、機器情報クラス1100及び印刷設定情報クラス1200も予めインスタンス化されていても良い。
まず、ベンダ開発プログラム110の機器情報取得要求部111は、ユーザによる機器情報の取得操作を受け付ける(ステップS101)。ユーザは、例えば、表示制御部112により表示された所定の画面において、近くに設置されている機器20の一覧の中から所望の機器20を選択する操作を行うことで、機器情報の取得操作を行うことができる。又は、例えば、機器20の筐体に貼り付け等されているQRコード(登録商標)を端末装置10のカメラで撮像することで、機器情報の取得操作を行っても良い。
ベンダ開発プログラム110の機器情報取得要求部111は、ユーザによる機器情報の取得操作を受け付けると、機器情報の取得を機器情報取得部121に要求する(ステップS102)。機器情報取得要求部111は、機器情報取得クラス1300のメソッド宣言1303に定義されているメソッド「getMfpInfo」を呼び出すことで、機器情報の取得要求を行うことができる。
印刷ライブラリ120の機器情報取得部121は、機器情報の取得要求を受け取ると、機器20に対して、機器情報の問い合わせを行う(ステップS103)。機器情報取得部121は、例えばBluetooth等の近距離無線通信により、機器20に対して、機器情報の問い合わせを行うことができる。なお、近距離無線通信は、Bluetoothに限られず、例えば、BLE(Bluetooth Low Energy)やZigbee等であっても良い。又は、赤外線やRFID(Radio Frequency Identification)等が用いられても良い。
そして、機器情報取得部121は、上記の問い合わせに応じて機器20から返信された機器情報を受信する。これにより、機器情報取得部121は、IPアドレス、モデル名、サポートPDL、ネットワーク情報等の機器情報を機器20から取得することができる。
なお、上記のステップS103では、Bluetooth等の近距離無線通信により機器20から機器情報を取得する場合について説明したが、これに限られない。機器情報取得部121は、例えば、機器20の筐体に貼り付け等されているQRコードをカメラで撮像することで、このQRコードに埋め込まれている機器情報を取得しても良い。又は、機器情報取得部121は、近距離無線通信以外の無線通信(例えば、Wi-Fi等)により、機器20から機器情報を取得しても良い。例えば、端末装置10は、自身のIPアドレスを機器20に通知した上で、この通知に対する応答として、Wi-Fi等の無線通信により、機器情報を機器20から取得しても良い。
印刷ライブラリ120の機器情報取得部121は、機器20から機器情報を取得すると、機器情報インスタンス200を生成する(ステップS104)。機器情報インスタンス200は、機器情報クラス1100をインスタンス化することで生成される。
次に、印刷ライブラリ120の機器情報取得部121は、機器20から取得した機器情報を機器情報インスタンス200に設定する(ステップS105)。
すなわち、機器情報取得部121は、機器20から取得したIPアドレスを引数に指定した上で、機器情報クラス1100のメソッド宣言1104に定義されているメソッド「setIPAddress」を呼び出す。これにより、フィールド名「IPアドレス」の機器情報が機器情報インスタンス200に設定される。
同様に、機器情報取得部121は、機器20から取得したモデル名を引数に指定した上で、機器情報クラス1100のメソッド宣言1106に定義されているメソッド「setModelName」を呼び出す。これにより、フィールド名「モデル名」の機器情報が機器情報インスタンス200に設定される。
同様に、機器情報取得部121は、機器20から取得したサポートPDLを引数に指定した上で、機器情報クラス1100のメソッド宣言1108に定義されているメソッド「setSupportPDL」を呼び出す。これにより、フィールド名「サポートPDL」の機器情報が機器情報インスタンス200に設定される。
同様に、機器情報取得部121は、機器20から取得したネットワーク情報を引数に指定した上で、機器情報クラス1100のメソッド宣言1110に定義されているメソッド「setNetworkInfo」を呼び出す。これにより、フィールド名「ネットワーク情報」の機器情報が機器情報インスタンス200に設定される。
そして、機器情報取得部121は、機器20から取得した各機器情報が設定された機器情報インスタンス200をベンダ開発プログラム110に返信する。
ベンダ開発プログラム110の表示制御部112は、機器情報取得部121から返信された機器情報インスタンス200から機器情報を取得する。そして、表示制御部112は、機器情報インスタンス200から取得した機器情報を表示装置12上に表示する(ステップS106)。
このとき、表示制御部112は、機器情報インスタンス200に保持されている機器情報のうち、読取範囲が「全域」となっている機器情報を取得することができる。すなわち、表示制御部112は、フィールド名「IPアドレス」の機器情報と、フィールド名「モデル名」の機器情報とを機器情報インスタンス200から取得することができる。表示制御部112は、機器情報クラス1100のメソッド宣言1103に定義されているメソッド「getIPAddress」を呼び出すことで、フィールド名「IPアドレス」の機器情報を機器情報インスタンス200から取得することができる。同様に、表示制御部112は、機器情報クラス1100のメソッド宣言1105に定義されているメソッド「getModelName」を呼び出すことで、フィールド名「モデル名」の機器情報を取得することができる。
なお、表示制御部112は、上記で取得した機器情報を用いて、後述するステップS109で印刷設定情報の指定操作を受け付けるための画面における選択肢を制限することができる。例えば、表示制御部112は、フィールド名「モデル名」の機器情報に基づいて、モノクロ印刷のみ対応した機器20であることを判断して、印刷設定情報として「カラー」を指定できないように制限する(例えば、「カラー」を選択するための選択肢を非表示にする等)ことができる。
また、表示制御部112は、例えば、複数の機器20の機器情報を取得した場合には、これらの機器情報を用いて、ユーザが出力先の機器20を選択するための機器一覧画面等を生成及び表示しても良い。機器一覧画面が表示されることで、ユーザは、複数の機器20の中から出力先の機器20(印刷実行する機器20)を選択することができるようになる。
一方で、表示制御部112は、フィールド名「サポートPDL」の機器情報と、フィールド名「ネットワーク情報」の機器情報とを機器情報インスタンス200から取得することはできない。
したがって、表示装置12上には、表示制御部112により、機器20のIPアドレスとモデル名とが表示される。これにより、例えば、サポートPDLやネットワーク情報等、ユーザが必ずしも参照する必要のない機器情報が表示されることを防止することができる。
ここで、上記のステップS106で表示装置12上に表示される画面の一例として、印刷を実行する機器20の機器情報を確認するための機器確認画面G100を図15に示す。図15は、機器確認画面G100の一例を示す図である。
図15に示す機器確認画面G100には、機器情報表示欄G110が含まれる。機器情報表示欄G110には、機器情報インスタンス200から取得可能な機器情報(すなわち、読取範囲が「全域」である機器情報。具体的には、フィールド名「IPアドレス」の機器情報及びフィールド名「モデル名」の機器情報)が表示される。このように、表示制御部112は、機器情報インスタンス200に保持されている機器情報のうち、読取範囲が「全域」となっている機器情報を機器情報表示欄G110に表示させる。
一方で、表示制御部112は、機器情報インスタンス200から取得することができない機器情報を機器情報表示欄G110に表示することはできない。すなわち、表示制御部112は、読取範囲が「ライブラリ内」である機器情報(具体的には、フィールド名「サポートPDL」の機器情報及びフィールド名「ネットワーク情報」の機器情報)を機器情報表示欄G110に表示することはできない。
次に、ベンダ開発プログラム110の印刷対象データ設定部113は、ユーザによる印刷対象データの選択操作を受け付ける(ステップS107)。ユーザは、例えば、上記のステップS106で機器情報が表示されている画面からコンテンツデータの一覧画面に遷移させた上で、コンテンツデータの一覧画面から所望のコンテンツデータを選択することで、印刷対象データの選択操作を行うことができる。
ベンダ開発プログラム110の印刷対象データ設定部113は、ユーザによる印刷対象データの選択操作を受け付けると、選択されたコンテンツデータを印刷対象データに設定する(ステップS108)。なお、上記のステップS101の処理が実行される前に、印刷対象データが予め設定されている場合等には、上記のステップS107及びステップS108の処理は実行されなくても良い。
次に、ベンダ開発プログラム110の印刷設定部114は、ユーザによる印刷設定情報の指定操作を受け付ける(ステップS109)。ユーザは、例えば、印刷対象データを選択した後に表示される所定の画面において、各印刷設定情報の設定値を指定することで、印刷設定情報の指定操作を行うことができる。なお、ユーザが印刷設定情報を変更しない場合(すなわち、印刷設定情報の設定値としてデフォルト値を用いる場合)、本ステップの処理は実行されなくても良い。
ベンダ開発プログラム110の印刷設定部114は、印刷設定情報インスタンス300を生成する(ステップS110)。印刷設定情報インスタンス300は、印刷設定情報クラス1200をインスタンス化することで生成される。
次に、ベンダ開発プログラム110の印刷設定部114は、上記のステップS109でユーザにより指定された印刷設定情報を印刷設定情報インスタンス300に設定する(ステップS111)。
すなわち、印刷設定部114は、ユーザにより指定された部数を引数に指定した上で、印刷設定情報クラス1200のメソッド宣言1204に定義されているメソッド「setCopies」を呼び出す。これにより、フィールド名「部数」の印刷設定情報が印刷設定情報インスタンス300に設定される。
同様に、印刷設定部114は、ユーザにより指定された印刷ページ範囲を引数に指定した上で、印刷設定情報クラス1200のメソッド宣言1206に定義されているメソッド「setPrintPage」を呼び出す。これにより、フィールド名「印刷ページ範囲」の印刷設定情報が印刷設定情報インスタンス300に設定される。
同様に、印刷設定部114は、ユーザにより指定された印刷カラーを引数に指定した上で、印刷設定情報クラス1200のメソッド宣言1208に定義されているメソッド「setColor」を呼び出す。これにより、フィールド名「印刷カラー」の印刷設定情報が印刷設定情報インスタンス300に設定される。
なお、上記のステップS109で一部の印刷設定情報のみがユーザにより指定された場合(例えば、部数のみが指定された場合)、印刷設定部114は、ユーザにより指定された印刷設定情報のみを印刷設定情報インスタンス300に設定しても良い。又は、印刷設定情報インスタンス300が保持している各印刷設定情報がデフォルト値に初期化されていない場合は、印刷設定部114は、ユーザにより指定されていない印刷設定情報について、この印刷設定情報のデフォルト値を印刷設定情報インスタンス300に設定しても良い。
次に、ベンダ開発プログラム110の実行操作受付部115は、ユーザによる印刷実行操作を受け付ける(ステップS112)。ユーザは、例えば、印刷設定情報を指定した後に表示される所定の画面において、印刷実行ボタンを押下することで、印刷実行操作を行うことができる。
ベンダ開発プログラム110の印刷実行要求部116は、実行操作受付部115により印刷実行操作が受け付けられると、印刷実行を印刷処理部122に要求する(ステップS113)。この印刷実行要求には、機器情報インスタンス200と、印刷対象データと、印刷設定情報インスタンス300とが含まれる。印刷実行要求部116は、機器情報インスタンス200と、印刷対象データと、印刷設定情報インスタンス300とを引数に指定した上で、印刷処理クラス1400のメソッド宣言1403に定義されているメソッド「print」を呼び出すことで、印刷実行要求を行うことができる。
メソッド「print」に対して機器情報インスタンス200が引数に指定されることで、例えば、複数の機器情報インスタンス200が存在する場合(すなわち、例えば、周囲に複数の機器20が存在し、これら複数の機器20からそれぞれ機器情報を取得した場合)、どの機器情報インスタンス200を用いるかを指定することができるようになる。このため、ベンダ開発プログラム110からは操作することができない複数の情報を管理することができるようになる。
例えば、複数の機器情報インスタンス200が存在する場合、例えば、フィールド名「サポートPDL」の機器情報は機器20毎に存在する。この場合、フィールド名「サポートPDL」の機器情報は、いずれもベンダ開発プログラム110からは参照することができない。このため、ベンダ開発プログラム110は、これらの機器情報のうちの一の機器情報を直接指定することはできないものの、機器情報インスタンス200を指定することで、どの機器20のサポートPDLを用いるかを結果的に指定することができるようになる。
印刷ライブラリ120の印刷処理部122は、印刷データ生成部123により、印刷実行要求に含まれる機器情報インスタンス200からサポートPDLを取得する(ステップS114)。すなわち、印刷データ生成部123は、機器情報インスタンス200に保持されている機器情報のうち、フィールド名「サポートPDL」の機器情報を取得する。印刷データ生成部123は、機器情報クラス1100のメソッド宣言1107に定義されているメソッド「getSupprotPDL」を呼び出すことで、フィールド名「サポートPDL」の機器情報を取得することができる。なお、印刷処理部122を実現する印刷処理クラス1400と、機器情報クラス1100とは同一のパッケージ「printlibrary」に属するため、印刷データ生成部123は、メソッド「getSupprotPDL」を呼び出すことができる。
次に、印刷ライブラリ120の印刷処理部122は、印刷データ生成部123により、印刷実行要求に含まれる印刷設定情報インスタンス300から各印刷設定情報を取得する(ステップS115)。すなわち、印刷データ生成部123は、印刷設定情報インスタンス300に保持されている印刷設定情報を取得する。印刷データ生成部123は、印刷設定情報クラス1200のメソッド宣言1203、メソッド宣言1205、及びメソッド宣言1207にそれぞれ定義されているメソッドを呼び出すことで、各印刷設定情報を取得することができる。
次に、印刷ライブラリ120の印刷処理部122は、印刷データ生成部123により、印刷データを生成する(ステップS116)。すなわち、印刷データ生成部123は、上記のステップS114で取得されたサポートPDLと、上記のステップS115で取得された印刷設定情報とを用いて、印刷対象データから印刷データを生成する。このとき、印刷データ生成部123は、上記のステップS114で取得されたサポートPDLが示すデータ形式の印刷データを生成する。
次に、印刷ライブラリ120の印刷処理部122は、印刷要求部124により、印刷実行要求に含まれる機器情報インスタンス200からネットワーク情報を取得する(ステップS117)。すなわち、印刷要求部124は、機器情報インスタンス200に保持されている機器情報のうち、フィールド名「ネットワーク情報」の機器情報を取得する。印刷要求部124は、機器情報クラス1100のメソッド宣言1109に定義されているメソッド「getNetworkInfo」を呼び出すことで、フィールド名「ネットワーク情報」の機器情報を取得することができる。なお、印刷処理部122を実現する印刷処理クラス1400と、機器情報クラス1100とは同一のパッケージ「printlibrary」に属するため、印刷要求部124は、メソッド「getNetworkInfo」を呼び出すことができる。
次に、印刷ライブラリ120の印刷処理部122は、印刷要求部124により、上記のステップS117で取得されたネットワーク情報に基づいて、機器20との通信可否を判定する(ステップS118)。すなわち、印刷要求部124は、例えば、上記のステップS117で取得されたネットワーク情報に含まれるSSIDと、端末装置10が接続しているアクセスポイントのSSIDとを比較することで、端末装置10と機器20とが通信可能であるか否かを判定する。
なお、通信可能であるか否かは、例えば、これらのSSIDを比較して、端末装置10と機器20とが同一ネットワーク内にあるか否かを判定すれば良い。ただし、これに限られず、例えば、端末装置10の通信方式と、機器20の通信方式とを比較して、端末装置10と機器20とが通信可能であるか否かを判定しても良い。
ステップS118において、機器20と通信可能であると判定された場合、印刷ライブラリ120の印刷処理部122は、印刷要求部124により、印刷実行要求に含まれる機器情報インスタンス200からIPアドレスを取得する(ステップS119)。すなわち、印刷要求部124は、機器情報インスタンス200に保持されている機器情報のうち、フィールド名「IPアドレス」の機器情報を取得する。印刷要求部124は、機器情報クラス1100のメソッド宣言1103に定義されているメソッド「getIPAddress」を呼び出すことで、フィールド名「IPアドレス」の機器情報を取得することができる。
次に、印刷ライブラリ120の印刷処理部122は、印刷要求部124により、印刷要求を機器20に送信する(ステップS120)。すなわち、印刷要求部124は、例えばWi-Fi等の無線LANにより、上記のステップS119で取得されたIPアドレス宛に印刷要求を送信する。印刷要求には、上記のステップS116で生成された印刷データが含まれる。これにより、印刷要求を受信した機器20において印刷データの印刷が行われ、印刷結果が返信される。
一方で、ステップS118において、機器20と通信可能でないと判定された場合、印刷ライブラリ120の印刷処理部122は、印刷要求部124により、ベンダ開発プログラム110にエラーを返信する。これにより、例えば、印刷を行うことができないことを示すエラー画面が表示装置12上に表示される。
<第一の実施形態のまとめ>
以上のように、本実施形態に係る印刷システム1では、機器20の製造元企業が提供する印刷ライブラリ120により管理される各種情報について、サードベンダにより開発されたベンダ開発プログラム110が読み取りや書き換えを制限することができる。これにより、本実施形態に係る印刷システム1では、印刷ライブラリ120により管理される各種情報について、ベンダ開発プログラム110により不正に書き換えられてしまったり、不要な情報が参照されてしまったりといった事態を防止することができる。
また、本実施形態に係る印刷システム1では、ベンダ開発プログラム110による情報の書き換えを制限することで、機器20の意図しない動作等を防止することができる。
例えば、ベンダ開発プログラム110によりフィールド名「サポートPDL」の機器情報が書き換えられてしまった場合、図14のステップS116で機器20がサポートしていないデータ形式の印刷データが生成されてしまうことがある。このため、機器20で意図しないエラー(印刷データのデータ形式エラー等)が発生することがある。
また、例えば、フィールド名「IPアドレス」の機器情報が書き換えられてしまった場合、図14のステップS120で印刷要求が意図しない機器20に送信されてしまうことがある。このため、意図しない機器20で印刷が行われてしまうことができる。
なお、本実施形態では、機器20で印刷を行う場合について説明したが、例えば、機器20でスキャンにより生成された画像データ(スキャン画像)をベンダ開発プログラム110が取得する場合についても同様に適用することができる。この場合、印刷ライブラリ120には、機器20からスキャン画像を取得するためのクラス(スキャン画像取得クラス)が定義されていれば良い。そして、スキャン画像取得クラスにより実現されるスキャン画像取得部が、機器情報に基づいて、機器20からスキャン画像を取得すれば良い。
[第二の実施形態]
次に、第二の実施形態について説明する。第一の実施形態では機器20がMFPである場合について説明したが、第二の実施形態では機器20がプロジェクタである場合について説明する。
なお、第二の実施形態では、主に、第一の実施形態との相違点について説明し、第一の実施形態と同様の構成要素については、適宜、その説明を省略又は簡略化する。
<全体構成>
まず、本実施形態に係る投影システム2の全体構成について、図16を参照しながら説明する。図16は、第二の実施形態に係る投影システム2の全体構成の一例を示す図である。
図16に示すように、本実施形態に係る投影システム2には、1台以上の端末装置10と、1台以上の機器20とが含まれる。また、端末装置10と機器20とは、例えば、Bluetooth等の近距離無線通信を用いて、通信可能に接続される。更に、端末装置10と機器20とは、例えば、Wi-Fi等の無線LANを用いて、通信可能に接続される。
機器20は、プロジェクタ等の投影装置である。機器20は、端末装置10からの要求に応じて、投影処理を行う。なお、機器20のハードウェア構成としては、例えば、一般的なプロジェクタのハードウェア構成とすれば良い。
端末装置10は、スマートフォン等の情報処理装置である。端末装置10には、サードベンダにより開発され、機器20と連携した処理を行う投影アプリケーション400がインストールされている。端末装置10のユーザは、投影アプリケーション400を用いて、機器20で画像の投影を行うことができる。なお、端末装置10のハードウェア構成は第一の実施形態と同様である。
なお、端末装置10は、第一の実施形態と同様に、スマートフォンに限られず、例えば、タブレット端末、ノート型PC(パーソナルコンピュータ)、デスクトップ型PC、ゲーム機器、デジタルカメラ、ウェアラブルデバイス等であっても良い。
<投影アプリケーション400の構成>
ここで、サードベンダにより開発された投影アプリケーション400の構成について、図17を参照しながら説明する。図17は、投影アプリケーション400の構成の一例を説明する図である。
図17に示すように、投影アプリケーション400は、サードベンダにより開発され、独自の機能を提供するプログラムであるベンダ開発プログラム410と、機器20の製造元企業が提供するAPI群である投影ライブラリ420とを有する。
投影ライブラリ420は、投影機能を提供するためのプログラムである。投影ライブラリ420には、例えば、機器20から機器情報を取得するためのAPIや機器20に対して投影を要求するためのAPI等が定義されている。このため、ベンダ開発プログラム410は、投影ライブラリ420に定義されたAPIを呼び出すことで、機器20からの機器情報の取得や機器20への投影要求等、機器20と連携した処理を実現することができる。
なお、第一の実施形態と同様に、ベンダ開発プログラム410及び投影ライブラリ420は、Java言語で開発されたプログラムであるものとする。
<機能構成>
次に、本実施形態に係る端末装置10の機能構成について、図18を参照しながら説明する。図18は、第二の実施形態に係る端末装置10の機能構成の一例を示す図である。
図18に示すように、本実施形態に係る端末装置10は、機器情報取得要求部411と、表示制御部412と、投影対象データ設定部413と、投影設定部414と、実行操作受付部415と、投影実行要求部416とを有する。これら各部は、ベンダ開発プログラム410がCPU16に実行させる処理により実現される。
また、本実施形態に係る端末装置10は、機器情報取得部421と、投影処理部422とを有する。これら各部は、投影ライブラリ420がCPU16に実行させる処理により実現される。
機器情報取得要求部411は、ユーザによる機器情報の取得操作を受け付ける。また、機器情報取得要求部411は、ユーザによる機器情報の取得操作を受け付けると、機器情報の取得を機器情報取得部421に要求する。機器情報取得要求部411は、機器情報取得部421を実現するクラス(このクラスを、以降では「機器情報取得クラス2300」と表す。)内のメソッドを呼び出すことで、機器情報の取得を要求することができる。
表示制御部412は、機器情報取得部421により取得された機器情報を表示装置12上に表示する。
投影対象データ設定部413は、ユーザによる投影対象データの選択操作を受け付ける。投影対象データとは、ユーザが投影を所望するコンテンツデータのことである。コンテンツデータとしては、例えば、画像データや動画データ等が挙げられる。以降では、一例として、コンテンツデータは画像データであるものとする。
また、投影対象データ設定部413は、ユーザによる投影対象データの選択操作を受け付けると、選択されたコンテンツデータを投影対象データに設定する。
投影設定部414は、ユーザによる投影設定情報の指定操作を受け付ける。投影設定情報には、例えば、切替方法等がある。切替方法とは、投影対象の画像を他の画像に切り替える場合における切り替え時の表示態様のことである。
また、投影設定部414は、ユーザによる投影設定情報の指定操作を受け付けると、各投影設定情報が保持される投影設定情報インスタンス600を生成する。そして、投影設定部414は、ユーザにより指定された投影設定情報を投影設定情報インスタンス600に設定する。投影設定部414は、投影設定情報インスタンス600を実現するクラス(このクラスを、以降では「投影設定情報クラス2200」と表す。)内のメソッドを呼び出すことで、投影設定情報を設定することができる。
実行操作受付部415は、ユーザによる投影実行操作を受け付ける。投影実行要求部416は、実行操作受付部415により投影実行操作が受け付けられると、投影実行を投影処理部422に要求する。投影実行要求部416は、投影処理部422を実現するクラス(このクラスを、以降では「投影処理クラス2400」と表す。)内のメソッドを呼び出すことで、投影実行を要求することができる。
機器情報取得部421は、機器情報取得要求部411からの要求に応じて、機器20から機器情報を取得する。このとき、機器情報取得部421は、例えばBluetooth等の近距離無線通信を用いて、機器20から機器情報を取得する。機器情報には、例えば、IPアドレス、モデル名、解像度、ネットワーク情報等がある。
また、機器情報取得部421は、機器20から機器情報を取得すると、取得した各機器情報が保持される機器情報インスタンス500を生成する。そして、機器情報取得部421は、取得した機器情報を機器情報インスタンス500に設定する。機器情報取得部421は、機器情報インスタンス500を実現するクラス(このクラスを、以降では「機器情報クラス2100」と表す。)内のメソッドを呼び出すことで、機器情報を設定することができる。
投影処理部422は、投影実行要求部416からの要求に応じて、投影データを生成した上で、投影要求を機器20に送信する。このとき、投影処理部422は、例えばWi-Fi等の無線LANを用いて、投影要求を機器20に送信する。
投影処理部422には、投影データ生成部423と、投影要求部424とが含まれる。投影データ生成部423は、投影データを生成する。投影データとは、投影対象データを機器20が投影可能なデータ形式(例えば、機器20が投影可能な解像度のデータ形式)に変換したデータである。投影要求部424は、投影データ生成部423により生成された投影データが含まれる投影要求を機器20に送信する。
ここで、機器情報インスタンス500について、図19を参照しながら説明する。図19は、機器情報インスタンス500の一例を示す図である。
図19に示すように、機器情報インスタンス500は、フィールド名「IPアドレス」の機器情報と、フィールド名「モデル名」の機器情報と、フィールド名「解像度」の機器情報と、フィールド名「ネットワーク情報」の機器情報とを保持する。これらの機器情報のうち、フィールド名「IPアドレス」、「モデル名」及び「ネットワーク情報」の機器情報は、第一の実施形態と同様であるため、その説明を省略する。
フィールド名「解像度」の機器情報は、フィールド値として、機器20が投影可能な画像データの解像度が設定される。また、フィールド名「解像度」の機器情報の読取範囲及び書換範囲は「ライブラリ内」である。これは、フィールド名「解像度」の機器情報は、投影ライブラリ420以外のプログラムからは読み取りも書き換えも不可であることを示している。ただし、フィールド名「解像度」の機器情報の読取範囲は、「全域」であっても良い。
なお、フィールド名「解像度」のフィールド値には、「1280×720」等の具体的な解像度の値が設定される場合に限られない。例えば、「XGA(Extended Graphics Array)」や「HD(High Definition video)」等の解像度の規格又は分類が設定されても良い。
以上のように、機器情報インスタンス500には、当該機器情報インスタンス500が保持している機器情報の読取範囲及び書換範囲が設定されている。これにより、機器20の製造元企業は、サードベンダにより開発されたベンダ開発プログラム410が不要な機器情報を参照したり、不正に機器情報を書き換えたりすることを防止することができる。なお、機器情報インスタンス500が保持する機器情報は、上記の「IPアドレス」、「モデル名」、「解像度」、及び「ネットワーク情報」に限られない。機器情報インスタンス500は、例えば、機器番号や製造年月日、製造元企業の情報等、種々の機器情報を保持しても良い。
次に、投影設定情報インスタンス600について、図20を参照しながら説明する。図20は、投影設定情報インスタンス600の一例を示す図である。
図20に示すように、投影設定情報インスタンス600は、フィールド名「切替方法」の投影設定情報を保持する。
フィールド名「切替方法」の投影設定情報は、フィールド値として、ユーザにより設定された切替方法(又はデフォルトの切替方法)が設定される。切替方法とは、上述したように、投影対象の画像を他の画像に切り替える場合における切り替え時の表示態様のことである。フィールド名「切替方法」のフィールド値としては、例えば、「none」、「fade」、「cut」等が挙げられる。「none」は、例えば、投影対象の画像を他の画像に単に切り替える表示態様のことである。「fade」は、例えば、投影対象の画像をフェードアウト、他の画像をフェードインさせることで、投影対象の画像を他の画像に切り替える表示態様のことである。「cut」は、例えば、投影対象の画像をカットアウト、他の画像をカットインさせることで、投影対象の画像を他の画像に切り替える表示態様のことである。
また、フィールド名「切替方法」の投影設定情報の読取範囲及び書換範囲は「全域」である。これは、フィールド名「切替方法」の投影設定情報は、投影ライブラリ420以外のプログラムから読み取りも書き換えも可能であることを示している。
以上のように、投影設定情報インスタンス600には、当該投影設定情報インスタンス600が保持している投影設定情報の読取範囲及び書換範囲が設定されている。これにより、機器20の製造元企業は、サードベンダにより開発されたベンダ開発プログラム410が不要な投影設定情報を参照したり、例えばデフォルト値のみが適用される投影設定情報が書き換えられたりすることを防止することができる。なお、投影設定情報インスタンス600が保持する投影設定情報は、上記の「切替方法」に限られない。
ここで、上記の機器情報インスタンス500及び投影設定情報インスタンス600の読取範囲及び書換範囲は、Java言語のパッケージを用いて実現することができる。例えば、図21に示すように、ベンダ開発プログラム410に定義された各クラスが属するパッケージと、投影ライブラリ420に定義された各クラスが属するパッケージとを異なるパッケージとする。
これにより、機器情報インスタンス500が保持するフィールド(すなわち、機器情報)を操作するメソッドに対してアクセスレベルを定義することで、このフィールドの読取範囲及び書換範囲を制限することができる。同様に、投影設定情報インスタンス600が保持するフィールド(すなわち、投影設定情報)を操作するメソッドに対してアクセスレベルを定義することで、このフィールドの読取範囲及び書換範囲を制限することができる。以降では、投影ライブラリ420に定義された各クラスが属するパッケージのパッケージ名を「projectionlibrary」とする。
なお、図21に示す例では、ベンダ開発プログラム410に定義された各クラスが同一のパッケージに属する場合を示しているが、これに限られず、例えば、これらの各クラスが異なるパッケージに属していても良い。
ここで、機器情報インスタンス500を実現する機器情報クラス2100について、図22を参照しながら説明する。図22は、機器情報クラス2100の一例を示す図である。機器情報インスタンス500は、例えば図22に示す機器情報クラス2100をインスタンス化することで生成される。
図22に示すように、機器情報クラス2100には、パッケージ宣言2101と、クラス宣言2102とが含まれる。パッケージ宣言2101には、パッケージ名「projectionlibrary」が定義されている。クラス宣言2102には、各機器情報に対するメソッド宣言2103~2110が含まれる。
メソッド宣言2103~2106及びメソッド宣言2109~2110は、図9に示す機器情報クラス1100のメソッド宣言1103~1106及びメソッド宣言1109~1110とそれぞれ同様であるため、その説明を省略する。
メソッド宣言2107には、フィールド名「解像度」の機器情報を読み取るためのメソッド「getResolution」が定義されている。また、メソッド宣言2107では、このメソッド「getResolution」のアクセス修飾子が定義されていない。これにより、フィールド名「解像度」の機器情報の読取範囲「ライブラリ内」が実現される。
メソッド宣言2108には、フィールド名「解像度」の機器情報を書き換えるためのメソッド「setResolution」が定義されている。また、メソッド宣言2108では、このメソッド「setResolution」のアクセス修飾子が定義されていない。これにより、フィールド名「解像度」の機器情報の書換範囲「ライブラリ内」が実現される。
以上のように、機器情報クラス2100では、機器情報を操作(読み取り又は書き換え)するためのメソッドに対して、アクセス修飾子「public」を定義することで、他のパッケージに属するクラスからも機器情報に対する操作を行うことができるようになる。一方で、機器情報クラス2100では、機器情報を操作するためのメソッドに対して、アクセス修飾子を定義しないことで、他のパッケージに属するクラスからは機器情報に対する操作を行えないようにすることができる。
次に、投影設定情報インスタンス600を実現する投影設定情報クラス2200について、図23を参照しながら説明する。図23は、投影設定情報クラス2200の一例を示す図である。投影設定情報インスタンス600は、例えば図23に示す投影設定情報クラス2200をインスタンス化することで生成される。
図23に示すように、投影設定情報クラス2200には、パッケージ宣言2201と、クラス宣言2202とが含まれる。パッケージ宣言2201には、パッケージ名「projectionlibrary」が定義されている。クラス宣言2202には、各投影設定情報に対するメソッド宣言2203~2204が含まれる。
メソッド宣言2203には、フィールド名「切替方法」の投影設定情報を読み取るためのメソッド「getSwitch」が定義されている。また、メソッド宣言2203には、このメソッド「getSwitch」のアクセス修飾子「public」が定義されている。これにより、フィールド名「切替方法」の投影設定情報の読取範囲「全域」が実現される。
メソッド宣言2204には、フィールド名「切替方法」の投影設定情報を書き換えるためのメソッド「setSwitch」が定義されている。また、メソッド宣言2204には、このメソッド「setSwitch」のアクセス修飾子「public」が定義されている。これにより、フィールド名「切替方法」の投影設定情報の書換範囲「全域」が実現される。
以上のように、投影設定情報クラス2200では、投影設定情報を操作(読み取り又は書き換え)するためのメソッドに対して、アクセス修飾子「public」を定義することで、他のパッケージに属するクラスからも投影設定情報に対する操作を行うことができるようになる。一方で、投影設定情報クラス2200では、投影設定情報を操作するためのメソッドに対して、アクセス修飾子を定義しないことで、他のパッケージに属するクラスからは投影設定情報に対する操作を行えないようにすることができる。
次に、機器情報取得部421を実現する機器情報取得クラス2300について、図24を参照しながら説明する。図24は、機器情報取得クラス2300の一例を示す図である。機器情報取得部421は、例えば図24に示す機器情報取得クラス2300をインスタンス化することで生成される。
図24に示すように、機器情報取得クラス2300には、パッケージ宣言2301と、クラス宣言2302とが含まれる。パッケージ宣言2301には、パッケージ名「projectionlibrary」が定義されている。クラス宣言2302には、メソッド宣言2303が含まれる。
メソッド宣言2303には、機器20から機器情報を取得するためのメソッド「getProjectorInfo」が定義されている。また、メソッド宣言2303には、このメソッド「getProjectorInfo」のアクセス修飾子「public」が定義されている。これにより、メソッド「getProjectorInfo」は、同一パッケージ以外のパッケージに属するクラス(すなわち、投影ライブラリ420以外のプログラムに定義されたクラス)からも呼び出すことができる。
次に、投影処理部422を実現する投影処理クラス2400について、図25を参照しながら説明する。図25は、投影処理クラス2400の一例を示す図である。投影処理部422は、例えば図25に示す投影処理クラス2400をインスタンス化することで生成される。
図25に示すように、投影処理クラス2400には、パッケージ宣言2401と、クラス宣言2402とが含まれる。パッケージ宣言2401には、パッケージ名「projectionlibrary」が定義されている。クラス宣言2402には、メソッド宣言2403が含まれる。
メソッド宣言2403には、投影要求を機器20に送信するためのメソッド「project」が定義されている。また、メソッド宣言2403には、このメソッド「project」のアクセス修飾子「public」が定義されている。これにより、メソッド「project」は、同一パッケージ以外のパッケージに属するクラス(すなわち、投影ライブラリ420以外のプログラムに定義されたクラス)からも呼び出すことができる。
なお、メソッド宣言2403には、メソッド「project」の引数として、「ProjectorInfo info」と、「ProjectData data」と、「ProjectSetting setting」とが定義されている。これは、メソッド「project」の引数として、機器情報と、投影対象データと、投影設定情報とが指定されることを示している。
次に、ベンダ開発プログラム410のプログラムコード2500について、図26を参照しながら説明する。図26は、ベンダ開発プログラム410のプログラムコード2500の一例を示す図である。なお、図26では、一例として、機器情報取得要求部411と、投影対象データ設定部413と、投影設定部414と、投影実行要求部416とにそれぞれ対応するコードが定義されたプログラムコード2500について説明する。表示制御部412や実行操作受付部415等に対応するコードは別途それぞれ定義する必要がある。
図26に示すように、プログラムコード2500には、パッケージ宣言2501と、クラス宣言2502とが含まれる。パッケージ宣言2501には、パッケージ名「projectionapp」が定義されている。このため、ベンダ開発プログラム410は、パッケージ名「projectionlibrary」に属する各クラスに定義されたメソッドのうち、アクセス修飾子「public」が定義されていないメソッドを呼び出すことができない。
クラス宣言2502には、投影実行クラス2503が含まれる。そして、投影実行クラス2503には、機器情報取得要求部411に対応するコードが定義されたコード定義2504と、投影設定部414に対応するコードが定義されたコード定義2505とが含まれる。また、投影実行クラス2503には、投影対象データ設定部413に対応するコードが定義されたコード定義2506と、投影実行要求部416に対応するコードが定義されたコード定義2507とが含まれる。
コード定義2507に示すように、ベンダ開発プログラム410は、パッケージ名「projectionlibrary」に属する投影処理クラス2400のメソッド「project」を呼び出す際に、機器情報インスタンス500を示す「info」を引数に指定する。これにより、メソッド「project」における処理で、機器情報インスタンス500のアクセス修飾子「public」が定義されていないメソッドを呼び出した上で、機器20に対して、処理要求(投影要求)を行うことができる。例えば、メソッド「project」における処理で、機器情報インスタンス500を示す「info」のメソッド「getResolution」を呼び出してフィールド名「解像度」の機器情報を取得した上で、この機器情報を指定した投影要求を機器20に行うことができる。
このため、投影アプリケーション400は、機器20に対して、ベンダ開発プログラム410が操作することができない情報(例えば、フィールド名「解像度」の機器情報やフィールド名「ネットワーク情報」の機器情報)を使用した処理要求(登録要求)を行うことが可能となる。
<投影処理>
次に、本実施形態に係る投影システム2の投影処理について説明する。以降では、端末装置10のユーザが、投影アプリケーション400を用いて、機器20で画像の投影を行う場合の処理について、図27を参照しながら説明する。図27は、第二の実施形態に係る投影処理の一例を示すシーケンス図である。
以降の図27では、機器情報クラス2100及び投影設定情報クラス2200を除いて、ベンダ開発プログラム410及び投影ライブラリ420に定義されている各クラスはインスタンス化されているものとして説明する。なお、ベンダ開発プログラム410及び投影ライブラリ420に定義されている各クラスで、インスタンス化されていないクラスがあっても良い。この場合、当該クラスにより実現される機能部(インスタンス)の処理を実行する前に、適宜、インスタンス化されれば良い。また、機器情報クラス2100及び投影設定情報クラス2200も予めインスタンス化されていても良い。
まず、ベンダ開発プログラム410の機器情報取得要求部411は、図14のステップS101と同様に、ユーザによる機器情報の取得操作を受け付ける(ステップS201)。
ベンダ開発プログラム410の機器情報取得要求部411は、ユーザによる機器情報の取得操作を受け付けると、機器情報の取得を機器情報取得部421に要求する(ステップS202)。機器情報取得要求部411は、機器情報取得クラス2300のメソッド宣言2303に定義されているメソッド「getProjectorInfo」を呼び出すことで、機器情報の取得要求を行うことができる。
投影ライブラリ420の機器情報取得部421は、図14のステップS103と同様に、機器情報の取得要求を受け取ると、機器20に対して、機器情報の問い合わせを行う(ステップS203)。そして、機器情報取得部421は、上記の問い合わせに応じて機器20から返信された機器情報を受信する。これにより、機器情報取得部421は、IPアドレス、モデル名、解像度、ネットワーク情報等の機器情報を機器20から取得することができる。
投影ライブラリ420の機器情報取得部421は、機器20から機器情報を取得すると、機器情報インスタンス500を生成する(ステップS204)。機器情報インスタンス500は、機器情報クラス2100をインスタンス化することで生成される。
次に、投影ライブラリ420の機器情報取得部421は、機器20から取得した機器情報を機器情報インスタンス500に設定する(ステップS205)。
すなわち、機器情報取得部421は、機器20から取得したIPアドレスを引数に指定した上で、機器情報クラス2100のメソッド宣言2104に定義されているメソッド「setIPAddress」を呼び出す。これにより、フィールド名「IPアドレス」の機器情報が機器情報インスタンス500に設定される。
同様に、機器情報取得部421は、機器20から取得したモデル名を引数に指定した上で、機器情報クラス2100のメソッド宣言2106に定義されているメソッド「setModelName」を呼び出す。これにより、フィールド名「モデル名」の機器情報が機器情報インスタンス500に設定される。
同様に、機器情報取得部421は、機器20から取得した解像度を引数に指定した上で、機器情報クラス2100のメソッド宣言2108に定義されているメソッド「setResolution」を呼び出す。これにより、フィールド名「解像度」の機器情報が機器情報インスタンス500に設定される。
同様に、機器情報取得部421は、機器20から取得したネットワーク情報を引数に指定した上で、機器情報クラス2100のメソッド宣言2110に定義されているメソッド「setNetworkInfo」を呼び出す。これにより、フィールド名「ネットワーク情報」の機器情報が機器情報インスタンス500に設定される。
そして、機器情報取得部421は、機器20から取得した各機器情報が設定された機器情報インスタンス500をベンダ開発プログラム410に返信する。
ベンダ開発プログラム410の表示制御部412は、機器情報取得部421から返信された機器情報インスタンス500から機器情報を取得する。そして、表示制御部412は、機器情報インスタンス500から取得した機器情報を表示装置12上に表示する(ステップS206)。このとき、表示制御部412は、図14のステップS106と同様に、機器情報インスタンス200に保持されている機器情報のうち、読取範囲が「全域」となっている機器情報を取得することができる。これにより、例えば、解像度やネットワーク情報等、ユーザが必ずしも参照する必要のない機器情報が表示されることを防止することができる。
次に、ベンダ開発プログラム410の投影対象データ設定部413は、ユーザによる投影対象データの選択操作を受け付ける(ステップS207)。ユーザは、例えば、上記のステップS206で機器情報が表示されている画面からコンテンツデータの一覧画面に遷移させた上で、コンテンツデータの一覧画面から所望のコンテンツデータを選択することで、投影対象データの選択操作を行うことができる。
ベンダ開発プログラム410の投影対象データ設定部413は、ユーザによる投影対象データの選択操作を受け付けると、選択されたコンテンツデータを投影対象データに設定する(ステップS208)。なお、上記のステップS201の処理が実行される前に、投影対象データが予め設定されている場合等には、上記のステップS207及びステップS208の処理は実行されなくても良い。
次に、ベンダ開発プログラム410の投影設定部414は、ユーザによる投影設定情報の指定操作を受け付ける(ステップS209)。ユーザは、例えば、投影対象データを選択した後に表示される所定の画面において、各投影設定情報の設定値を指定することで、投影設定情報の指定操作を行うことができる。なお、ユーザが投影設定情報を変更しない場合(すなわち、投影設定情報の設定値としてデフォルト値を用いる場合)、本ステップの処理は実行されなくても良い。
ベンダ開発プログラム410の投影設定部414は、投影設定情報インスタンス600を生成する(ステップS210)。投影設定情報インスタンス600は、投影設定情報クラス2200をインスタンス化することで生成される。
次に、ベンダ開発プログラム410の投影設定部414は、上記のステップS209でユーザにより指定された投影設定情報を投影設定情報インスタンス600に設定する(ステップS211)。
すなわち、投影設定部414は、ユーザにより指定された切替方法を引数に指定した上で、投影設定情報クラス2200のメソッド宣言2204に定義されているメソッド「setSwitch」を呼び出す。これにより、フィールド名「切替方法」の投影設定情報が投影設定情報インスタンス600に設定される。
次に、ベンダ開発プログラム410の実行操作受付部415は、ユーザによる投影実行操作を受け付ける(ステップS212)。ユーザは、例えば、投影設定情報を指定した後に表示される所定の画面において、投影実行ボタンを押下することで、投影実行操作を行うことができる。
ベンダ開発プログラム410の投影実行要求部416は、実行操作受付部415により投影実行操作が受け付けられると、投影実行を投影処理部422に要求する(ステップS213)。この投影実行要求には、機器情報インスタンス500と、投影対象データと、投影設定情報インスタンス600とが含まれる。投影実行要求部416は、機器情報インスタンス500と、投影対象データと、投影設定情報インスタンス600とを引数に指定した上で、投影処理クラス2400のメソッド宣言2403に定義されているメソッド「project」を呼び出すことで、投影実行要求を行うことができる。
メソッド「project」に対して機器情報インスタンス500が引数に指定されることで、例えば、複数の機器情報インスタンス500が存在する場合(すなわち、例えば、周囲に複数の機器20が存在し、これら複数の機器20からそれぞれ機器情報を取得した場合)、どの機器情報インスタンス500を用いるかを指定することができるようになる。このため、ベンダ開発プログラム410からは操作することができない複数の情報を管理することができるようになる。
例えば、複数の機器情報インスタンス500が存在する場合、例えば、フィールド名「解像度」の機器情報は機器20毎に存在する。この場合、フィールド名「解像度」の機器情報は、いずれもベンダ開発プログラム410からは参照することができない。このため、ベンダ開発プログラム410は、これらの機器情報のうちの一の機器情報を直接指定することはできないものの、機器情報インスタンス500を指定することで、どの機器20の解像度を用いるかを結果的に指定することができるようになる。
投影ライブラリ420の投影処理部422は、投影データ生成部423により、投影実行要求に含まれる機器情報インスタンス500から解像度を取得する(ステップS214)。すなわち、投影データ生成部423は、機器情報インスタンス500に保持されている機器情報のうち、フィールド名「解像度」の機器情報を取得する。投影データ生成部423は、機器情報クラス2100のメソッド宣言2107に定義されているメソッド「getResolution」を呼び出すことで、フィールド名「解像度」の機器情報を取得することができる。なお、投影処理部422を実現する投影処理クラス2400と、機器情報クラス2100とは同一のパッケージ「projectionlibrary」に属するため、投影データ生成部423は、メソッド「getResolution」を呼び出すことができる。
次に、投影ライブラリ420の投影処理部422は、投影データ生成部423により、投影実行要求に含まれる投影設定情報インスタンス600から投影設定情報を取得する(ステップS215)。すなわち、投影データ生成部423は、投影設定情報インスタンス600に保持されている投影設定情報を取得する。投影データ生成部423は、投影設定情報クラス2200のメソッド宣言2203に定義されているメソッド「getSwitch」を呼び出すことで、フィールド名「切替方法」の投影設定情報を取得することができる。
次に、投影ライブラリ420の投影処理部422は、投影データ生成部423により、投影データを生成する(ステップS216)。すなわち、投影データ生成部423は、上記のステップS214で取得された解像度を用いて、投影対象データから投影データを生成する。このとき、投影データ生成部423は、例えば、当該投影対象データを、上記のステップS214で取得された解像度に変換することで、投影データを生成する。
次に、投影ライブラリ420の投影処理部422は、図14のステップS117と同様に、投影要求部424により、投影実行要求に含まれる機器情報インスタンス500からネットワーク情報を取得する(ステップS217)。
次に、投影ライブラリ420の投影処理部422は、図14のステップS118と同様に、投影要求部424により、上記のステップS217で取得されたネットワーク情報に基づいて、機器20との通信可否を判定する(ステップS218)。
ステップS218において、機器20と通信可能であると判定された場合、投影ライブラリ420の投影処理部422は、図14のステップS119と同様に、投影要求部424により、投影実行要求に含まれる機器情報インスタンス500からIPアドレスを取得する(ステップS219)。
次に、投影ライブラリ420の投影処理部422は、投影要求部424により、投影要求を機器20に送信する(ステップS420)。すなわち、投影要求部424は、例えばWi-Fi等の無線LANにより、上記のステップS219で取得されたIPアドレス宛に投影要求を送信する。投影要求には、上記のステップS216で生成された投影データが含まれる。これにより、投影要求を受信した機器20で投影データが示す画像の投影が行われ、投影結果が返信される。
一方で、ステップS218において、機器20と通信可能でないと判定された場合、投影ライブラリ420の投影処理部422は、投影要求部424により、ベンダ開発プログラム410にエラーを返信する。これにより、例えば、投影を行うことができないことを示すエラー画面が表示装置12上に表示される。
<第二の実施形態のまとめ>
以上のように、本実施形態に係る投影システム2では、プロジェクタである機器20の製造元企業が提供する投影ライブラリ420により管理される各種情報について、サードベンダにより開発されたベンダ開発プログラム410が読み取りや書き換えを制限することができる。これにより、本実施形態に係る投影システム2では、投影ライブラリ420により管理される各種情報について、ベンダ開発プログラム410により不正に書き換えられてしまったり、不要な情報が参照されてしまったりといった事態を防止することができる。
また、本実施形態に係る投影システム2では、ベンダ開発プログラム410による情報の書き換えを制限することで、機器20の意図しない動作等を防止することができる。
[第三の実施形態]
次に、第三の実施形態について説明する。第一の実施形態及び第二の実施形態では、実行可能形式のアプリケーション(印刷アプリケーション100又は投影アプリケーション400)が端末装置10にインストールされているものとして説明したが、当該アプリケーションはプログラムコードが定義されたソースファイルをコンパイル等することで作成される。そこで、第三の実施形態では、例えばPC(パーソナルコンピュータ等)である開発用端末30が、ソースファイルをコンパイルすることで、実行可能形式(例えば、Javaバイトコード)のアプリケーション(印刷アプリケーション100又は投影アプリケーション400)を作成する場合について説明する。以降では、印刷アプリケーション100又は投影アプリケーション400を「アプリケーション700」と表す。
なお、第三の実施形態では、主に、第一の実施形態及び第二の実施形態との相違点について説明し、第一の実施形態及び第二の実施形態と同様の構成要素については、適宜、その説明を省略又は簡略化する。
<機能構成>
まず、本実施形態に係る開発用端末30の機能構成について、図28を参照しながら説明する。図28は、第三の実施形態に係る開発用端末30の機能構成の一例を示す図である。
図28に示すように、本実施形態に係る開発用端末30は、コンパイル処理部800を有する。当該機能部は、開発用端末30にインストールされた1以上のプログラムがCPUに実行させる処理により実現される。
また、本実施形態に係る開発用端末30は、記憶部900を有する。当該記憶部は、例えば、HDDやSSD等の補助記憶装置を用いて実現可能である。なお、当該記憶部は、開発用端末30とネットワークを介して接続される記憶装置等を用いて実現されていても良い。
記憶部900には、ソースファイル910と、ライブラリ920とが記憶されている。ソースファイル910は、作成対象のアプリケーション700が印刷アプリケーション100である場合はベンダ開発プログラム110のソースコードが記述されたファイルであり、作成対象のアプリケーション700が投影アプリケーション400である場合はベンダ開発プログラム410のソースコードが記述されたファイルである。また、ライブラリ920は、作成対象のアプリケーション700が印刷アプリケーション100である場合は印刷ライブラリ120であり、作成対象のアプリケーション700が投影アプリケーション400である場合は投影ライブラリ420である。
なお、ライブラリ920は、例えば、当該ライブラリ920に定義されているAPI(メソッド)の利用方法(例えば、引数の指定方法)等が記載されたマニュアルと共に、機器20の製造元企業等から配布される。
コンパイル処理部800は、ソースファイル910とライブラリ920とを入力して、ソースファイル910をコンパイル(より正確には、ソースファイル910及びライブラリ920をコンパイル)することで、実行可能形式のアプリケーション700を作成する。このとき、コンパイル処理部800は、呼び出し対象のメソッドと、このメソッドの呼び出し元のクラスとの間でアクセス関係が正常に定義されているか否かを判定する。
すなわち、コンパイル処理部800は、呼び出し対象のメソッドが定義されたクラスと、当該メソッドの呼び出し元のクラスとが同一のパッケージに属するか否かを判定する。また、コンパイル処理部800は、これらのクラスが同一のパッケージに属しないと判定された場合に、当該メソッドに対してアクセス識別子「public」が定義されているか否かを判定する。
そして、コンパイル処理部800は、ソースファイル910の全てのメソッドに対してアクセス関係が正常に定義されていると判定した場合、ソースファイル910をコンパイルして、実行可能形式のアプリケーション700を作成する。一方で、コンパイル処理部800は、少なくとも1つのメソッドに対してアクセス関係が正常に定義されていないと判定した場合、例えばエラー画面等を表示する。
<コンパイル処理>
次に、本実施形態に係る開発用端末30が実行するコンパイル処理について説明する。以降では、開発用端末30のユーザ(例えばサードベンダ等のアプリ開発者)が、ソースファイル910をコンパイルして、実行可能形式のアプリケーション700を作成する処理について、図29を参照しながら説明する。図29は、第三の実施形態に係るコンパイル処理の一例を示すフローチャートである。図29に示す処理は、例えば、開発用端末30のユーザによる操作(ソースファイル910のコンパイル開始操作)に応じてソースファイル910及びライブラリ920がコンパイル処理部800に入力されることで実行が開始され、当該ソースファイル910に定義されたメソッドの呼び出し処理を示すコード毎に繰り返し実行される。
まず、コンパイル処理部800は、当該コードに定義された呼び出し対象のメソッドのクラスが、呼び出し元のクラスと同一パッケージであるか否かを判定する(ステップS301)。
ステップS301において、呼び出し対象のメソッドのクラスが、呼び出し元のクラスと同一パッケージでないと判定した場合、コンパイル処理部800は、当該メソッドに対して、アクセス修飾子「public」が定義されているか否かを判定する(ステップS302)。
ステップS301において、呼び出し対象のメソッドのクラスが、呼び出し元のクラスと同一パッケージであると判定した場合、又は、ステップS302において、当該メソッドに対して、アクセス修飾子「public」が定義されていると判定された場合、コンパイル処理部800は、当該メソッドのアクセス関係が正常に定義されていると判定する(ステップS303)。
一方で、ステップS302において、当該メソッドに対して、アクセス修飾子「public」が定義されていないと判定された場合、コンパイル処理部800は、当該メソッドのアクセス関係が正常に定義されていない(エラーである)と判定する(ステップS304)。この場合、コンパイル処理部800は、例えば、ソースファイル910中に定義されたメソッドのアクセス関係が正常でないことを示すエラー画面を表示させて、コンパイル処理を終了させる。
他方、ソースファイル910中の全てのメソッドに対してアクセス関係が正常に定義されていると判定された場合、コンパイル処理部800は、当該ソースファイル910及びライブラリ920をコンパイルして、実行可能形式のアプリケーション700を作成する(ステップS305)。これにより、ライブラリ920により管理される各種情報について、ベンダ開発プログラム110又はベンダ開発プログラム410による操作を制限したアプリケーション700(印刷アプリケーション100又は投影アプリケーション400)が作成される。なお、より正確には、ソースファイル910及びライブラリ920をそれぞれコンパイルすることで作成されるオブジェクトファイルのリンク等が行われることで、当該アプリケーション700が作成される。
本発明は、具体的に開示された上記の実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。