Star 打印机插件
从 NativeScript 应用直接打印到 Star 打印机。
npm i --save nativescript-star-printer

NativeScript Star Printer

NPM version Downloads Twitter Follow

这是演示应用的运行情况,打印在 Star Micronics TSP650II 打印机上

安装

对于 NativeScript 7+,请使用 4+ 版本的插件

tns plugin add nativescript-star-printer

API

要求/导入插件

以下所有示例都假设您正在使用 TypeScript,但这里也展示了如何使用纯 JavaScript 要求插件

JavaScript

var StarPrinterPlugin = require("nativescript-star-printer");
var starPrinter = new StarPrinterPlugin.StarPrinter();

TypeScript

import { StarPrinter, SPPrinter, SPCommands } from "nativescript-star-printer";

export Class MyPrintingClass {
private starPrinter: StarPrinter;

constructor() {
this.starPrinter = new StarPrinter();
}
}

searchPrinters

如果您正在搜索蓝牙打印机,请在设备设置中启用蓝牙并配对/连接打印机。然后执行

this.starPrinter.searchPrinters().then(
(printers: Array<SPPrinter>) => {
console.log(`Found ${printers.length} printers`);
}, (err: string) => {
console.log(`Search printers error: ${err}`);
});

SPPrinter 类上最有用的属性是 portName,您需要在其他 API 方法中使用它。

另一个属性是 modelName

connect

一旦您知道打印机端口号,您就可以连接到它。

注意,如果您想打印,不需要连接,因为打印函数会自动执行此操作。

this.starPrinter.connect({
portName: thePortName
}).then((result: SPPrinterStatusResult) => console.log("Connected: " + result.connected));

getPrinterStatus

连接到打印机后,您可以使用此方法轮询“在线”和“纸张”状态。

this.starPrinter.getPrinterStatus({
portName: this.lastConnectedPrinterPort
}).then(result => {
const online: boolean = result.online;
const onlineStatus: PrinterOnlineStatus = result.onlineStatus;
const paperStatus: PrinterPaperStatus = result.paperStatus;
});

print

一旦您获取了要打印的打印机端口号,只需执行

this.starPrinter.print({
portName: this.selectedPrinterPort,
commands: commands
});

那么那些 commands 是什么?让我们重新创建下面的假收据来回答这个问题(请参阅 TypeScript 定义以获取所有选项)

const image = ImageSource.fromFile("~/res/mww-logo.png");

// Note that a standard 3 inch roll is 48 characters wide - we use that knowledge for our "columns"
let commands = new SPCommands()
.image(
image,
true, // diffuse
true // align center (set to 'false' to align left)
)
// alternatively, you can use imagePositioned for a bit more control (on Android this behaves the same as 'image' though)
.imagePositioned(
image,
80, // width
20, // position
true, // both scale
true, // diffuse
true // align center (set to 'false' to align left)
)
.alignCenter()
.text("My Awesome Boutique").newLine()
.text("In a shop near you").newLine()
.setFont("smaller")
.text("Planet Earth").newLine()
.setFont("default")
.newLine()
.text("Date: 11/11/2017 Time: 3:15 PM")
.horizontalLine() // you can pass in the character and the nr of characters (use 48 for a 3" roll, 42 for a smaller one)
.newLine()
.textBold("
SKU Description Total").newLine()
.text("
300678566 Plain White Tee €10.99").newLine()
.text("
300692003 Black Dénim €29.99").newLine()
.text("
300651148 Blue Denim €29.99").newLine()
.newLine()
.newLine()
.barcode({
type: "
Code128",
value: "
12345678",
width: "
large",
height: 60,
appendEncodedValue: false
})
.newLine()
.cutPaper();

this.starPrinter.print({
portName: this.selectedPrinterPort,
commands: commands
});

openCashDrawer

如果现金抽屉通过 Star 打印机的 UTP(网络)连接器连接,您可以从代码中打开抽屉!

this.starPrinter.openCashDrawer({
portName: this.selectedPrinterPort
});

iOS 运行时权限原因

iOS 10+ 在首次连接(蓝牙)外设时需要权限弹出窗口,解释为什么需要连接。

您可以通过向 app/App_Resources/ios/Info.plist 中添加类似以下内容来提供自己的原因

  <key>NSBluetoothPeripheralUsageDescription</key>
<string>My reason justifying fooling around with your Bluetooth</string>

为了避免忘记提供原因而使应用崩溃,此插件在构建过程中将向 .plist 添加空原因。此值将被您指定的任何内容覆盖。欢迎您。

已知限制

在 iOS 上,您需要在真实设备上运行此代码。

未来工作

可能添加更多 print 格式化选项。