最近搜索

以下是实现PDF下载和打印功能的Python解决方案,支持Windows系统下的多打印机选择、打印方向设置和自定义打印次数

浏览:25
管理员 2025-08-21 18:21
import os
import requests
import win32print
import win32api
from PyPDF2 import PdfReader

def download_pdf(url, save_path):
    """下载PDF文件到本地"""
    response = requests.get(url)
    with open(save_path, 'wb') as f:
        f.write(response.content)

def list_printers():
    """获取系统所有打印机"""
    return win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL)

def print_pdf(file_path, printer_name, copies=1, landscape=False):
    """打印PDF文件"""
    if not os.path.exists(file_path):
        raise FileNotFoundError(f"文件 {file_path} 不存在")
    
    # 设置打印方向
    orientation = "LANDSCAPE" if landscape else "PORTRAIT"
    win32api.ShellExecute(
        0,
        "print",
        file_path,
        f'/d:"{printer_name}" /orientation:{orientation} /copies:{copies}',
        ".",
        0
    )

if __name__ == "__main__":
    # 示例使用
    pdf_url = "https://example.com/sample.pdf"
    save_path = "sample.pdf"
    
    # 1. 下载PDF
    download_pdf(pdf_url, save_path)
    
    # 2. 列出所有打印机
    printers = list_printers()
    print("可用打印机:")
    for i, printer in enumerate(printers):
        print(f"{i+1}. {printer[2]}")
    
    # 3. 选择打印机和打印参数
    printer_index = int(input("选择打印机编号: ")) - 1
    copies = int(input("打印份数: "))
    landscape = input("横向打印? (y/n): ").lower() == 'y'
    
    # 4. 执行打印
    print_pdf(save_path, printers[printer_index][2], copies, landscape)
    print("打印任务已发送")


联系站长

站长微信:xiaomao0055

站长QQ:14496453