在Windows系统中,我们可以很方便地通过微软商店安装Python,这使得一般的办公人员也能获得强大的技术支持。下面是一个Python脚本,用于合并PDF文件,特别适合需要扫描归档文件的场合。这个脚本会选择最近的几个PDF文件,并将它们按照创建时间的升序合并,以最老的文件名作为合并后文件的前缀。

import sys
from pathlib import Path
from pypdf import PdfReader, PdfWriter
import shutil
from datetime import datetime

# 只接受一个整数参数:要合并最近几份PDF
if len(sys.argv) != 2:
    print("❌ 使用方式: python m.py <int>")
    sys.exit(1)

try:
    count = int(sys.argv[1])
except ValueError:
    print("❌ 请输入正确的整数")
    sys.exit(1)

# 找出目前路径下所有PDF,依建立时间排序(最新在前)
all_pdfs = sorted(Path(".").glob("*.pdf"), key=lambda f: f.stat().st_ctime, reverse=True)

if not all_pdfs:
    print("❌ 当前路径下没有 PDF 文件")
    sys.exit(1)

if count <= 0 or count > len(all_pdfs):
    print("❌ 数字超出范围")
    sys.exit(1)

# 先挑最近的 N 份,再把这 N 份依建立时间「升幂」排序(旧→新)
selected = all_pdfs[:count]
selected_sorted = sorted(selected, key=lambda f: f.stat().st_ctime)  # 正序合并

# 合并 PDF
writer = PdfWriter()
for pdf in selected_sorted:
    reader = PdfReader(str(pdf))
    for page in reader.pages:
        writer.add_page(page)

# 以最旧那份(selected_sorted[0])的文件名作为前缀
first_name = selected_sorted[0].stem
output_name = f"{first_name}_merged.pdf"
output_path = Path(output_name)

with open(output_path, "wb") as f:
    writer.write(f)

# 建立文件夹,移动用到的原始PDF
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
used_folder = Path(f"used_sources_{timestamp}")
used_folder.mkdir(exist_ok=True)

for pdf in selected_sorted:
    dest = used_folder / pdf.name
    if dest.exists():
        dest = used_folder / f"{pdf.stem}_{timestamp}{pdf.suffix}"
    shutil.move(str(pdf), str(dest))

print(f"✅ 合并完成:{output_path}")
print(f"📁 已将使用的原始文件移至:{used_folder}")

这个脚本首先检查用户是否输入了一个整数参数,然后找到当前路径下所有的PDF文件,并按创建时间排序。接着,它选择最近的几个PDF文件,并按照创建时间的升序合并它们。最后,脚本将合并后的文件保存在以最老文件名作为前缀的文件中,并将原始文件移动到一个新的文件夹中,以保持工作区的整洁。

标签: none

评论已关闭