在 Custom TG2480H 打印机上打印徽标

Posted

技术标签:

【中文标题】在 Custom TG2480H 打印机上打印徽标【英文标题】:Printing a logo on a Custom TG2480H printer 【发布时间】:2017-06-28 12:43:29 【问题描述】:

我正在使用 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)。

无论如何,我都尝试将这些字节发送到打印机,结果如下:

Blob 不打印任何内容

Text

ArrayBuffer

编辑:尝试添加 '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…]

看起来和文本响应一样

【问题讨论】:

您是说您已尝试“将这些字节发送到打印机”。你用了什么方法?您是使用 window.print() 还是创建了其他浏览器插件? 【参考方案1】:

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

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

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

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

最佳答案采取的做法是:

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

【讨论】:

以上是关于在 Custom TG2480H 打印机上打印徽标的主要内容,如果未能解决你的问题,请参考以下文章

VB6 POS 打印机 - 标志注册

css 这会隐藏发票左上角的文本,并将其替换为全宽打印输出徽标。

如何在 Android 的蓝牙打印机上打印图像?

如何使用 PrintDocument 在热敏打印机上打印文本文件?

在 Rails 中打印(在打印机上)文件

无法在网络打印机上使用 cmd 打印 .prn 文件