在Custom TG2480H打印机上打印徽标

时间:2017-06-28 12:43:30

标签: angular typescript printing bitmap bytebuffer

我使用Custom TG2480-H打印机打印收据。除了徽标外,我收到了所有收据。

我有一个代表徽标的单色.bmp文件,并且有正确的尺寸。

我正在使用不同的响应类型检索文件:

this.http.get('/assets/images/brand/logo-bnw.bmp', {
  responseType: ResponseContentType.Blob
}).subscribe((response: Response) => {
  console.log('Blob bytes', this.kiowarePrintService.getBytesFromText(response.text()));
});
this.http.get('/assets/images/brand/logo-bnw.bmp', {
  responseType: ResponseContentType.Text
}).subscribe((response: Response) => {
  console.log('Text bytes', this.kiowarePrintService.getBytesFromText(response.text()));
});
this.http.get('/assets/images/brand/logo-bnw.bmp', {
  responseType: ResponseContentType.ArrayBuffer
}).subscribe((response: Response) => {
  console.log('ArrayBuffer bytes', this.kiowarePrintService.getBytesFromText(response.text()));
});

以下是ResponseContentType的文档及其可能具有的不同值。

这是getBytesFromText的代码:

getBytesFromText(text: string) {
    const bytes: number[] = [];
    for (let i = 0; i < text.length; i++) {
      bytes.push(text.charCodeAt(i));
    }
    return bytes;
  }

将响应转换为字节会打印这些值:

Blob bytes (2) [123, 125]

Text bytes (951) [66, 77, 65533, 3, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 40, 0, 0, 0, 120, 0, 0, 0, 56, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65533, 3, 0, 0, 65533, 14, 0, 0, 65533, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65533, 65533, 65533, 0, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 0, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 0, 65533, 65533, 65533, 65533, 65533, 65533…]

ArrayBuffer bytes (479) [19778, 958, 0, 0, 0, 62, 0, 40, 0, 120, 0, 56, 0, 1, 1, 0, 0, 896, 0, 3780, 0, 3780, 0, 0, 0, 0, 0, 0, 0, 65535, 255, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 255, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 255, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 255, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 255, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 255, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 255, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 255, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 255, 65535, 65535, 65535, 65535, 65535…]

这些似乎都是错误的,Blob字节的数量太低,而其他两个都包含大于字节的数字(> 255)。

我已尝试将这些字节发送到打印机并提出以下内容:

编辑:尝试添加'content-type': 'image/bmp'标题:

    const headers: Headers = new Headers({'Content-Type': 'image/bmp'});
    const options: RequestOptions = new RequestOptions({headers: headers});
    this.http.get('/assets/images/brand/logo-bnw.bmp', options).subscribe((response: Response) => {
      console.log('image/bmp bytes', this.kiowarePrintService.getBytesFromText(response.text()));
    });

记录下来:

image/bmp bytes (951) [66, 77, 65533, 3, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 40, 0, 0, 0, 120, 0, 0, 0, 56, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 65533, 3, 0, 0, 65533, 14, 0, 0, 65533, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65533, 65533, 65533, 0, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 0, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 65533, 0, 65533, 65533, 65533, 65533, 65533, 65533…]

它看起来与文本回复相同

1 个答案:

答案 0 :(得分:2)

您正在对所有返回类型使用response.text()。对于二进制数据,您应该将其保留为blob。您可以使用

访问基础字节而无需转换为文本
response.arrayBuffer()

这应该为您提供正确的字节数组。

这个问题也很相关:Get Image or byte data with http

最佳答案采取的做法:

var blob = new Blob([new Uint8Array(response._body)]