打印文件并配置打印机设置

2024-06-13 09:06:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Windows上使用Python编写打印机自动化程序,但无法完成。

我不是真的理解这个话题,我有点惊讶-一个“简单”的方法来完成这个似乎不存在。。?有这么多的api允许以一种简单友好的方式访问常见的东西,但是打印似乎是一种“特殊”的东西。。?

以下是我所拥有的和我想做的:

  • 有一个PDF文件。PDF已经存在,我不想创建PDF或任何其他文件类型。我喜欢打印这个PDF文件。一次一个文件。

  • 文件可以是横向和纵向布局。这个文件可以有这样一个大小:A4、A3、A2、A1和A0。

  • 我喜欢用普通的“物理”打印机打印文件。打印机是一个网络设备,使用其IP连接。有各种各样的网络打印机,我想能够使用其中的一个以上。有些只是小的A4打印机,有些是大的办公设备(一体式扫描、复印、打印等),还有大的绘图仪(高达0张纸)。

  • 我想编码:“在这台打印机上打印这个PDF文件”。

  • 我喜欢配置打印大小。我想按原尺寸“原样”打印PDF文件,但我也希望能够在小尺寸的纸张上打印大格式。就像,PDF本身是A0大小,但我想打印在A3纸张上。或者原始的PDF大小是A2,我想用A4打印。

  • 我想在Windows7计算机上使用它(SP164位)。我试着用python编写代码。我使用的是Python2.7,因为我使用的是Python3中没有的一些第三方模块。一般来说,欢迎通过python脚本触发的每个工作解决方案。

对我来说,这似乎不是一项非常“复杂”的任务。这样做“手工”是非常简单和直接的-选择文件,开始打印,选择打印机,选择纸张大小-和打印。

用代码来实现这一点似乎相当困难。这是我到现在为止所遇到的。

  • 有多种程序可用于命令行打印,如“Acrobat Reader”、“Foxit Reader”或类似程序。虽然使用这些程序提供的命令打印效果很好,但无法访问打印机设置来配置纸张大小。

  • 有一些特殊的命令行打印工具,但我找不到任何有用的免费软件。我试过“VeryPDF”命令行工具,但是在使用它时遇到了一些问题。虽然有一个完整的支持范围的信件格式和各种其他东西,我需要的纸张大小(A4至A0)不知何故不受支持。有A4和A3的预设,可以。该工具可以选择仅通过测量值(in/pt/mm)来使用自定义纸张大小,但如示例所示,该工具不起作用,使用此方法时,它总是打印到A4。

  • 我找到了用于python的win32包,包括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

每当我试图使用需要传递此类常量的函数时,都会发生这种情况。在我的系统中没有一个常数被定义,我不知道为什么。

但是我不知道我是否可以使用这个API,即使工作正常,所有的使用示例都只是演示如何将文本字符串发送到打印机。这不是我需要的,也不是我想知道的。

是否有任何工作解决方案来打印文件并以简单直接的方式设置打印大小?

欢迎提出意见和建议!


Tags: 文件工具命令行程序api示例pdf格式
1条回答
网友
1楼 · 发布于 2024-06-13 09:06:08

看看蒂姆·戈尔登网站上的“How To Print”页面。2014年你问这个问题的时候,这一页是一样的。这里有一个打印JPG文件的示例,该文件还可以操作打印机设置。

这不是一个很好的例子,但它应该让你走上正确的轨道。

DC U文件在win32con中定义:

import win32con
x = win32con.DC_PAPERS

你怎么知道的,我不知道。对于那些已经熟悉Python之外的Win32API的人来说,这可能是“显而易见的”。。。

相关问题 更多 >