PyQt4:打印 Code 128 条码字体

PyQt4: printing Code 128 barcode fonts

我正在尝试用 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()

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

实际输出是这样

我在 windows 10 和 python 2.7

中使用 PyQt4

根据您的评论,很明显 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() 在这里是不够的,因为那只会 return 请求 的内容,而不是实际找到的内容)。