You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 02:15:06