【问题标题】:How to set font type and size for printing using windows GDI?如何设置使用 Windows GDI 打印的字体类型和大小?
【发布时间】:2018-07-10 23:58:58
【问题描述】:

我的 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()

【问题讨论】:

    标签: python printing gdi pywin32


    【解决方案1】:

    使用CreateFont,然后在设备上下文中选择字体,例如:

    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 可用于更准确地计算坐标。

    【讨论】:

    • 编辑,添加了基于磅值计算字体大小的改进公式
    猜你喜欢
    • 2018-07-07
    • 1970-01-01
    • 2017-06-14
    • 2016-03-17
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 2013-09-30
    • 2012-08-30
    相关资源
    最近更新 更多