在我工作的组织中,不同的打印机设置在不同的位置。都主要用于打印A4大小的文档,所以默认设置相应。
我们还使用了一堆自定义大小的表格,到目前为止人们一直在手工填写。最近,我的任务是从我们的中央数据库为上述表格设置打印自动化。
我正在使用 reportlab 创建临时 pdf 文件,然后尝试将其发送到默认打印机。一切都相对简单,除了让打印机注册自定义纸张尺寸。
我得到了以下代码片段,但我真的被卡住了。
import tempfile
import win32api
import win32print
pdf_file = tempfile.mktemp(".pdf")
#CREATION OF PDF FILE WITH REPORTLAB
printer = win32print.GetDefaultPrinter()
PRINTER_DEFAULTS = {"DesiredAccess":win32print.PRINTER_ALL_ACCESS}
pHandle = win32print.OpenPrinter(printer, PRINTER_DEFAULTS)
level = 2
properties = win32print.GetPrinter(pHandle, level)
pDevModeObj = properties["pDevMode"]
pDevModeObj.PaperSize = 0
pDevModeObj.PaperLength = 2200 #SIZE IN 1/10 mm
pDevModeObj.PaperWidth = 1000 #SIZE IN 1/10 mm
properties["pDevMode"]=pDevModeObj
win32print.SetPrinter(pHandle,level,properties,0)
#OPTION ONE
#win32api.ShellExecute(0, "print", pdf_file, None, ".", 0)
#OPTION TWO
win32api.ShellExecute (0,"printto",pdf_file,'"%s"' % printer,".",0)
win32print.ClosePrinter(pHandle)
它只是行不通。打印机不会报告“纸张尺寸不匹配”,就像在向他们发送非 A4 文档时应该报告的那样。当我尝试打印到 PDF 打印机时,它也默认为 A4。
打电话时
print(pDevModeObj.PaperSize)
print(pDevModeObj.PaperLength)
print(pDevModeObj.PaperWidth)
一切似乎都井井有条,所以我猜我不知道如何将这些纸张尺寸值发送回打印机设置。
这是我签出的所有资源的列表(示例并非全部在 python 中,还有一些没有使用 win32api),但无法正常工作:
- 以编程方式打印 PDF 文件 - 指定打印机
- Python 的 win32api 仅打印到默认打印机
- https://mail.python.org/pipermail/python-win32/2005-August/003683.html
- https://docs.microsoft.com/en-us/troubleshoot/windows/win32/modify-printer-settings-setprinter-api
- 通过 Python 以双面模式打印 PDF 文件
- https://www.thinbug.com/q/39249360
- 保存/恢复打印机 DevModes - wxPython / win32print
- pywin32:如何获得 pyDEVMODE 对象?
- https://docs.microsoft.com/en-us/troubleshoot/windows/win32/modify-printer-settings-documentproperties
- 如何使用 python 更改打印机首选项设置
- 使用win32print Python将文件打印到连续纸
- python win32print 无法设置自定义页面大小
- http://timgolden.me.uk/pywin32-docs/PyDEVMODE.html
- https://newcenturycomputers.net/projects/pythonicwindowsprinting.html
- 打印文件并配置打印机设置
- 更改打印机默认纸张大小
- https://grokbase.com/t/python/python-win32/085x5hdbtd/how-to-change-paper-size-while-printing
- openpyxl - 为打印设置自定义纸张尺寸
- Python win32print 更改高级打印机选项
- 使用 Python 打印 PDF 文件
- Python静默打印PDF到特定打印机
- https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-printerconfiguration
- 使用 Python、win32api 和 Acrobat Reader 9 打印 PDF
- Python用win32print打印pdf文件
- 使用 Python 打印 PDF 文件时如何选择纸张格式?
- 尝试删除打印机时访问被拒绝
- https://www.programcreek.com/python/example/24860/win32api.ShellExecute
- https://opensource.gonnerman.org/?p=192
- Python27 - 在 Windows 10 上,我如何判断打印纸尺寸是 50.8 毫米 x 25.4 毫米?
- https://mail.python.org/pipermail/python-win32/2008-May/007640.html
- http://timgolden.me.uk/python/win32_how_do_i/print.html