win32print设置打印机属性进行pdf打印

news/2024/11/24 7:23:51/

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中查看,如
PaperSizeExmple
具体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}')

http://www.ppmy.cn/news/532970.html

相关文章

《朝内81号》内容策划| Zine计划

距之前一篇Zine计划《地铁小剧场1.0版》已经过去很长时间,这期间终于实现了2本小册子的落地,但——都不是《地铁小剧场》。在实施《地铁小剧场》过程中遇到的问题是:主题很大,但现有图片数量有限,精彩不足,…

2021MCM/ICM美国大学生数学建模竞赛报名通知

2021MCM/ICM美国大学生数学建模竞赛报名通知 一、竞赛背景 美国大学生数学建模竞赛(MCM/ICM)由美国数学及其应用联合会主办,是唯一的国际性数学建模竞赛,也是世界范围内最具影响力的数学建模竞赛。赛题内容涉及经济、管理、环境、…

智慧图书馆有哪些功能清单?来自博奥智源分享。

功能要求 1、标签为无源标签,无需电池。 2、标签中有存储器,存储在其中的资料可重复读、写。 3、标签可以非接触式的读取和写入,加快资源流通的处理手续。 4、标签具有一定的抗冲突性,能保证多个标签的同时可靠识别。 5、标签具有…

画册设计

✔ 什么是画册 . ▼ 画册是一个展示平台, 用线条搭配图片或文字,组合成一本富有创意又具有可读、可赏性的精美册子。画册是图文并茂的一种理想表达,相对于单一的文字或是图册,画册都有着无与伦比的绝对优势。全方位立体展示企业…

平面设计师需要掌握哪些印刷知识

个人认为,设计师需要了解的印刷知识,是尽可能的让自己的设计意图最终能够贯彻执行,为什么这里不说100%贯彻,是因为现实总是很残酷,哪怕你前期做得再万无一失,但印刷厂不一定会给你全部做到(因为…

数据库身份证号用什么类型_印刷材料常用纸张有哪些,几种类型档次,设计印刷用什么合适?...

优秀的作品,不仅设计要好,还要善于利用各种纸张特性,才能让设计成品更好地呈现。 纸张分类 — 一、按用处分类 可以分为印刷用纸,打印复印纸,绘图纸,生活用纸等。 二、按是否涂布 分为非涂布纸、轻涂布纸和…

indesign用于产品排班_InDesign排版:设计师的基本印刷知识

摘要:个人认为,设计师需要了解的印刷知识,是尽可能的让自己的设计意图最终能够贯彻执行,为什么这里不说100%贯彻,是因为现实总是很残酷,哪怕你前期做得再万无一失,但印刷厂不一定会给你全部做到…

打印系统开发(5)——书脊

书脊 书脊(book back,Backbone;spine),是指书刊封面、封底连接的部分,相当于书芯厚度。在印刷后加工,为了制成书刊的内芯,按正确的顺序配页、折页,组成书帖后形成平的书脊边。经闯齐、上胶或铁丝订&#x…