PyQt4:打印Code 128条形码字体

时间:2017-11-08 14:42:05

标签: python qt printing pyqt code128

我正在尝试在code128中编写一个文本,而打印机也以图片结尾,但它在两种方式中都不起作用,我查看了官方文档和其他论坛问题,但它没有打印出来CODE128

from PyQt4.QtGui import QApplication,QImage,QFont
from PyQt4.QtCore import QSizeF
import sys,time
app = QApplication(sys.argv)
image = QImage(640,100,QImage.Format_Mono)
image.fill(1)
font = QFont('code128',32,QFont.Normal)
painter = QPainter()
painter.begin(image)
painter.setFont(font)
text = "\xccasdfsf\xce"
painter.drawText(10,90,text)
painter.end()
image.save('test.png')

以及我的热敏打印机

from PyQt4.QtGui import QApplication,QImage,QFont,QPrinter
from PyQt4.QtCore import QSizeF
import sys,time
app = QApplication(sys.argv)
printer = QPrinter('POS-58(copy of 1)')
font = QFont('code128',32,QFont.Normal)
painter = QPainter()
painter.begin(printer)
painter.setFont(font)
text = "\xccasdfsf\xce"
painter.drawText(10,90,text)
painter.end()

这两个都不适合我,我找到了解决方案,可能会发生什么?

实际输出为enter image description here

我在使用python 2.7的Windows 10中使用PyQt4

1 个答案:

答案 0 :(得分:0)

从您的评论中可以清楚地看出, Code 128 字体尚未在您的系统上正确安装,因此它将重新回到 MS Shell Dlg 2 默认值。

要确切了解系统上Qt可以使用哪些字体,您可以执行以下操作:

>>> fd = QtGui.QFontDatabase()         
>>> len(fd.families())
209
>>> for f in sorted(fd.families()): print(f)
... 
Adobe Courier
Adobe Helvetica
Adobe New Century Schoolbook
Adobe Times
Adobe Utopia
Arabic Newspaper
B&H Lucida
B&H LucidaBright
B&H LucidaTypewriter
Bitstream Charter
Bitstream Terminal
Bitstream Vera Sans
Bitstream Vera Sans Mono
Bitstream Vera Serif
C059
Cantarell
Code 128
Code 128 low
Code 2 of 5 interleaved
Code 3 de 9
Code Datamatrix
Code EAN13
Code PDF417
D050000L
...

如果此列表中未显示 Code 128 字体,则表明它未正确安装。这个字体有很多免费版本可供在线使用(例如Free Barcode Font),所以我建议您尝试安装其中一些。

如果这些字体仍然没有显示在Qt的字体系列列表中,您可以尝试显式添加它们,如下所示:

>>> QtGui.QFontDatabase.addApplicationFont('C:\\MyFonts\\code128.ttf')

要检查新安装的字体是否有效,请使用QFontInfo

>>> font = QtGui.QFont('Code 128')
>>> info = QtGui.QFontInfo(font)
>>> info.family()
'Code 128'

(注意:在这里检查font.family()是不够的,因为这只会返回请求的内容,而不是实际找到的内容。