python打印文件为pdf

python调用虚拟打印机将文件打印成pdf文件,我的代码如下:

import sys
import os
import win32api
def start_printer(cprinter,pdf):
  his = win32api.ShellExecute(0,"print",pdf,  '/d:"%s"' % cprinter,None,2)
start_printer('Adobe PDF','C:\\Users\\test.docx')

#上述python代码其实就相当于在CMD中运行了如下命令:
# print /d:'Adobe PDF' 'C:\\Users\\test.docx'

问题:
每打印一个文件都会出现下图中的弹框,然后我要手动点保存,有没有办法在代码里设置文件名字和设置保存,不用手动去设置的。

img


解决方法:
在自己电脑的:控制面板\硬件和声音\设备和打印机——找到“Adobe PDF”打印机,鼠标右击,选择“打印首选项”,再按下图操作。

img

您可以尝试使用类似下面的代码来设置文件名和保存路径,避免出现弹框并手动保存的情况:

import sys
import os
import win32api

# 定义打印函数,其中pdf参数为pdf文档路径,filename参数为需要保存的文件名
def start_printer(cprinter, pdf, filename):
    # 设置打印机参数及文件保存路径
    cmd = ' /t "%s" "%s" "%s" "%s" ' % (pdf, cprinter, filename, "1")

    # 调用ShellExecuteEx执行打印命令
    win32api.ShellExecuteEx(lpVerb='print', lpFile='AcroRd32.exe', lpParameters=cmd)

# 调用测试
start_printer('Adobe PDF', 'C:\\Users\\test.docx', 'C:\\Users\\test.pdf')

以上代码使用了Acrobat Reader的打印命令来实现无弹框打印和自动保存pdf文件。其中,cmd变量用于设置打印机参数及文件保存路径,然后通过调用ShellExecuteEx函数来执行打印命令。在测试时,您可以根据实际情况更改pdf、filename等参数进行测试。

希望这个解答能够帮助到您。