python - 在python中打印多个pdf文件
问题描述
我要实现的过程是从一个文件夹打印多个 pdf 文件,然后关闭 Adobe Acrobat,最后使用我的另一个脚本将文件映射到新文件夹。
映射按预期工作,但我正在努力打印所有文件。我可以只打印一个文件,或者不打印任何文件,Adobe 仍然保持打开状态。我一直在玩 asyncio,但我不知道它是否能完成工作。
该代码没有很好的文档记录或出色的质量,它只需要完成任务并且很可能永远不会被触及。这里是:
import os
import sys
import keyboard
import asyncio
import psutil
from win32 import win32api, win32print
import map_files
import utility
def prepareFilesToPrint(folder):
# Scans folder for files with naming convention and puts them in a seperate array to print
filesToPrint = []
for file in os.listdir(folder.value):
if utility.checkFileName(file):
filesToPrint.append(file)
return filesToPrint
def preparePrinter():
# Opens the printer and defines attributes such as duplex mode
name = win32print.GetDefaultPrinter()
printdefaults = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS}
handle = win32print.OpenPrinter(name, printdefaults)
attributes = win32print.GetPrinter(handle, 2)
attributes['pDevMode'].Duplex = 2 # Lange Seite spiegeln
win32print.SetPrinter(handle, 2, attributes, 0)
return handle
async def printFiles(filesToPrint):
for file in filesToPrint:
await win32api.ShellExecute(
0, "print", file, '"%s"' % win32print.GetDefaultPrinter(), ".", 0)
def cleanup(handle):
# Closes Adobe after printing ALL files (!working)
win32print.ClosePrinter(handle)
for p in psutil.process_iter():
if 'AcroRd' in str(p):
p.kill()
async def printTaskFiles():
# Iterates over files in downloads folder and prints them if they are task sheets (!working)
os.chdir("C:/Users/Gebker/Downloads/")
filesToPrint = prepareFilesToPrint(utility.Folder.DOWNLOADS)
if filesToPrint.__len__() == 0:
print("No Files to print. Exiting...")
sys.exit()
print("=============================================================")
print("The following files will be printed:")
for file in filesToPrint:
print(file)
print("=============================================================")
input("Press ENTER to print. Exit with ESC")
while True:
try:
if keyboard.is_pressed('ENTER'):
print("ENTER pressed. Printing...")
handle = preparePrinter()
await printFiles(filesToPrint)
cleanup(handle)
print("Done printing. Mapping files now...")
# map_files.scanFolders()
break
elif keyboard.is_pressed('ESC'):
print("ESC pressed. Exiting...")
sys.exit()
except:
break
if __name__ == "__main__":
asyncio.run(printTaskFiles())
解决方案
推荐阅读
- oracle - 更新:函数错误:PLS-00306:调用“get_bus_result_attribute”时参数的数量或类型错误
- ssh - 如何使用非标准端口和两因素 2FA 身份验证进行 rsync?
- java - 如何按特定列对 Object[][] 类型的数组进行排序
- php - 如何将此excel格式导入此数据库格式?
- asp.net-core - aspnetzero 和电动工具可能存在问题
- python - 如何在烧瓶中创建两阶段登录页面?
- oracle12c - Oracle Service Bus 12c - 如何在 Java 标注中传递数组数据类型
- linux - 重置后恢复 git commit
- java - 出现错误:Scala 中的顶级语句声明错误
- spring - i want to get alias column name and value in java spring hibernate