如何使用 windows GDI 设置打印字体类型和大小?

How to set font type and size for printing using windows GDI?

我的python程序只需要在某些位置打印文本。我正在使用 windows GDI 来存档目标。

下面的代码可以完成工作,但我需要设置字体类型和大小。

import win32ui
dc = win32ui.CreateDC()
dc.CreatePrinterDC()
dc.StartDoc('Test document')

dc.StartPage()
dc.TextOut(100,2000, 'HELLO WORLD!')
dc.EndPage()
dc.EndDoc()

使用CreateFont然后select将字体输入到设备上下文中,例如:

dc.StartPage()

fontdata = { 'name':'Arial', 'height':100, 'italic':True, 'weight':win32con.FW_NORMAL}
font = win32ui.CreateFont(fontdata);
dc.SelectObject(font)
dc.TextOut(100,2000, 'HELLO WORLD!')
...

为了更好地计算字体大小,请根据 CreateFont WinAPI 参考使用以下内容:

def getfontsize(dc, PointSize):
    inch_y = dc.GetDeviceCaps(win32con.LOGPIXELSY)
    return int(-(PointSize * inch_y) / 72)

示例:现在您可以使用它在页面中央以 11 号字体绘制

fontsize = getfontsize(dc, 11)
fontdata = { 'name':'Consolas', 'height':fontsize}
font = win32ui.CreateFont(fontdata);
dc.SelectObject(font)

另外,LOGPIXELSY/LOGPIXELSYPHYSICALWIDTH/PHYSICALHEIGHT可以更准确地计算坐标。