2014-05-15 118 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的人来说,“显而易见”......