本文最后更新于 2023-12-03,文章内容可能已经过时,遇到问题可以留言。

PDF自动打印脚本

目标

  1. 打印文件夹内所有PDF文件
  2. 带GUI界面,可选文件夹
  3. 可选纸张大小

实现

通过python脚本实现

import tkinter as tk
from tkinter import filedialog
import os
import subprocess
import time
import pyautogui

root = tk.Tk()
root.title("批量打印PDF")

entry = None
output_text = None
paper_size = tk.StringVar()  # 用于存储选择的纸张大小,默认为A3
paper_size.set("A3")

def open_pdf(file_path):
    if os.path.exists(file_path):
        try:
            subprocess.Popen(['C:\\Program Files (x86)\\Kingsoft\\Kingsoft PDF\\11.8.0.8603\\office6\\wpspdf.exe', file_path])
        except Exception as e:
            print("Error printing:", e)
    else:
        print("File not found.")

def print_pdf():
    pyautogui.hotkey('ctrl', 'p')
    time.sleep(1)
    # 选择打印机
    pyautogui.click(707, 155)
    time.sleep(1)
    pyautogui.click(709, 207)
    time.sleep(1)
    # 选择大小A3
    if paper_size.get() == "A3":
        pyautogui.click(799, 589)
        time.sleep(1)
        pyautogui.click(755, 697)
        time.sleep(1)
    # 打印并关闭窗口
    pyautogui.click(1226, 840)
    time.sleep(1)
    pyautogui.click(1911, 11)

def batch_print_pdf(folder_path):
    global output_text
    if os.path.exists(folder_path):
        for filename in os.listdir(folder_path):
            if filename.endswith('.pdf'):
                file_path = os.path.join(folder_path, filename)
                file_name = os.path.basename(file_path)  # 获取文件名部分
                output_text.insert(tk.END, f"打开: {file_name}\n")
                open_pdf(file_path)
                time.sleep(2)
                print_pdf()
                output_text.insert(tk.END, f"打印: {file_name}\n")
    else:
        output_text.insert(tk.END, "Folder not found.\n")

def select_folder():
    global entry
    default_path = os.path.dirname(__file__)  # 获取当前脚本文件所在的文件夹路径
    folder_selected = filedialog.askdirectory(initialdir=default_path, title="选择文件夹")
    entry.delete(0, tk.END)
    entry.insert(0, folder_selected)

def execute_print_task():
    global entry, output_text
    folder_path = entry.get()
    output_text.delete(1.0, tk.END)  # 清空之前的输出内容
    batch_print_pdf(folder_path)

def create_gui():
    global entry, output_text
    label = tk.Label(root, text="选择目标文件夹:")
    label.pack()

    entry = tk.Entry(root)
    entry.pack()

    browse_button = tk.Button(root, text="浏览", command=select_folder)
    browse_button.pack()

    paper_size_label = tk.Label(root, text="选择纸张大小:")
    paper_size_label.pack()

    a3_radio = tk.Radiobutton(root, text="A3", variable=paper_size, value="A3")
    a3_radio.pack()

    a4_radio = tk.Radiobutton(root, text="A4", variable=paper_size, value="A4")
    a4_radio.pack()

    print_button = tk.Button(root, text="执行打印", command=execute_print_task)
    print_button.pack()

    output_text = tk.Text(root, height=10, width=50)
    output_text.pack()

    root.mainloop()

create_gui()


print_pdf()里的坐标点可以通过以下代码取得,运行后等3s会打印出鼠标位置的坐标

import time
import pyautogui
time.sleep(3)
print(pyautogui.position())

效果

效果图