python实现 发送图片到打印机 进行打印

2023-10-27

前言

环境

操作系统:win10
python:3.8.16

依赖

pip install openpyxl qrcode pillow pypiwin32 reportlab

功能

python printer.py 运行后,会检索本机已经连接的打印机设备,然后通过需要选择打印机,然后传入图片路径即可下发打印任务到打印机(期间会对图片转矢量图)。
可以对图片输入部分做个批量自动化,就可以批量打印了。

效果图

在这里插入图片描述

源码

直接打印版本

import win32print
import win32ui
from PIL import Image, ImageWin

# 列出所有打印机
printers = [printer[2] for printer in win32print.EnumPrinters(2)]
for i, printer in enumerate(printers):
    print(f"{i+1}: {printer}")

# 选择打印机
choice = int(input("选择要使用的打印机 (输入对应的序号): ")) - 1
printer_name = printers[choice]

# 加载图片
image_path = input("输入要打印的图片的路径: ")
image = Image.open(image_path)

# 创建设备描述表
hDC = win32ui.CreateDC()
hDC.CreatePrinterDC(printer_name)

# 开始文档
hDC.StartDoc(image_path)

# 开始页面
hDC.StartPage()

# 绘制位图
dib = ImageWin.Dib(image)
dib.draw(hDC.GetHandleOutput(), (0, 0, image.width, image.height))

# 结束页面
hDC.EndPage()

# 结束文档
hDC.EndDoc()

# 删除设备描述表对象
del hDC

print("打印成功!")

打开edge进行打印的版本

会运行edge让你手动打印0.0

import subprocess
import win32print
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter, landscape
from PIL import Image

# 列出所有打印机
printers = [printer[2] for printer in win32print.EnumPrinters(2)]
for i, printer in enumerate(printers):
    print(f"{i+1}: {printer}")

# 选择打印机
choice = int(input("选择要使用的打印机 (输入对应的序号): ")) - 1
printer_name = printers[choice]

# 加载图片
image_path = input("输入要打印的图片的路径: ")
image = Image.open(image_path)

# 转换图片为PDF
pdf_path = image_path.rsplit('.', 1)[0] + '.pdf'
c = canvas.Canvas(pdf_path, pagesize=landscape(letter))
width, height = landscape(letter)
c.drawImage(image_path, 0, 0, width, height)
c.showPage()
c.save()

# 打印PDF
edge_path = r'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe' # 默认的Edge路径
cmd = [edge_path, '--kiosk-printing', pdf_path]
subprocess.run(cmd)

