我想在Windows上使用Python編碼打印機自動化,但無法完成。打印文件並配置打印機設置
我不是很瞭解這個話題,我有點驚訝 - 一個「簡單」的方式來完成這個似乎並不存在..?有這麼多的API允許以一種很好且簡單的方式訪問常見的東西,但是打印似乎是「特殊」的東西..?
這裏是我想要做什麼,我有什麼:
有一個PDF文件。 PDF已經存在,我不想創建PDF或任何其他文件類型。我喜歡打印這個PDF文件。一次一個文件。
該文件可能處於橫向和縱向佈局。該文件可以具有以下尺寸之一:A4,A3,A2,A1和A0。
我喜歡用普通的「物理」打印機打印文件。打印機是網絡設備,並使用其IP連接。有各種網絡打印機,我希望能夠使用多個網絡打印機。有些只是小型A4打印機,有些則是大型辦公設備(一體機掃描,複印,打印......) - 還有大型繪圖儀(最多可容納A0尺寸的紙張)。
我想輸入代碼:「在此打印機上打印此PDF文件」。
我喜歡配置打印尺寸。我希望以原始尺寸打印PDF「原樣」,但我希望能夠在小尺寸紙張上打印大尺寸格式。就像PDF一樣,PDF本身就是A0尺寸,但是我想在A3紙上打印。或者原始PDF大小爲A2,我想在A4上打印。
我想在Windows 7電腦上使用它(SP1,64位)。我試圖在python中編寫代碼。我使用的是Python 2.7,因爲我使用了一些在Python 3中不可用的第三方模塊。一般來說,可以通過python腳本觸發的每個工作解決方案都是受歡迎的。
對我來說,這似乎並不成爲一個非常「複雜」的任務來完成。這樣做「手工」非常簡單直接 - 選擇文檔,開始打印,選擇打印機,選擇紙張尺寸 - 然後打印。
這樣做的代碼似乎是相當困難的。這是我到現在爲止所遇到的。
有很多程序可以用於命令行打印,諸如「Acrobat Reader」,「Foxit Reader」或類似程序。儘管這些程序提供的命令可以完美地打印,但無法訪問打印機設置來配置紙張尺寸。
有特殊的命令行打印工具,但我找不到任何有用的免費軟件。我曾嘗試使用「VeryPDF」命令行工具,但在使用紙張尺寸時遇到了一些問題。雖然完全支持各種信函格式和其他各種各樣的東西,但我需要的紙張尺寸(A4到A0)不被支持。有預設的A4和A3,這些工作。該工具可以選擇使用自定義紙張大小,只需傳遞測量值(in/pt/mm) - 但這並不如示例所示,使用此方法時始終打印爲A4。
我發現了python的win32-package,包括win32print。我不明白這件事。該API提供了查找,添加或刪除打印機,列出打印機隊列,啓動和停止打印機作業等功能 - 但打印文件不是一個簡單的可能性。看起來這個API可以用來通過python編碼創建打印數據來添加打印機作業,將某些文本和/或圖形像「文件」一樣推送併發送給打印機。在打印機已經理解的格式中。
並使用該win32print模塊時,我不能讓它正常工作。這裏是
的一個實例片斷我試圖用:
from win32print import *
printer = GetDefaultPrinterW()
handle = OpenPrinter(printer)
info = GetPrinter(handle, 2)
cap = DeviceCapabilities(info['pPrinterName'], info['pPortName'], DC_PAPERS)
ClosePrinter(handle)
......這裏描述:
http://timgolden.me.uk/pywin32-docs/win32print__DeviceCapabilities_meth.html
但這只是返回:
NameError: name 'DC_PAPERS' is not defined
那天正好每當我」 m試圖使用需要傳遞這樣的常量的函數。我的系統中沒有定義一個常量,我不知道爲什麼。
但我不知道我是否可以使用這個API,即使工作正常,所有的使用示例只是顯示如何發送文本字符串到打印機。那不是我需要的,那不是我想知道的。
是否有可行的解決方案來打印文件,並設置打印尺寸以簡單而直接的方式?
想法和提示是值得歡迎的!
您誤解了打印過程。打印機驅動程序不接受文件,它依靠應用程序將文件轉換爲Windows API調用。這就是爲什麼這個過程不「簡單」。即使打印機能夠自行解碼文件,您也需要以特殊的原始模式打開驅動程序,以避開通常的處理。 –