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. }