win32print设置打印机属性

设置打印机的属性来进行pdf打印,比如纸张大小,纸张类型,横\纵向,输入纸盘,着实费了一些时间去搜索资料。主要参考以下

  1. http://timgolden.me.uk/pywin32-docs/PyDEVMODE.html

  2. https://stackoverflow.com/questions/11045704/change-printer-tray-with-pywin32?r=SearchResults

  3. https://blog.csdn.net/zb774095236/article/details/101058311 DEVMODE 结构体

  4. https://stackoverflow.com/questions/11045704/change-printer-tray-with-pywin32?r=SearchResults

  5. http://timgolden.me.uk/pywin32-docs/win32gui__CreateDC_meth.html

  6. http://timgolden.me.uk/pywin32-docs/win32print__DocumentProperties_meth.html

  7. http://timgolden.me.uk/pywin32-docs/DOCINFO.html

  8. http://timgolden.me.uk/pywin32-docs/win32print.html

  9. http://timgolden.me.uk/pywin32-docs/win32print__StartDocPrinter_meth.html

  10. https://zhidao.baidu.com/question/326850334795105845.html

  11. https://stackoverflow.com/questions/47435973/print-pdf-file-in-duplex-mode-via-python 设置打印机属性,即使报错也是生效的

  12. https://stackoverflow.com/questions/34920866/using-devicecapabilities-with-pywin32 打印打印机的所有属性
    等。

11中可以看到即使win32print.SetPrinter是失败的,也是可能设置成功的.
12中可以打印某个打印机的所有属性,

几个重要的函数接口
获取打印机属性部分:win32print.DeviceCapabilities
设置打印机部分 handle = win32print.OpenPrinter(device_name, printdefaults),其中printdefualts,表示权限,可以如下设置
printdefaults = {“DesiredAccess”: win32print.PRINTER_ALL_ACCESS}
printaccess = {“DesiredAccess”: win32print.PRINTER_ACCESS_USE}

参数PaperSize在自定义尺寸时,设置为0或者256,如果指定PaperSize大小,则PaperLength与PaoerWidth不生效。参数PaperSize的可设置值,可在win32con中查看,如

具体0还是256使得对应的打印机自定义尺寸生效,需要看对应的打印机,这个部分我是尝试得到的。

在设置例子中,MediaType的可设置值,由打印机输出的参数中选择,如DC_MEDIATYPENAMES ('普通纸和再生纸', '普通纸', '再生纸', '特殊纸', '特殊纸2', '特殊纸3', '中等厚度纸', '厚纸', '厚纸2', '厚纸3', '厚纸4', '薄纸', '投影片', '描图纸', '颜色纸', '颜色纸1', '颜色纸2', '印有信头的信纸', '印有图案的纸张', '打孔的纸张', '标签', '胶膜纸', '卡片纸', '索引纸叠', '黄色', '绿色', '蓝色', '紫色', '乳白色', '橙色', '粉红色', '红色', '灰色', '光滑纸', '信封', '明信片', '喷墨明信片', '喷墨普通纸', '铜版纸')DC_MEDIATYPES (512, 1, 514, 515, 516, 517, 522, 521, 523, 524, 525, 526, 2, 527, 528, 529, 530, 531, 532, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 3, 559, 560, 561, 558, 562)

纸张类型和数字一一对应。设置方法见最上图。
DefaultSource 4 表示手送台, 7表示自动选择纸盘

调用 win32print.SetPrinter(handle, 2, properties, 0)来设置对应的打印机。这里就算出现异常,也可能设置成功的。
win32print.SetDefaultPrinter(device_name), 将打印机设置为默认打印机
win32api.ShellExecute(0, “print”, file_name, None, “.”, 0),最后调用函数打印文件file_name。

更新一个例子,将打印机设置为默认后打印所有文件。具体打印机的属性设置可能有微小不同:

def pdf_print_device(file_names, device_name):printaccess = {"DesiredAccess": win32print.PRINTER_ACCESS_USE}try:handle = win32print.OpenPrinter(device_name, printaccess)win32print.ClosePrinter(handle)time.sleep(2)handle = win32print.OpenPrinter(device_name, printaccess)properties = win32print.GetPrinter(handle, 2)devmode = properties['pDevMode']devmode.PaperSize = 0  # devmode.PaperLength = 3150  # .devmode.PaperWidth = 2500devmode.Duplex = win32con.DMDUP_SIMPLEX  # 单面devmode.Orientation = win32con.DMORIENT_LANDSCAPE  # 横向打印properties['pDevMode'] = devmodefor temp_loop in range(2):try:win32print.SetPrinter(handle, 2, properties, 0)except Exception as ff:log.info(f'setprinters:{ff}')win32print.SetDefaultPrinter(device_name)for file_name in file_names:log.info(f'{device_name}打印文件{file_name}')win32api.ShellExecute(0, "print", file_name, None, ".", 0)time.sleep(2)win32print.ClosePrinter(handle)except Exception as first:log.info(f'first:{first}')