print("打印成功!")

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python实现 发送图片到打印机 进行打印 的相关文章

  • NumPy linalg.eig

    我有这个烦人的问题 但我还没有弄清楚 我有一个矩阵 我想找到特征向量 所以我写 val vec np linalg eig mymatrix 然后我得到了 vec 我的问题是 当我小组中的其他人对相同的矩阵 mymatrix 做同样的事情时
  • 从 Python 下载/安装 Windows 更新

    我正在编写一个脚本来自动安装 Windows 更新 我可以将其部署在多台计算机上 这样我就不必担心手动更新它们 我想用 Python 编写这个 但找不到任何关于如何完成此操作的信息 我需要知道如何搜索更新 下载更新并从 python 脚本安
  • 使用 NLTK 在 Python 中获取大量名词(或形容词);或 Python Mad Libs

    Like 这个问题 https stackoverflow com questions 7439555 noun adjective etc word lists or dictionaries common words 我有兴趣按词性获取
  • “一旦获取切片就无法更新查询”。最佳实践?

    由于我的项目的性质 我发现自己不断地从查询集中取出切片 如下所示 Thread objects filter board requested board id order by updatedate 10 但这给我带来了实际对我选择的元素进
  • 如何在VIM中设置文件的正确路径?

    每当我击中 pwd在 vim 中命令总是返回路径C Windows system32 即使我在桌面上的 Python 文件中 所以每当我跑步时 python 命令返回 python can t open file Users myname
  • 小部件之间的自定义信号

    尝试将信号从一个 gtk EventBox 子级发送到另一个 在 init HeadMode 第 75 行 上出现错误 类型错误 未知信号名称 消息发送 why usr bin env python coding utf8 import p
  • 编辑 Jupyter Notebook 时 VS Code 中缺少“在选择中查找”

    使用 Jupyter Notebook 时 VSCode 中缺少 在选择中查找 按钮 它会减慢开发速度 所以我想请问有人知道如何激活它吗 第一张图显示了在 python 文件中的搜索 替换 第二张图显示了笔记本电脑中缺少的按钮 Python
  • 使用 Python 计算 Spark 中成对 (K,V) RDD 中每个 KEY 的平均值

    我想与 Python 共享这个特定的 Apache Spark 解决方案 因为它的文档非常贫乏 我想通过 KEY 计算 K V 对 存储在 Pairwise RDD 中 的平均值 示例数据如下所示 gt gt gt rdd1 take 10
  • 如何使用 javascript/jquery/AJAX 调用 Django REST API?

    我想使用 Javascript jQuery AJAX 在前端调用 Django Rest API 请求方法是 POST 但当我看到 API 调用它的调用 OPTIONS 方法时 所以 我开始了解access control allow o
  • CNTK 抱怨 LSTM 中的动态轴

    我正在尝试在 CNTK 中实现 LSTM 使用 Python 来对序列进行分类 Input 特征是固定长度的数字序列 时间序列 标签是 one hot 值的向量 Network input input variable input dim
  • Pandas:如何将数据框插入 Clickhouse

    我正在尝试将 Pandas 数据框插入 Clickhouse 这是我的代码 import pandas import sqlalchemy as sa uri clickhouse default localhost default ch
  • 如何在 Django 中使用基于类的视图创建注册视图?

    当我开始使用 Django 时 我几乎使用 FBV 基于函数的视图 来处理所有事情 包括注册新用户 但当我更深入地研究项目时 我意识到基于类的视图通常更适合大型项目 因为它们更干净且可维护 但这并不是说 FBV 不是 无论如何 我将整个项目
  • Python Pandas:如何对组中的所有项目进行分组并为其分配 id?

    我有 df domain orgid csyunshu com 108299 dshu com 108299 bbbdshu com 108299 cwakwakmrg com 121303 ckonkatsunet com 121303
  • 迭代列表的奇怪速度差异

    我创建了两个重复两个不同值的长列表 在第一个列表中 值交替出现 在第二个列表中 一个值出现在另一个值之前 a1 object object 10 6 a2 a1 2 a1 1 2 然后我迭代它们 不对它们执行任何操作 for in a1 p
  • Pandas 堆积条形图中元素的排序

    我正在尝试绘制有关某个地区 5 个地区的家庭在特定行业赚取的收入比例的信息 我使用 groupby 按地区对数据框中的信息进行排序 df df orig groupby District Portion of income value co
  • Python:我不明白 sum() 的完整用法

    当然 我明白你使用 sum 与几个数字 然后它总结所有 但我正在查看它的文档 我发现了这一点 sum iterable start 第二个参数 start 的作用是什么 这太尴尬了 但我似乎无法通过谷歌找到任何示例 并且对于尝试学习该语言的
  • `pyqt5'错误`元数据生成失败`

    我正在尝试安装pyqt5使用带有 M1 芯片和 Python 3 9 12 的 mac 操作系统 我怀疑M1芯片可能是原因 我收到一个错误metadata generation failed 最小工作示例 directly in the t
  • 使用 NLP 进行地址分割

    我目前正在开发一个项目 该项目应识别地址的每个部分 例如来自 str Jack London 121 Corvallis ARAD ap 1603 973130 输出应如下所示 street name Jack London no 121
  • 计算互相关函数?

    In R 我在用ccf or acf计算成对互相关函数 以便我可以找出哪个移位给我带来最大值 从它的外观来看 R给我一个标准化的值序列 Python 的 scipy 中是否有类似的东西 或者我应该使用fft模块 目前 我正在这样做 xcor
  • 使用 Python 将对象列表转为 JSON

    我在转换时遇到问题Object实例到 JSON ob Object list name scaping myObj base url u number page for ob in list name json string json du

随机推荐

  • 水果搬运工教你玩Python之list

    水果搬运工教你玩Python之list 一 水果搬运工玩list 二 List思维导图 三 完整代码 一 水果搬运工玩list 这次小明是一名搬运工 专门搬运水果的 完整代码在文章最后面 今天是小明入职的第一天 仓库的仓管说 今天这一排有五
  • 怎么删除w7桌面计算机图标,桌面图标删除不了_Win7桌面有图标删不掉怎么办

    摘要 腾兴网为您分享 Win7桌面有图标删不掉怎么办 智慧医疗 悦作业 一点开 小猿口算等软件知识 以及皮影客 星露谷物语猪车 vivo查找手机 merriamwebster aso100 ipad原生壁纸 高中物理 同步iphone版 记
  • Unity(学习笔记) ---Animator的基本概述

    Unity 动画控制器 1每个Animator Controller都会自带三个状态 Any State Entry和 Exit 1 Any State状态 2 Entry状态 3 Exit状态 2动画状态的属性 1我们可以选中某个自定义状
  • ChatGPT Sorry, you have been blocked解决方法

    很多朋友在使用Chat GPT的时候会遇到Sorry you have been blocked这个提示 都以为自己账号被封了 其实不是的 这是由于的你 被污染了 用的人太多 多数代理通过更换 就可解决 不太靠谱的代理可能就是怎么换都不行
  • lcov分支覆盖率的分析和总结

    覆盖率显示规则 一行从左到右分别万代表 1 代码行号 空白代表分支显示不过来产生换行 2 分支覆盖情况 3 该行调用次数 4 该行源代码以及行覆盖情况 其中 分支覆盖情况详细介绍如下 中括号代表生成的一对子分支 代表该子分支被覆盖 代表该子
  • 【经典排序算法】希尔排序(动图演示 + C 语言代码实现)

    经典排序算法 希尔排序 动图演示 C 语言代码实现 经典排序算法 十大经典排序算法汇总篇 文章目录 经典排序算法 希尔排序 动图演示 C 语言代码实现 1 动图演示 2 排序思想 3 时间 空间复杂度 4 代码实现 C语言 1 动图演示 2
  • LightGBM 相关知识理解

    文章目录 lightGBM 简介 直方图算法 Histogram algorithm 基本思想 直方图做差 带深度限制的 Leaf wise 算法 单边梯度采样算法 GOSS 互斥特征捆绑算法 EFB 1 解决哪些特征应该绑在一起 2 解决
  • python数据驱动测试设计_python - 数据驱动测试 - ddt

    coding utf 8 project jiaxy author Jimmy file study ddt py ide PyCharm Community Edition time 2018 12 06 14 48 blog https
  • Python实例005:给输入的n个整数进行升序或降序排序

    Python实例005 给输入的n个整数进行升序或降序排序 先将输入的整数利用append 方法插入到列表中 然后利用函数参数进行排序 可直接运用list sort 接受一个参数reverse True or False 来表示降序或升序排
  • 华为OD机试 - 报数游戏(JS)

    题目描述 100个人围成一圈 每个人有一个编码 编号从1开始到100 他们从1开始依次报数 报到为M的人自动退出圈圈 然后下一个人接着从1开始报数 直到剩余的人数小于M 请问最后剩余的人在原先的编号为多少 输入描述 输入一个整数参数 M 输
  • 一个好的MIS系统应该考虑哪些内容

    如果真正用心来做一套好的MIS系统应该考虑哪些内容呢 大概想了一下 以后再慢慢补充 一 界面友好 界面是可以灵活定制的 实现难度 中级 做好基础类窗口 在窗口初始化的时候进行读取定制方案 一种方式可以把元素打包成DLL或者其他文件 第二种方
  • uniapp微信小程序实现对地图多点或单点标记(@莫成尘)

    先看代码 复制使用即可 您将看到以下效果 注意 icon图标需要自行下载并替换 此外调用我本地的地图密钥可能有上线次数 请使用调试不要超过50次 如果无法出现效果 请注意报错信息 可能是调用上线 请自行在高德地图申请密钥
  • windows10 彻底关闭自动更新【绝对管用】

    windows10 彻底关闭自动更新 绝对管用 以下三步必须全做 1 服务里禁用 Windows Update 2 将服务里的 Windows Update的恢复设置为无操作 3 删除自动更新的触发器 这个很重要 否则过一段时间自动更新还是
  • C/C++框架和库

    值得学习的C语言开源项目 Libevent libev是一个开源的事件驱动库 基于epoll kqueue等OS提供的基础设施 其以高效出名 它可以将IO事件 定时器 和信号统一起来 统一放在事件处理这一套框架下处理 基于Reactor模式
  • ESQLC数据类型 - varchar类型

    GBase8s ESQL C字符串数据类型 GBase8s ESQL C支持5种字符串数据类型 如果在数据库的列中使用字符串类型 例如CHAR或者VARCHAR 以下ESQL C字符串类型可以使用 C语言的char类型 GBase8s ES
  • CSS常用水平垂直居中的几种方法

    CSS水平垂直居中 一 利用margin auto 二 利用position absolute 三 弹性盒子 四 利用水平对齐和行高 五 grid 为方便理解 欢迎查看线上效果 在线试一试 一 利用margin auto 元素有宽度和高度时
  • Jquery 找指定div下的radio 加bind事件 select 选中一用 $("#Sex").find("option[data-id='0']").prop("selected"!!!!

    页面加载时处理的事情 document ready function 1 匿名策略数组 给select动态追加option选项 let EncryTypeList id 1 text 前n位后隐藏 id 2 text 后n位后隐藏 Encr
  • Return消息机制

    Return Listener 用于处理一些不可路由的消息 消息生产者通过制定一个Exchane和RoutingKey 把消息送达到某一个队列中去 消费者监听队列进行消费处理 但是在某些情况下 发送消息的时候 当前Exchange不存在或制
  • vs默认编码

    1 工具 选项 环境 文档 不能以代码页的编码格式保持数据时将文档保持为Unicode工具 选择 文本编辑器 自动检测不带签名的UTF 8编码打开cs文件后 点击 文件 高级保存选项 在弹出的对话框中 可以看到目前的编码方式为UTF 8 带
  • python实现 发送图片到打印机 进行打印

    前言 环境 操作系统 win10 python 3 8 16 依赖 pip install openpyxl qrcode pillow pypiwin32 reportlab 功能 python printer py 运行后 会检索本机已