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

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

Step.2 印刷データの送信 : 標準機能

Step1で生成した印刷データをプリンターに送信して印刷を行います。
印刷データの送信には、主にStarPrinterクラスを利用します。

以下の手順を参考に、印刷データを送信してください。
ページ下部にサンプルコードがあります。また、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 = ...

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

await printer.open();

5プリンターに印刷データを送信するためprintメソッドを呼び出します。

await printer.print(commands);

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

}
catch(error) {
    if (error instanceof StarIO10NotFoundError) {
        // Printer not found.
        // This may be due to the printer not being turned on or incorrect connection information.   
    }

    console.log(`Error: ${String(error)}`);
}

Memo

  • インターフェイス自動切り替え機能が動作している場合、プリンターへの接続に失敗したときのエラーはStarIO10CommunicationErrorに集約されます。
    またその際、autoSwitchInterfaceOpenErrorsプロパティ(undefinedとのユニオン型)に値がセットされます。その値を確認することで、インターフェイス自動切り替え機能で各インターフェイスの接続試行が失敗した原因を取得することができます。詳しくはこちらを参照してください。
  • errorCodeプロパティから、より詳細なエラー要因が取得できる場合があります。
    こちらで、printメソッドで発生したエラーの例を用いて詳細を説明しています。

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

finally {
    await printer.close();


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

await printer.dispose();


サンプルコード

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

    var printer = new StarPrinter(settings);

// Set the print data created in Step 1 to the commands variable. 
    var commands: string = ...

    try {
        await printer.open();
    } catch(error) {
        if (error instanceof StarIO10CommunicationError) {
            // If Auto Switch Interface feature is working, the autoSwitchInterfaceOpenErrors property
            // is set to a value indicating errors of each interface.
            var errorDetail = await printer.errorDetail;
            if (errorDetail.autoSwitchInterfaceOpenErrors != undefined) {
                confirmAutoSwitchInterfaceOpenErrors(errorDetail.autoSwitchInterfaceOpenErrors);
            }
        } else {
            // Handle other errors.
        }
 
        await printer.dispose();
        return;
    }
 
    try {
        await printer.print(commands);
    } catch(error) {
        if (error instanceof StarIO10UnprintableError) { 
            // If an error occurs and the print process fails, the StarIO10UnprintableException is thrown.
            // More detailed error information may be obtained with the errorCode property.
            switch (error.errorCode) {
                case StarIO10ErrorCode.DeviceHasError:
                    // An error (e.g. paper empty or cover open) has occurred in the printer.
                    // Please retry after resolving the printer error.
                    break;
                case StarIO10ErrorCode.PrinterHoldingPaper:
                    // The printer is holding paper.
                    // Remove the pre-printed paper and printing will begin.
                    break;
                default:
                    // Other errors occurred.
            }
        } else {
            // Handle other errors.
        }
    } finally {
        await printer.close();
        await printer.dispose();
    }
}

// Confirm the error that occurred when opening the printer with the Auto Switch Interface feature worked.
function confirmAutoSwitchInterfaceOpenErrors(openErrors: Map<InterfaceType,  StarIO10Error | undefined>) {
    var lanError = openErrors.get(InterfaceType.Lan);
    if (lanError != undefined) {
        if (lanError instanceof StarIO10IllegalDeviceStateError) {
            // The network function of the host device cannot be used.
            // Make sure that the host device's Wi-Fi is on and
            // is connected to the network.
        } else if (lanError instanceof StarIO10NotFoundError) {
            // Printer is not found.
            // Make sure that the printer is connected to the network.
        } else {
            // Other errors occurred.
        }
    }
 
    var bluetoothError = openErrors.get(InterfaceType.Bluetooth);
    if (bluetoothError != undefined) {
        if (bluetoothError instanceof StarIO10IllegalDeviceStateError) {
            // The Bluetooth function of the host device cannot be used.
            // Make sure that the host device's Bluetooth is on.
        } else if (bluetoothError instanceof StarIO10NotFoundError) {
            // Printer is not found.
            // Make sure that the printer is paired (and connected when iOS) with the host device.
        } else {
            // Other errors occurred.
        }
    }
 
    var usbError = openErrors.get(InterfaceType.Usb);
    if (usbError != undefined) {
        if (usbError instanceof StarIO10NotFoundError) {
            // Printer is not found.
            // Make sure that the host device and printer are connected with a USB cable.
        } else {
            // Other errors occurred.
        }
    }
 
    // openErrors.get(InterfaceType.BluetoothLE) is always null, because there is
    // no Auto Switch Interface feature enabled model that supports BluetoothLE InterfaceType.
}




インターフェイス自動切り替え機能動作時の失敗原因取得方法

autoSwitchInterfaceOpenErrorsプロパティは InterfaceType をキー、StarIO10Error | undefined を値とする辞書です。インターフェイス自動切り替え機能動作時の各インターフェイスでの接続試行が失敗したときの例外が格納されています。値がundefinedの場合、そのインターフェイスをプリンターが持っていないか、そのインターフェイスでの接続試行は実行されなかったことを示します。
例えば、LANインターフェイスでの接続失敗原因は下記のように判別できます。  
  • StarIO10IllegalDeviceStateError : ホスト端末のネットワーク機能が利用できません。ホスト端末のWi-Fiがオンであること、ネットワークに接続されていることを確認してください。
  • StarIO10NotFoundError : プリンターが見つかりません。プリンターがネットワークに接続されていることを確認してください。
var lanError = openErrors.get(InterfaceType.Lan);
if (lanError != undefined) {
    if (lanError instanceof StarIO10IllegalDeviceStateError) {
        // The network function of the host device cannot be used.
        // Make sure that the host device's Wi-Fi is on and
        // is connected to the network.
    } else if (lanError instanceof StarIO10NotFoundError) {
        // Printer is not found.
        // Make sure that the printer is connected to the network.
    } else {
        // Other errors occurred.
    }
}

失敗原因の取得処理全体は、サンプルコードのconfirmAutoSwitchInterfaceOpenErrorsメソッドを参照してください。



StarIO10ErrorCodeによるエラー詳細情報取得方法

errorCodeプロパティから、より詳細なエラー要因が取得できる場合があります。
例えば、printメソッドで印刷処理に失敗した場合、StarIO10UnprintableErrorがスローされます。その際errorCodeプロパティを参照して、エラー要因ごとに下記のように対処できます。
  • DeviceHasError : プリンターが用紙無しやカバーオープンなどのエラー状態になっています。エラー状態を解消した後、印刷を再試行します。
  • PrinterHoldingPaper : プリンターが用紙を保持しています。前に印刷した用紙を取り除くと、印刷が始まります。
if (error instanceof StarIO10UnprintableError) { 
    // If an error occurs and the print process fails, the StarIO10UnprintableException is thrown.
    // More detailed error information may be obtained with the errorCode property.
    switch (error.errorCode) {
        case StarIO10ErrorCode.DeviceHasError:
            // An error (e.g. paper empty or cover open) has occurred in the printer.
            // Please retry after resolving the printer error.
            break;
        case StarIO10ErrorCode.PrinterHoldingPaper:
            // The printer is holding paper.
            // Remove the pre-printed paper and printing will begin.
            break;
        default:
            // Other errors occurred.
    }
} else {
    // Handle other errors.
}