win32print设置打印机属性进行pdf打印相关推荐

  1. 设置打印机属性打印课件的方法——一页显示9张PPT幻灯片

    设置打印机属性打印课件的方法 1)通常情况下打印课件(PPT)方法(如图一) 文件->打印->打印内容->讲义 设置打印内容为讲义,每页6张或9张,但是打印出的效果都不是很好,一页上 ...

  2. vb 设置打印机 任意尺寸_打印照片怎么设置尺寸

    本文力图以最易实现的方式给大家介绍打印照片如何设置尺寸. 方法/步骤 一.右键点击照片,选择打印,进入Windows打印图片.操作如下: ①选择打印机: ②选择打印纸张幅面: ③选择打印质量: ④选择 ...

  3. oracle设置打印机,使用 Oracle Solaris 打印管理器设置网络连接的打印机

    使用 Oracle Solaris 打印管理器设置网络连接的打印机 使用 Oracle Solaris 打印管理器设置网络连接的打印机的方法与设置直接连接的打印机类似.但是需要设置的打印机定义有所不同 ...

  4. vb6设置打印机纸张类型,以及打印方向

    Printer 对象常数 打印机颜色模式 常数 值 描述 vbPRCMMonochrome 1 单色输出 vbPRCMColor 2 彩色输出 双面打印 常数 值 描述 vbPRDPSimplex 1 ...

  5. linux c设置打印机属性,如何恢复打印机属性的“功能”部分

    导读 在执行Win10升级后,某些PC用户可能会注意到缺少打印机属性UI的"功能"部分. 在本文中,我们将提供恢复打印机属性的"功能"部分的解决方案. 打印机属 ...

  6. java设置打印机默认纸张_java 打印设置打印A4 A5纸

    用java写了一个打印机,遇到打印纸张输出的问题,打印纸张有A4或者A5,当设置A5纸张的时候需要横向打印输出 下面贴出部分代码,用于解决当打印纸张为A5纸张时,文件横向打印 DocPrintJob ...

  7. 2021-07-29 打印机不出现PDF打印

    按ctrl旁边的win键,然后直接输入控制面板 打开控制面板 点击程序和功能 点击左边的启动和关闭windows功能 点击microsoft point to pdf 打开即可,没有这个选项的看下面 ...

  8. 计算机设置了密码后不能打印了,win7系统共享打印机设置密码后无法连接如何解决...

    在办公的时候经常会将打印机在局域网设置共享方便使用,但是很多win7系统用户为了防止多人使用就会给共享打印机设置密码,可是却发现共享打印机设置密码后无法连接了,遇到这样的问题该怎么办呢,接下来小编就给 ...

  9. java 远程打印机_使用Java打印到网络打印机

    我需要发送pdf文档以在Web应用程序的服务器端进行打印,打印机完全支持pdf打印等,它也可以联网到服务器. pdf也存储在服务器上. 我想要的是单击按钮,打印出pdf文件,目前我的代码如下: //S ...

最新文章

  1. 14Facade(门面)模式
  2. java 使用new新建一个对象时的操作过程
  3. 算法系列8《Base64》
  4. Java服务框架分析
  5. 使用 scikit-learn 实现多类别及多标签分类算法
  6. 深入体验JavaWeb开发内幕——简述JSP中的自定义标签叫你快速学会
  7. 使用Apache Camel进行负载平衡
  8. 谷歌A/B实验——重叠实验基础设施解读
  9. 例子 冒泡排序五位数版本 理解过程抓捕数据
  10. delphi7 安装/卸载控件通用方法
  11. Fehelper 下载、安装与使用
  12. 弹性均质圆环法计算过程_盾构隧道衬砌结构内力计算方法的对比浅析
  13. resin服务器中间件
  14. v2ex站长专访 - 100offer专访Livid:不仅仅是V站站长
  15. 啊哈 , 算法 !--深度优先搜索( C语言版 )
  16. 计算机ppt基础操作心得体会,word计算机实训心得体会.doc
  17. 用Python批量替换更改掉txt文本的内容
  18. C++ 动态开辟空间
  19. 置液晶显示器的台式计算机,台式电脑液晶显示器的底座的制作方法
  20. 高斯 二维 matlab,MATLAB实例:二维高斯分布图

热门文章

  1. mysql服务器 网关,数据库智能网关-PLC与SQLServer/MySQL数据库双向通讯SELECT/INSERT...
  2. App渠道推广不得不知的工具
  3. [C语言] 文件操作,解压SZB格式中的一段函数片段;
  4. 西北工业大学大学物理(II)下2020-2021选填考题解析
  5. 名画97 金大受《十六罗汉图》
  6. windows优化大师怎么用_电脑图标变了怎么办
  7. 关于微信小程序导入苹方字体问题
  8. (转)The C10K problem翻译
  9. Javascript中的url编码与解码(详解)
  10. 教程二:go语言windows gui界面开发之walk 控件学习第一节