npm i --save nativescript-star-printer
- 版本:4.2.1
- GitHub: https://github.com/EddyVerbruggen/nativescript-star-printer
- NPM: https://npmjs.net.cn/package/nativescript-star-printer
- 下载
- 昨天:0
- 上周:2
- 上个月:49
NativeScript Star Printer
这是演示应用的运行情况,打印在 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
格式化选项。