ng-thermal-print
Version:
An angular module to add thermal printing capabilities.
36 lines • 4.58 kB
JavaScript
// Hat-tip to Håvard Lian @ https://github.com/haavardlian/escpos
export class PrintBuffer {
constructor(size = 1024) {
this.buffer = new Uint8Array(size);
this.size = 0;
}
clear() {
this.size = 0;
}
flush() {
const buffer = new Uint8Array(this.buffer.slice(0, this.size));
this.size = 0;
return buffer;
}
write(data) {
this.resize(data.length);
this.buffer.set(data, this.size);
this.size += data.length;
return this;
}
writeUInt8(value) {
this.resize(1);
this.buffer[this.size++] = value & 0xFF;
return this;
}
resize(need) {
const remaining = this.buffer.length - this.size;
if (remaining < need) {
const oldBuffer = this.buffer;
const factor = Math.ceil((need - remaining) / oldBuffer.length) + 1;
this.buffer = new Uint8Array(oldBuffer.length * factor);
this.buffer.set(oldBuffer, 0);
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJpbnRCdWZmZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10aGVybWFsLXByaW50L3NyYy9saWIvYnVpbGRlcnMvUHJpbnRCdWZmZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUVBQWlFO0FBQ2pFLE1BQU0sT0FBTyxXQUFXO0lBSXBCLFlBQVksT0FBZSxJQUFJO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsS0FBSztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNkLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBdUI7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUdELFVBQVUsQ0FBQyxLQUFhO1FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxJQUFZO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDakQsSUFBSSxTQUFTLEdBQUcsSUFBSSxFQUFFO1lBQ2xCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDakM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBIYXQtdGlwIHRvIEjDpXZhcmQgTGlhbiBAIGh0dHBzOi8vZ2l0aHViLmNvbS9oYWF2YXJkbGlhbi9lc2Nwb3NcbmV4cG9ydCBjbGFzcyBQcmludEJ1ZmZlciB7XG4gICAgcHJpdmF0ZSBidWZmZXI6IFVpbnQ4QXJyYXk7XG4gICAgcHJpdmF0ZSBzaXplOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihzaXplOiBudW1iZXIgPSAxMDI0KSB7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSk7XG4gICAgICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgfVxuXG4gICAgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgfVxuXG4gICAgZmx1c2goKTogVWludDhBcnJheSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyLnNsaWNlKDAsIHRoaXMuc2l6ZSkpO1xuICAgICAgICB0aGlzLnNpemUgPSAwO1xuICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH1cblxuICAgIHdyaXRlKGRhdGE6IEFycmF5TGlrZTxudW1iZXI+KTogUHJpbnRCdWZmZXIge1xuICAgICAgICB0aGlzLnJlc2l6ZShkYXRhLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuYnVmZmVyLnNldChkYXRhLCB0aGlzLnNpemUpO1xuICAgICAgICB0aGlzLnNpemUgKz0gZGF0YS5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuXG4gICAgd3JpdGVVSW50OCh2YWx1ZTogbnVtYmVyKTogUHJpbnRCdWZmZXIge1xuICAgICAgICB0aGlzLnJlc2l6ZSgxKTtcbiAgICAgICAgdGhpcy5idWZmZXJbdGhpcy5zaXplKytdID0gdmFsdWUgJiAweEZGO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2l6ZShuZWVkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nID0gdGhpcy5idWZmZXIubGVuZ3RoIC0gdGhpcy5zaXplO1xuICAgICAgICBpZiAocmVtYWluaW5nIDwgbmVlZCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkQnVmZmVyID0gdGhpcy5idWZmZXI7XG4gICAgICAgICAgICBjb25zdCBmYWN0b3IgPSBNYXRoLmNlaWwoKG5lZWQgLSByZW1haW5pbmcpIC8gb2xkQnVmZmVyLmxlbmd0aCkgKyAxO1xuICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgVWludDhBcnJheShvbGRCdWZmZXIubGVuZ3RoICogZmFjdG9yKTtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyLnNldChvbGRCdWZmZXIsIDApO1xuICAgICAgICB9XG4gICAgfVxufSJdfQ==