StarXpand SDK for React Native 開発者向けマニュアル Ver. 1.8.0

最終更新日: 2024年 11月 1日

Step.2印刷データの送信 : スプーラー機能

スプーラー機能は、上位端末からの印刷要求をプリンターが常に受付可能とし、受付順に印刷処理を行う機能です。
プリンターは1つの印刷要求をジョブとして管理します。

※ 従来の方法では、印刷完了前に印刷要求をしようとすると、要求の送信が待たされたり、通信エラーとなったりして、前の印刷が完了するまで、新たな印刷要求を受け付けることが出来ませんでした。

スプーラー機能の便利な4大機能

1. 印刷完了前に複数印刷データを送信できる

プリンターが上位端末からの印刷ジョブを貯めておき、受け付けた順番に印刷できます。 MCL32CI/MCL32CBIに対し、用紙保持センサーが用紙を検知している状態でも印刷ジョブを送信することができます。

2. 複数端末から利用できる

複数の上位端末から印刷要求を行っても通信エラーにならず、印刷要求を受け付けられます。

3. 自動再印刷

紙無しなどのエラーで印刷失敗した場合でも、エラー復帰(紙無しの場合は用紙交換)をすると自動で再印刷を行うことができます。

4. 印刷ジョブのステータス・履歴をいつでも参照できる

印刷成功・失敗や、印刷の受付状況を確認できます。
また最新2000件のジョブ情報を確認できます。

Note:
複数のホストデバイス/インターフェイスを同時に接続して利用する場合、いくつかの制限事項があります。
詳しくはマルチインターフェイスご利用時の注意をご確認ください。



スプーラー機能を利用するには

スプーラー機能を利用するには、プリンター本体のスプーラー機能を有効に設定してください。(デフォルト:無効)

また、印刷データの送信: 標準機能で印刷データの送信に使用したprint(commad: string)メソッドの代わりに、 印刷ジョブ設定を含むprint(command: string, jobSettings: StarSpoolJobSetttings)メソッドを使用してください。
その他、印刷ジョブのステータスを確認する機能も用意されています。 スプーラー機能を利用した印刷処理の実装を参考にしてください。



スプーラー機能対応モデル

print(command: string, jobSettings: StarSpoolJobSettings)メソッドを使用できるモデルがスプーラー機能に対応しています。
対象モデルはリンク先にてご確認ください。

スプーラー機能を利用した印刷処理の実装

Step1で作った印刷データをプリンターに送信して印刷を行います。
StarPrinterクラスを利用し、スプーラー機能を利用するために print(command: string, jobSettings: StarSpoolJobSetttings)メソッドを呼び出して印刷データの送信を行います。

以下はサンプルコードの説明です。この手順を参考に印刷データを送信してください。
ページ下部にサンプルコードがあります。 また、SDKのサンプルアプリも参考にしてください。

1プリンターの接続先情報を作ります。
通信に使用するinterfaceTypeと、接続先を指定する identifierをセットしてください。
プリンターを検索するで接続先のプリンターを検索済みの場合、この実装は不要です。
手順2のprinter変数には、onPrinterFoundメソッドで取得した StarPrinterインスタンスをセットしてください。

var settings = new StarConnectionSettings();
settings.interfaceType = InterfaceType.Lan;
settings.identifier = “00:11:62:00:00:01”;

2プリンターの接続先情報を与えて、StarPrinterインスタンスを取得します。

var printer = new StarPrinter(settings);

3Step1で作った印刷データをcommands変数にセットします。

try {
    var commands: string = ...

4StarSpoolJobSettingsクラスにより、印刷ジョブの設定を行います。 以下の例では、プリンターエラー時のリトライ有効、印刷ジョブのタイムアウト30秒、 印刷ジョブに付加する補足情報を”Print from Tablet1”に設定しています。

var jobSettings = StarSpoolJobSettings(true, 30, "Print from Tablet1"); 

5プリンターに接続するため、openメソッドを呼び出します。

await printer.open();

6プリンターに印刷データを送信するため、printメソッドを呼び出します。 戻り値でジョブIDを取得します。

var jobId = await printer.print(commands, jobSettings);

7印刷ジョブのステータスを下記2通りの方法で確認できます。
getSpoolJobStatusメソッドを呼び出し、指定したジョブIDのステータスを取得します。

var jobStatus = await printer.getSpoolJobStatus(jobId); 

getSpoolJobStatusListメソッドを呼び出し、新しく受付した順に指定した数のジョブステータスのリストを取得します。
引数に10を与えた場合、最新から10件のジョブステータスのリストを取得します。

var jobStatusList = await printer.getSpoolJobStatusList(10); 
} 

8エラー時の処理を実装します。errorインスタンスの型によりエラーを判別できます。 発生する可能性のあるエラーはStarPrinterクラスのopenメソッド、 printメソッド、 getSpoolJobStatusメソッド、getSpoolJobStatusListメソッドのAPIリファレンスに記載されています。

} 
catch(error) { 
    if (error instanceof StarIO10UnprintableError) { 
        if (error.codeCode == StarIO10ErrorCode.SpoolerIsDisabled) { 
            // The spooler function is set to disabled. 
            // Please set the printer's spooler function to enable. 
        }
    }
    console.log(`Error: ${String(error)}`); 
}

9プリンターとの接続を切断するため、closeメソッドを呼び出します。

finally { 
    await printer.close();

10printerインスタンスを破棄するため、disposeメソッドを呼び出します。

await printer.dispose(); 
} 
サンプルコード

var settings = new StarConnectionSettings();
settings.interfaceType = InterfaceType.Lan;
settings.identifier = “00:11:62:00:00:01”;

var printer = new StarPrinter(settings);

try {
    // Set the print data created in Step 1 to the commands variable. 
    var commands = ...
    var jobSettings = StarSpoolJobSettings(true, 30, "Print from Tablet1");
    await printer.open();
    var jobId = await printer.print(commands, jobSettings);
    var jobStatus = await printer.getSpoolJobStatus(jobId);
    // var jobStatusList = await printer.getSpoolJobStatusList(10);
}
catch(error) {
    if (error instanceof StarIO10UnprintableError) {
        if (error.codeCode == StarIO10ErrorCode.SpoolerIsDisabled) {
            // The spooler function is set to disabled.
            // Please set the printer's spooler function to enable.
        }
    }
    console.log(`Error: ${String(error)}`);
}
finally {
    await printer.close();
    await printer.dispose();
}

スプーラー機能シーケンス図

2台の上位端末から、1台のプリンターに対して印刷要求を行なった後、全ての印刷が完了するまで印刷ジョブのステータスを確認する処理のシーケンス図です。