Python在Windows下如何控制打印机打印表格和图片?
如题最近研究了,生成网页用 lodop 打印,发现网页得打开浏览器点打印按钮,打开浏览器比较麻烦,想通过 python 本地生成 html 文件直接打印,有没有方法
Python在Windows下如何控制打印机打印表格和图片?
关注一个… 我也没搜到 怎么 传入一个 word 打印的资料
在Windows下用Python控制打印机打印表格和图片,主要用win32print和PIL库。下面是一个完整的例子,可以直接运行。
首先安装必要的库:
pip install pywin32 pillow reportlab
核心代码示例:
import win32print
import win32ui
from PIL import Image, ImageDraw, ImageFont
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
import os
import tempfile
def print_table_and_image(table_data, image_path):
# 1. 创建临时PDF文件
pdf_path = os.path.join(tempfile.gettempdir(), "print_temp.pdf")
c = canvas.Canvas(pdf_path, pagesize=letter)
width, height = letter
# 2. 绘制表格
y_position = height - 50
for row in table_data:
x_position = 50
for cell in row:
c.drawString(x_position, y_position, str(cell))
x_position += 100
y_position -= 20
# 3. 添加图片
if os.path.exists(image_path):
c.drawImage(image_path, 50, y_position - 200, width=200, height=150)
c.save()
# 4. 发送到打印机
printer_name = win32print.GetDefaultPrinter()
hprinter = win32print.OpenPrinter(printer_name)
try:
with open(pdf_path, "rb") as f:
data = f.read()
hjob = win32print.StartDocPrinter(hprinter, 1, ("Python Print Job", None, "RAW"))
win32print.StartPagePrinter(hprinter)
win32print.WritePrinter(hprinter, data)
win32print.EndPagePrinter(hprinter)
win32print.EndDocPrinter(hprinter)
finally:
win32print.ClosePrinter(hprinter)
# 清理临时文件
os.remove(pdf_path)
# 使用示例
table_data = [
["姓名", "年龄", "部门"],
["张三", "25", "技术部"],
["李四", "30", "市场部"]
]
image_path = "example.jpg" # 替换为你的图片路径
print_table_and_image(table_data, image_path)
代码说明:
- 用
reportlab生成PDF,它处理表格和图片布局最方便 - 表格数据用二维列表传入,自动计算位置
- 图片支持常见格式(JPG/PNG等)
- 通过Windows打印API直接发送原始数据到默认打印机
注意点:
- 确保图片路径正确
- 表格数据不要超过页面宽度
- 需要管理员权限才能访问某些打印机
替代方案:
如果只需要简单文本,可以直接用win32print发送ESC/POS指令(热敏打印机常用):
def print_raw_text(text):
printer_name = win32print.GetDefaultPrinter()
hprinter = win32print.OpenPrinter(printer_name)
hjob = win32print.StartDocPrinter(hprinter, 1, ("Raw Text", None, "RAW"))
win32print.StartPagePrinter(hprinter)
win32print.WritePrinter(hprinter, text.encode('gbk')) # 中文编码
win32print.EndPagePrinter(hprinter)
win32print.EndDocPrinter(hprinter)
win32print.ClosePrinter(hprinter)
用PDF方案最通用,兼容所有Windows打印机。
可以调用 print 命令。
print 对 html 支持不知道怎么样,我用系统命令无法添加到虚拟打印机里面打印
刚刚找到可以使用 pyqt 里面的 Qpainter 打印文档 现在想办法把 browser 里面图像传过去
import sys
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEnginePage, QWebEngineView
app = QApplication(sys.argv)
browser = QWebEngineView()
browser.load(QUrl(“http://www.baidu.com/”))
browser.show()
app.exec_()
windows 的话可以用 com 组件吧?
com 也可以,还有些直接写打印语句,想直接生成网页,然后打印出来,使用样式表或者 css 或者并列的列表排序的 html 文件 pyqt5 打印效果有问题
小伙子,python 也是可以控制鼠标键盘的。在浏览器弹出打印按钮后用pyautogui模块控制鼠标自动点击打印按钮。虽然感觉有点治标不治本,但是如果实在找不到其他方法可以一试。
谢谢老大哥了,现在是用 pyqt 打开浏览器,
加载 lodop 后自动运行 js 打印,速度慢,无法控制,
我是直接用 html 做模板,听说 pyqt5 可以直接控制运行 js
想实现自助打印,传参后自动就打印,不行就看看 fastreport 或者水晶报表支持 dll 调用打印不。
谢谢意见

