Windows环境下使用Python自动化批量打印PDF指定奇数页的方法
Windows环境下Python批量打印PDF奇数页实现方案
前置依赖
- 安装所需第三方库,在命令行执行以下命令完成安装:
pip install PyPDF2 pywin32
两个库的作用:PyPDF2负责读取原PDF、抽取所有奇数页生成临时文件;pywin32负责对接Windows系统打印接口,直接将任务提交到打印队列,无需手动操作打印设置界面。
核心实现代码
import os import time import tempfile from PyPDF2 import PdfReader, PdfWriter import win32api import win32print def print_pdf_odd_pages(pdf_full_path, target_printer=None): # 读取原始PDF文件 pdf_reader = PdfReader(pdf_full_path) pdf_writer = PdfWriter() # 筛选所有实体奇数页(即日常计数的第1、3、5...页,与手动打印设置的奇数页规则一致) for page_index in range(len(pdf_reader.pages)): # 实体页码 = 索引+1,判断是否为奇数 if (page_index + 1) % 2 == 1: pdf_writer.add_page(pdf_reader.pages[page_index]) # 生成*无文件锁*的临时PDF文件 with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp_handle: tmp_pdf_path = tmp_handle.name pdf_writer.write(tmp_handle) # 获取系统默认打印机,若未指定目标打印机则使用默认设备 if not target_printer: target_printer = win32print.GetDefaultPrinter() try: # 静默调用系统打印能力,将临时PDF提交到指定打印机队列 win32api.ShellExecute( 0, "printto", tmp_pdf_path, f'"{target_printer}"', ".", 0 ) # 等待1秒确保打印任务已读取临时文件内容,避免文件占用报错 time.sleep(1) finally: # 无论打印任务提交成功与否,都清理临时生成的PDF文件 if os.path.exists(tmp_pdf_path): os.unlink(tmp_pdf_path) # 调用示例 if __name__ == "__main__": # 替换为自己需要打印的PDF文件绝对路径 print_pdf_odd_pages(r"C:\test\需要打印的文档.pdf")
关键注意事项
- 页码匹配规则:代码内的奇数页筛选逻辑与Windows打印设置的“打印奇数页”规则完全对齐,不会出现0基索引导致的页码错位问题
- 运行效果:打印过程不会弹出PDF阅读器窗口,直接将页面内容提交到打印队列,全程无需手动交互
- 自定义打印机:如果需要指定非默认打印机,可在调用
print_pdf_odd_pages函数时传入目标打印机的全称,打印机名称可从Windows“设置-蓝牙和设备-打印机和扫描仪”列表中获取 - 异常适配:若原PDF存在加密、页面损坏的情况,可在代码外层增加异常捕获逻辑,输出对应报错提示
内容的提问来源于stack exchange,提问作者Abhishek kumar
相关产品推荐
相关产品推荐

