我一直在寻找一种在客户端从网络打印的解决方案(https://medium.com/@yehandjoe/angular-2-raw-printing-service-56614d358754)是我一直遵循的建议使用qz托盘以获得打印机的访问权限。我已经按原样复制了代码,但它不起作用。
每当执行 getprinters() 函数时,它都会显示“未定义 qz”
我已经使用这些 npm 命令导入了包
npm install qz-tray sha ws
npm install rsvp,这是我的打印机服务代码:
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/fromPromise';
import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/map';
declare var qz: any;
@Injectable()
export class PrinterService {
constructor() { }
errorHandler(error: any): Observable<any> {
return Observable.throw(error);
}
// Get list of printers connected
getPrinters(): Observable<string[]> {
return Observable
.fromPromise(qz.websocket.connect().then(() => qz.printers.find()))
.map((printers: string[]) => printers)
.catch(this.errorHandler);
}
// Get the SPECIFIC connected printer
getPrinter(printerName: string): Observable<string> {
return Observable
.fromPromise(qz.websocket.connect().then(() => qz.printers.find(printerName)))
.map((printer: string) => printer)
.catch(this.errorHandler);
}
// Print data to chosen printer
printData(printer: string, data: any): Observable<any> {
// Create a default config for the found printer
const config = qz.configs.create(printer);
return Observable.fromPromise(qz.print(config, data))
.map((anything: any) => anything)
.catch(this.errorHandler);
}
// Disconnect QZ Tray from the browser
removePrinter(): void {
qz.websocket.disconnect();
}
}
如果我犯了任何错误,请纠正,或者我真的很感激任何其他替代解决方案