2014-05-15 123 views
4

我想在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,即使工作正常,所有的使用示例只是顯示如何發送文本字符串到打印機。那不是我需要的,那不是我想知道的。

 

是否有可行的解決方案來打印文件,並設置打印尺寸以簡單而直接的方式?

想法和提示是值得歡迎的!

+1

您誤解了打印過程。打印機驅動程序不接受文件,它依靠應用程序將文件轉換爲Windows API調用。這就是爲什麼這個過程不「簡單」。即使打印機能夠自行解碼文件,您也需要以特殊的原始模式打開驅動程序,以避開通常的處理。 –

回答

0

請看Tim Golden網站上的「How To Print」頁面。 2014年,當你問你的問題時,這個頁面是一樣的。有一個打印一個JPG文件的例子,它也可以處理打印機設置。

這並不是一個完美的例子,但它會讓你走上正確的軌道。

DC_PAPERS在win32con定義:

import win32con 
x = win32con.DC_PAPERS 

你如何應該知道,我不知道。對於那些已經熟悉Python之外的Win32API的人來說,「顯而易見」......