我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python 直连打印机打印,可排版设置字体,附标签贴打印案例。

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python 直连打印机打印,可排版设置字体,附标签贴打印案例。

前言:我用的是下面这款标签贴打印机,一开始试了好多打印方式,图片打印很糊,docx文件打印效果最好,但是每次打印会打开Word 影响效率,PDF也会打开PDF软件,打印效果略差于docx文件,TXT文件又不能设置字体,找了好久,结合几个文章得到了以下几乎完美的打印方式,可以直接连接打印机,打印想要的效果。
标签打印机

要根据打印机可打印区域设置好文本大小和位置。
可打印区域用下面这段代码获取:

width  = hDC.GetDeviceCaps (8)  #可打印区域宽像素值height = hDC.GetDeviceCaps (10) #可打印区域高像素值

设置字体需要用到 win32ui.CreateFont 具体参数如下

win32ui.CreateFont 详细参数说明如下:- 'height':字体的高度,以像素为单位。- 'width':字体的宽度,以像素为单位。- 'escapement':字体的倾斜角度,以0.1度为单位。正值表示逆时针旋转。- 'orientation':字体的方向,以0.1度为单位。正值表示逆时针旋转。- 'weight':字体的粗细程度,取值范围为0-1000- 'italic':是否使用斜体,True表示使用斜体,False表示不使用。- 'underline':是否使用下划线,True表示使用下划线,False表示不使用。- 'strike out':是否使用删除线,True表示使用删除线,False表示不使用。- 'charset':字符集,默认为'DEFAULT_CHARSET'- 'out precision':输出精度,默认为'OUT_DEFAULT_PRECIS'- 'clip precision':剪辑精度,默认为'CLIP_DEFAULT_PRECIS'- 'quality':字体质量,默认为'DEFAULT_QUALITY'- 'pitch and family':字体的字母间距和行间距,默认为'DEFAULT_PITCH | FF_DONTCARE'- 'name':字体的名称。说明:以下所有常量都来自win32con,例如:使用字符集常量就用win32con.XXXX_CHARSET表示字符集ANSI_CHARSET:ANSI字符集DEFAULT_CHARSET:默认字符集SYMBOL_CHARSET:符号字符集SHIFTJIS_CHARSET:Shift JIS字符集HANGEUL_CHARSET:韩文字符集GB2312_CHARSET:GB2312字符集CHINESEBIG5_CHARSET:繁体中文字符集OEM_CHARSET:OEM字符集字体输出精度常量:OUT_DEFAULT_PRECIS:默认输出精度OUT_STRING_PRECIS:字符串输出精度OUT_CHARACTER_PRECIS:字符输出精度OUT_STROKE_PRECIS:笔画输出精度OUT_DEVICE_PRECIS:设备输出精度OUT_RASTER_PRECIS:光栅输出精度OUT_TT_PRECIS:TrueType字体输出精度OUT_TT_ONLY_PRECIS:仅限TrueType字体输出精度OUT_OUTLINE_PRECIS:轮廓输出精度OUT_SCREEN_OUTLINE_PRECIS:屏幕轮廓输出精度OUT_PS_ONLY_PRECIS:仅限PostScript输出精度字体剪辑精度常量:CLIP_DEFAULT_PRECIS:默认剪辑精度CLIP_CHARACTER_PRECIS:字符剪辑精度CLIP_STROKE_PRECIS:笔画剪辑精度CLIP_MASK:剪辑精度掩码CLIP_LH_ANGLES:仅使用左上和右下角度进行剪辑CLIP_TT_ALWAYS:始终使用TrueType字体进行剪辑CLIP_DFA_DISABLE:禁用字体关联性CLIP_EMBEDDED:剪辑嵌入的字体字体质量常量:DEFAULT_QUALITY:默认字体质量DRAFT_QUALITY:草稿字体质量PROOF_QUALITY:校对字体质量NONANTIALIASED_QUALITY:非抗锯齿字体质量ANTIALIASED_QUALITY:抗锯齿字体质量CLEARTYPE_QUALITY:ClearType字体质量CLEARTYPE_NATURAL_QUALITY:ClearType自然字体质量字母间距和行间距常量DEFAULT_PITCH:默认字母间距和行间距FIXED_PITCH:固定字母间距和行间距VARIABLE_PITCH:可变字母间距和行间距FF_DONTCARE:不关心字母间距和行间距FF_ROMAN:罗马字母间距和行间距FF_SWISS:瑞士字母间距和行间距FF_MODERN:现代字母间距和行间距FF_SCRIPT:手写字母间距和行间距FF_DECORATIVE:装饰字母间距和行间距

先用简单的代码看下 A4纸 打印效果:

