你有没有遇到过这种情况——
要交一份汇总报告,30个PDF文件得按顺序合并成一个,手头上只有一个福昕PDF编辑器,点一下合并,等半天,选下一个,再等半天……
30个文件,光合并就要点30次鼠标,还要排队等加载,烦不烦?
今天介绍一个我自己写的工具,50个PDF合并,5秒钟搞定。
这个工具能做什么
合并 — 把几十个PDF按顺序合并成一个,支持文件夹批量读取,不用一个个手选。
拆分 — 把一个大PDF按每N页拆成多份,或者提取指定页码(比如只取第3、5、7页)。
提取 — 从一堆PDF里把某一页单独抽出来,比如从一本报告里提取目录页。
全程本地运行,不需要上传到任何服务器,断网也能用。
谁在用
- 资料员
:项目竣工资料汇总,几十份报告合成一本 - 行政
:年度总结、季度报告合订本 - 财务
:每月发票PDF汇总打印 - 设计师
:给甲方发图时把多张图纸合并成一个PDF
使用方法
合并多个PDF
把要合并的文件放进同一个文件夹,按顺序命名(1.pdf、2.pdf、3.pdf……)。
.\pdf_tool.ps1 merge "C:\报告汇总" "C:\报告汇总\合并输出.pdf"拆分大PDF
把一个大PDF按每10页拆成一份:
.\pdf_tool.ps1 split "C:\大文件.pdf" --every 10提取指定页码:
.\pdf_tool.ps1 split "C:\大文件.pdf" --pages 3,5,7查看文件信息
.\pdf_tool.ps1 info "C:\文件.pdf"几个细节
- 本地运行
— 纯PowerShell脚本,不上传任何文件到服务器 - 批量处理
— 文件夹里有多少PDF就处理多少,不用一个个选 - 保留原始文件
— 只读不写,原始文件纹丝不动 - Windows自带
— 不需要安装Python或其他环境,Windows自带就能跑
核心代码
核心逻辑不到30行,用的是PowerShell内置的.NET对象:
# 合并:直接拼接二进制流 foreach ($f in $files) { $bytes = [System.IO.File]::ReadAllBytes($f.FullName) $buffer.Add($bytes) } [System.IO.File]::WriteAllBytes($OutputPath, $result) # 读取页数:正则匹配PDF内部计数器 if ($text -match '/Count\s+(\d+)') { $pageCount = [int]$Matches[1] }怎么获取
回复「PDF」获取工具包,包含完整脚本和使用说明。
夜雨聆风