Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

批量打印助手 (BatchPrint)

基于 PRD.md 完整实现的 Windows 批量打印桌面应用(C# / .NET 8 / WPF)。

简介

批量打印助手是一款面向办公场景的 Windows 桌面工具,用于一次性打印大量异构文档: 支持 PDF、Word、Excel、PowerPoint、图片、TXT、CSV 等多种格式混排批量打印, 支持逐文件独立设置打印参数(份数、单双面、彩色、纸张、缩放、N-up、水印等), 自动生成打印任务规划(相同参数合并、不同参数拆分)、后台队列监控与一键批量打印。

快速使用

  • 发布版(推荐,零依赖):把 dist 文件夹中的 BatchPrint.exe(主程序)+ BatchPrint.Worker.exe(Office/LibreOffice 转换子进程) 一起发给对方(放在同一文件夹)。两者均为自包含单文件(已内嵌 .NET 8 运行时与 PDFium/Skia/SQLite 原生库),目标机器无需安装任何环境,双击即用(需 Windows x64,支持 Win10/11)。
  • 开发版:需 .NET 8 SDK;dotnet run --project src\BatchPrint.App
  • 可选功能依赖:Office 文档(.docx/.xlsx/.pptx)转换支持三种引擎(自动选择)——Microsoft OfficeWPS Office(COM,Worker 子进程隔离)、LibreOffice。目标机器安装三者之一即可;未安装对应格式转换引擎时会提示,其余功能不受影响。转换模式可在"设置 → 转换"中选择(自动 / 优先 Office / 优先 WPS / 优先 LibreOffice / 仅某引擎)。

功能总览(对照 PRD)

模块 说明 对应 PRD
文件导入 PDF / Word / Excel / PowerPoint / 图片 / TXT / CSV,拖拽导入、文件夹扫描、自然排序、智能模板 §12 / §13
打印参数 逐文件设置:打印机、份数、页码、单双面、彩色、纸张、纸盒、方向、缩放、N-up、质量、DPI、水印、页眉页脚、手动双面 §15
打印机 枚举、状态、能力检测(PrintCapabilities)、默认打印机、驱动属性窗口、测试页 §14
任务规划 相同参数合并 / 不同参数拆分、独立任务、分组、暂停点、纸张估算 §18 / §20
打印队列 队列状态监控(1 秒轮询)、暂停 / 恢复 / 取消、完成历史 §21
打印执行 打印前检查、一键批量打印、进度显示、失败重试 §22
模板 内置 5 种模板 + 自定义模板,参数一键套用 §23
历史记录 打印历史自动保存、重新打印、清理 §24
设置 语言、外观、安全(管理员权限 / 提示)、数据目录、兼容选项 §25
转换 PDF(PDFium)、图片(SkiaSharp)、TXT(编码自动识别)、Office(COM 隔离子进程 / LibreOffice Headless) §16
拼版与排版 N-up 多页拼版、证件照 1/2/4 张拼版、水印叠加、页眉页脚 §17

界面说明

  • 首页:最近任务、快速开始(添加文件 / 文件夹)、模板入口
  • 工作台:三栏布局(文件列表 / 预览 / 打印参数),预览支持页码导航与缩放(矢量重绘,高 DPI 清晰)
  • 打印队列:实时任务列表与状态、暂停 / 恢复 / 取消
  • 打印机:打印机列表、状态、能力、测试页、默认打印机
  • 模板:内置 + 自定义模板管理
  • 历史:打印历史记录、重新打印
  • 设置:语言、外观、安全、数据目录、兼容选项

构建

# 还原并构建(依赖已配置 NuGet 国内镜像,见 src/NuGet.Config)
dotnet build BatchPrint.sln -c Release

# 运行冒烟测试(含真实打印提交验证)
dotnet run --project tests\SmokeTest -c Release

# 发布自包含单文件(零依赖分发版)
dotnet publish src\BatchPrint.App -c Release -r win-x64 --self-contained true `
  -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:DebugType=None
dotnet publish src\BatchPrint.Worker -c Release -r win-x64 --self-contained true `
  -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:DebugType=None

目录结构

src/
  BatchPrint.Core/          领域模型、文件导入、打印参数、任务规划引擎(无 UI 依赖)
  BatchPrint.Printing/      Win32 Spooler 封装(EnumJobs/SetJob)、PrintCapabilities/PrintTicket、静默提交
  BatchPrint.Pdf/           PDFium 封装(渲染、缩略图、页面处理、TXT→PDF)、打印渲染管线
  BatchPrint.Imaging/       SkiaSharp 图片解码、N-up/证件照拼版、颜色转换
  BatchPrint.Office/        Office COM 转换(Word/Excel/PowerPoint,宏禁用)
  BatchPrint.LibreOffice/   LibreOffice 检测与 Headless 转换
  BatchPrint.Persistence/   SQLite 存储(模板、历史、设置)、内置模板
  BatchPrint.Worker/        转换子进程(COM 隔离,JSON 协议)
  BatchPrint.App/           WPF 主程序(MVVM、DI、Serilog)
tests/
  SmokeTest/                端到端冒烟测试(含真实打印)

技术栈

  • .NET 8 / WPF / CommunityToolkit.Mvvm / Microsoft.Extensions.DependencyInjection
  • PDFium(PDF 渲染)、SkiaSharp(图像处理)、Microsoft.Data.Sqlite(SQLite 存储)
  • Microsoft Office Interop(可选)、LibreOffice Headless(可选)
  • Serilog(日志,崩溃报告自动收集)

常见问题

  • 打印出来模糊? 打印渲染固定 300 DPI 输出(按打印机分辨率自动提升,上限 450 DPI),确保位图分辨率不低于物理打印分辨率。
  • 队列页任务列表为空? 使用 Win32 EnumJobs 枚举(System.Printing 的 GetPrintJobInfoCollection 在部分打印机上返回空)。
  • Office 文档提示"未检测到"? 目标机器需安装 Microsoft Office 或 LibreOffice。
  • Worker 启动失败? BatchPrint.Worker.exe 必须与主程序位于同一文件夹。

许可证

本项目代码仅作学习与内部使用,请勿用于商业用途。

About

批量文件打印工具

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages