Skip to content

About

Windows 批量打印 PDF 的桌面工具:选文件夹一次打完,每行可单独设页码和份数,自带 PDF 渲染引擎,不依赖 Adobe / WPS / SumatraPDF。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

PDF 批量打印

一个 Windows 桌面小工具:选一个文件夹,把里面的 PDF 一次性送去打印机。

每行可以单独设置打印页码和份数,勾选哪些就打哪些,底部实时显示预计耗纸量。

界面截图


为什么不用 Adobe / WPS / SumatraPDF

因为那些软件的命令行打印需要本机装好对应程序,而且各家参数不统一:

  • SumatraPDF -print-to-default file.pdf —— 得先装 SumatraPDF
  • Acrobat.exe /t file.pdf printer —— 得装 Adobe,版本之间还变
  • WPS 的打印接口更是不对外公开

换一台电脑、换一个版本,脚本就废了。

这个程序自带 PDF 渲染引擎(pypdfium2),把每一页渲染成位图后直接画到 Windows 的打印接口(GDI)上。只要系统里装了打印机驱动,不需要任何第三方阅读器。


功能

  • 添加文件 / 添加文件夹:文件夹会递归扫描所有 .pdf
  • 每行独立设置:页码范围、份数各管各的,互不影响
  • 勾选控制:只打勾上的,表头可以一键全选 / 全不选
  • 实时统计:底部随时显示「N 个文件,共 N 页,耗纸 N 张」
  • 指定打印机:支持本机和网络打印机,可调渲染清晰度
  • 随时停止:打印中按钮变成「停止打印」
  • 自动适配:页面方向和纸张方向不一致时自动旋转 90°;等比缩放居中
  • 记住设置:打印机和清晰度会记住,下次打开直接用
  • 坏文件跳过:加密或损坏的 PDF 会标灰并跳过,不影响其他文件

下载使用

到 Releases 页面下载 PDFBatchPrint-v1.0.0.exe,双击运行。

GitHub 不允许发布资源使用中文文件名,所以下载下来是英文名。你可以自己改成 PDF批量打印.exe,不影响使用。

不需要安装 Python,不需要安装任何阅读器。

首次启动大约 3–5 秒(单文件程序要先解压到临时目录),之后就快了。

第一次运行可能被拦

程序没有代码签名,Windows 可能弹「Windows 已保护你的电脑」。点 更多信息 → 仍要运行 即可。

部分杀毒软件会把 PyInstaller 打包的单文件程序误报成木马,这是打包工具的常见问题,不是程序有问题,加白名单即可。


怎么用

  1. 点 + 添加文件 或 添加文件夹
  2. 在「打印页面范围」里填要打的页,在「份数」里填份数
  3. 不需要打的,把左边的勾去掉
  4. 点 批量打印设置 选打印机和清晰度
  5. 点 开始打印

页码范围怎么写

写法 含义
1-3 第 1 到第 3 页
1,3,5 只打第 1、3、5 页
1-3,7 第 1 到 3 页,再加第 7 页
5 只打第 5 页
留空 全部页
全部 全部页

写错了(比如超出实际页数、出现字母)会当场提示,不会打错。

清晰度怎么选

档位 适用
150 dpi 草稿、内部传阅,最快
200 dpi 一般文档
300 dpi 推荐。表格、合同、试卷都够清晰
400 dpi 图片多的文档,渲染较慢

从源码运行

pip install pypdfium2 pillow
python pdf_batch_print.py

环境要求:Windows 10/11,Python 3.9+,且安装时勾选了 tcl/tk(tkinter 是界面库)。


重新打包成 exe

双击 重新打包.bat。它会自动检查并安装依赖,然后调用 PyInstaller 打包,最后把产物复制成 PDF批量打印.exe。

也可以手动执行:

pip install pyinstaller
pyinstaller --noconfirm --onefile --windowed --icon app.ico ^
    --version-file version_info.txt --name PDFBatchPrint pdf_batch_print.py

自检

打包后可以跑一次自检,确认渲染引擎和打印机都正常:

PDF批量打印.exe --selftest

结果会写到 %TEMP%\pdfprint_selftest.txt。


常见问题

打印出来内容偏小或留白很多? 程序会按纸张可打印区域等比缩放并居中。如果原 PDF 页面尺寸特殊(比如 A5 排在 A4 纸上),可能是比例问题。检查打印机设置里的纸张尺寸是否和 PDF 页面匹配。

打印位置偏移? 程序按打印机驱动报告的可打印区域绘制,正常情况下不会偏。如果偏了,多半是驱动里的边距设置有问题。

支持双面打印吗? 目前没有直接控制,取决于打印机驱动的默认设置。可以在系统打印机首选项里设成双面。

能打印其他格式吗? 不能。目前只处理 PDF。Word/Excel 需要先另存为 PDF。

支持 macOS / Linux 吗? 不支持。打印部分直接调用 Windows GDI 接口,是 Windows 专用的。


技术说明

  • 界面:tkinter(自绘勾选框和图标,因为 ttk 的控件改不了颜色)

  • 渲染:pypdfium2,按 72 dpi 基准缩放

  • 打印:ctypes 直接调用 gdi32 / winspool.drv,不依赖 pywin32

    流程:CreateDCW → StartDocW → (StartPage → StretchDIBits → EndPage) × N → EndDoc

  • 打包:PyInstaller onefile

一个值得记下的坑

StretchDIBits 要求 DIB 每行按 4 字节对齐。少补这个 padding,程序会直接抛 access violation 崩溃。

而且它很隐蔽:如果图片宽度 × 3 刚好能被 4 整除(比如 1240px),完全不会报错; 只有宽度不整除时(比如 A4@300dpi 的 2481px)才崩。用内存 DC 测试也发现不了,必须在真实打印机上才会暴露。


许可

MIT

作者:张翀

About

Windows 批量打印 PDF 的桌面工具:选文件夹一次打完,每行可单独设页码和份数,自带 PDF 渲染引擎,不依赖 Adobe / WPS / SumatraPDF。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages