使用 Python 打印 PDF 文件时如何选择纸张格式?

How to chose Paper Format when printing a PDF File with Python?

我正在尝试打印 PDF 文件,但我不知道如何指定页面格式。我想以 A5 格式打印我所有的 PDF。有人可以帮我吗?

# this code works and prints the PDF File, but not in the A5 Format
import subprocess
printer='MyPrinter' # name of the printer
pdffile=r"C:\Desktop\pdf_test\pdfFile.pdf" # path to PDF
acroread=r"C:\Program Files (x86)\Adobe\Acrobat 10.0\Acrobat\Acrobat.exe" # path to Acrobat Reader

# print the file
cmd='"%s" /N /T "%s" "%s"' % (acroread, pdffile, printer)
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr=proc.communicate()
exit_code=proc.wait()

另一种打印PDF文件的方法,这里也不知道如何指定格式。

import win32api
pdffile=r"C:\Desktop\pdf_test\pdfFile.pdf" # path to PDF

printer_name = 'MyPrinter' # name of the printer
out = '/d:"%s"' % (printer_name)
### print the PDF to the proper Printer
win32api.ShellExecute(0, "print", pdffile, out, ".", 0)

如果您的限制是您希望每份文档都以 A5 打印,而不管其原始尺寸如何,我看不到直接在此处显示的示例代码中执行此操作的方法,因为您目前正在传递仅在打印机名称和文件名中。

您需要获取打印机的设备上下文才能指定作业的页面大小,即 A5,因此如果打印机未加载 A5(或未在其定义的页面之一中加载)托盘;我在这里必须含糊其辞,因为不同的打印机会以不同的方式解决这个问题),它将暂停并显示加载 A5 的请求。

我也在猜测这里的其他细节,因为我不确定您是否要将较小的文档展开为 A5 尺寸、旋转它们以使其最适合、将它们保持在 100% 但将它们放在页面中央,等。关键是您的进程需要获取所选打印机的设备上下文,这样您就会知道它的功能,以及如何为您提交的作业请求从该特定打印机输出 A5 的输出。

如果它是一次只能加载一种尺寸(A5 或其他某种尺寸)的单一尺寸打印机,那么您可以预先加载 A5 纸张并在没有进一步说明的情况下将作业扔给它,或者更加小心并为打印作业指定 A5,理论上打印机将停止直到 A5 被加载,而不是默认打印在 A4 上,或者压缩以适合或从边缘出血。

如果您可以控制作业输出和正在使用的打印机,那么您可以通过最少的设置来配置这两者以生成您想要的输出。如果您无法控制用户将为输出设备选择的内容,那么您将需要获取该设备的设备上下文以指定打印作业的属性(包括 A5 纸张尺寸),并让打印机弄清楚它将如何按照指示进行。