import win32ui, win32conhDC = win32ui.CreateDC()hDC.CreatePrinterDC('Lenovo M7615DNA') # 缺省将使用默认打印机hDC.StartDoc("title")   # 新建打印任务设置名称hDC.StartPage()         # 开始一个页面DataList = [    [15 , 14  , '字体字号,宋体 200'  , {'name': '宋体', 'height': 200}],    [15 , 450 , '一整行逆时针倾斜9度' , {'name': '宋体', 'height': 150, 'escapement' : 90 }],    [15 , 800 , '这个字体旋转好像没用', {'name': '黑体', 'height': 180, 'orientation': 90}],    [1515,1000, '一整行顺时针倾斜90度', {'name': '宋体', 'height': 150, 'escapement' :-900}],    [15 , 1200, '字体加粗1000' , {'name': '宋体', 'height': 150, 'weight'     : 1000}],    [15 , 1580, '斜体字'       , {'name': '宋体', 'height': 150, 'italic'     : 1}],    [15 , 1980, '下划线'       , {'name': '宋体', 'height': 150, 'underline'  : 1}],    [15 , 2380, '删除线'       , {'name': '宋体', 'height': 150, 'strike out' : 1}]    ]for data in DataList:    font = win32ui.CreateFont(data[3])     # 设置字体    hDC.SelectObject(font)                 # 将字体对象应用于设备上下文    hDC.TextOut(data[0], data[1], data[2]) # 写入文本 fontdict = {    'name'  : '宋体',  # 字体名称 str    'height': 150,    # 字体高 int    'width' : 150,    # 字体宽 int    'escapement' : 0, # 字符串倾斜角度 int    'orientation': 0, # 字符旋转角度 int    'weight' : 600,   # 字体的粗细 int    'italic' : 0,     # 倾斜 byte 0或1    'underline'  : 0, # 下划线 byte    'strike out' : 0, # 删除线 byte    'charset': win32con.DEFAULT_CHARSET,            # 字符集 int    'out precision' : win32con.OUT_DEFAULT_PRECIS,  # 输出精度 int    'clip precision': win32con.CLIP_DEFAULT_PRECIS, # 剪切精度 int    'quality' : win32con.DEFAULT_QUALITY,           # 输出质量 int    'pitch and family': win32con.DEFAULT_PITCH | win32con.FF_DONTCARE, # 字体间距和字体集 int    }# 创建一个字体对象font = win32ui.CreateFont(fontdict)hDC.SelectObject(font)hDC.TextOut(15, 2800, "Hello, World!测试")hDC.EndPage()  #关闭页面hDC.EndDoc()   #关闭任务

打印效果如下图:
打印效果

下面附上我标签贴打印部分代码,效果上图红框内容:

# -*- coding: utf-8 -*- import win32ui, timehDC = win32ui.CreateDC()hDC.CreatePrinterDC('PQ00')#hDC.StartDoc("标签名")hDC.StartPage()Ctime = time.strftime("%y/%m/%d %H:%M",time.localtime())Num   = 'A201'Name  = '张三 男 66'DataList = [    [15 , 14, '编号:', {'name': '宋体', 'height': 27}],    [15 , 54, '姓名:', {'name': '宋体', 'height': 27}],    [15 , 94, '项目:', {'name': '宋体', 'height': 27}],    [90 , 10,  Num   , {'name': '宋体', 'height': 33, 'weight': 1000}],    [190, 14,  Ctime , {'name': '宋体', 'height': 25}],    [90 , 52,  Name  , {'name': '宋体', 'height': 33, 'weight': 1000}],    ]for data in DataList:    font = win32ui.CreateFont(data[3])    hDC.SelectObject(font)    hDC.TextOut(data[0], data[1], data[2])# hDC.DrawText(txt,(ulc_x,ulc_y,lrc_x,lrc_y),win32con.DT_LEFT)  项目 = '个人档案、个人档案、个人档案、个人档案、个人档案、个人档案、个人档案、个人档案、个人档案、个人档案'font = win32ui.CreateFont({'name':'宋体', 'height': 22,})hDC.SelectObject(font)#长文本换行fsize  = 22  # 字体大小min_x  = 24  # X轴最小值max_x  = 360 # X轴最大值text_x = 90  # 字X坐标text_y = 100 # 字Y坐标font = win32ui.CreateFont({'name':'宋体', 'height': fsize})hDC.SelectObject(font)#用list(项目)转为列表,后用for加位置判断一个个字打入,实现换行for text in list(项目):    if text_x > max_x and text not in ['、']: #判断 text_x是否超过最大设定值 及 是否'、'开头        text_y += fsize + 3 # 行间距3        text_x = min_x    hDC.TextOut(text_x, text_y, text)    text_x += fsize + 0 # 字间距0hDC.EndPage()hDC.EndDoc()

也可以打印二维码和条形码,先绘制好图像的PIL对象-image,用下面代码绘入打印页面

dib = ImageWin.Dib (image)dib.draw (hDC.GetHandleOutput (), (0, 0, 399, 239))

注意:标签打印机如果打印出来是空白没有文字,应该是打印机默认A4纸张大小,进入打印机首选项-高级-纸张/输出-纸张规格-更改为正在使用的标签尺寸。如果没有就到打印机属性-打印机设置-页面设置-增加-添加标签尺寸,再回到打印机首选项更改纸张规格。如果打出来页面不完整应该是横竖向没设置好,切换另一个即可。打印机首选项
打印机属性

来源地址:https://blog.csdn.net/wodeyan001/article/details/131677479

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python 直连打印机打印,可排版设置字体,附标签贴打印案例。

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录