如何格式化特定POS打印机的Python字符串

2024-09-27 07:34:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用找到的POS-8330热敏收据打印机HERE

我正在编写将python字符串发送到打印机的代码,下面是实现这一点的代码

companyName = "Hilton Steel and Cement"
paytype = self.payment_Mode
companyName = companyName + "\n\nSale Receipt\n\nOpp Golden Line Mall\nP.O BOX 3404-20100\n TEL: 0727441192\nEMAIL: Hiltonltd@yandex.com"
receiptNo = randint(1, 100000)
finalString = companyName + "\n\nReceipt No:" + str(receiptNo) + "\n\n" + self.getproductList()\
                              + "\n______________________________________\n" + "Total Due:        " + str(self.totaltoBePaid)  + "\n______________________________________\n\n" + "Paid In:     " + paytype + "\n\n"+ "Served By:     " + str(self.user) +"\n" + "Payment:           " + str(self.finalvariables[1])+ "\nBalance:            " + str(self.finalvariables[0])  + "\n\n\nWelcome Back"

open(self.filename, "w").write(finalString)
os.startfile(self.filename, "print")

打印机上有一本编程手册,但我无法从中了解任何内容,尤其是如何应用它。请在以下方面给我一些帮助

  1. 减小字体大小
  2. 减少水平边距,以便打印输出可以从最左边开始

我写的代码在POS打印机上给出了这个结果enter image description here

在常规的全尺寸打印机上

this

这正是我想要的


Tags: 字符串代码posselfhere打印机filename收据
1条回答
网友
1楼 · 发布于 2024-09-27 07:34:38

查看手册,这台打印机使用control characters(ASCII中的前32个字符)启动命令并将其与文本分开

因此,您可以插入文本和打印机命令。只需确保在binary模式下打开输出文件

例如,查看编程手册第17页,命令ESC @会重置打印机。 该命令由两个字符(字节)组成;小数点27后接小数点64。 可以按如下方式创建该命令:

In [7]: bytes([27,64])
Out[7]: b'\x1b@'

您必须设置左边距(命令GS L,第37页)和打印区域宽度(命令GS W,第38页)。 请注意,第38页的GS P命令中解释了“水平运动单位”。默认水平运动单位为25.4/180=0.1411 mm或1/180=0.0055 in

因此,如果要将左侧边距设置为大约5 mm(精确地说是4.94 mm),则必须发送以下命令:

dIn [14]: bytes([29, 76, 35,0])
Out[14]: b'\x1dL#\x00'

值35的计算如下:

In [13]: round(5/(25.4/180))
Out[13]: 35

如果还希望将打印宽度设置为60 mm,GS W命令的参数必须为:

In [15]: round(60/(25.4/180))
Out[15]: 425

这大于255,因此必须将其分散在两个字节上

In [17]: 425-256
Out[17]: 169

命令是:

In [18]: bytes([29, 87, 169,1])
Out[18]: b'\x1dW\xa9\x01'

我认为,您可以组合这些命令:

In [20]: bytes([29, 76, 35, 0, 29, 87, 169,1])
Out[20]: b'\x1dL#\x00\x1dW\xa9\x01'

编辑:

将打印命令添加到数据很容易:

printdata = b'\x1dL#\x00\x1dW\xa9\x01' + finalString.encode('utf-8')

请注意,您确实需要encode字符串,因为打印机命令是二进制的

还请注意,您需要以二进制模式将字符串写入文件

with open(self.filename, "wb") outf:
    outf.write(printdata)
os.startfile(self.filename, "print")

最后,我使用了with,以便在写入后正确关闭文件。您使用它的方式使文件保持打开状态

相关问题 更多 >

    热门问题