本帖最后由 luojineng 于 2025-4-5 13:21 编辑
自认为最快的合并工具。当然,没有最快,只有更快{:1_918:}
界面

核心代码 pyton
]import os
import PyPDF2
import os
import re
import glob
def sorting_key(filename):
"""
自定义排序规则函数,将文件名按数字和非数字分割并转换成对应的对象,以便排序
:param filename: 文件名
:return: 转换后的对象列表
"""
# 使用正则表达式将文件名分割成数字和非数字部分
parts = re.split(r'(\d+)', filename)
# 如果是数字部分,返回整型数值;否则返回原始字符串
return [int(part) if part.isdigit() else part for part in parts]
def get_sorted_pdf_files(folder_path):
"""
获取指定文件夹内所有的 PDF 文件,并按文件名中数字的大小进行排序
:param folder_path: 文件夹路径
:return: 排序后的 PDF 文件名列表
"""
pdf_files = glob.glob(os.path.join(folder_path, "*.pdf"))
return sorted(pdf_files, key=sorting_key)
def go2pdf(folder_path, output_folder):
# 获取文件夹名称
folder_name = os.path.basename(folder_path)
# 获取指定文件夹下所有的 PDF 文件,并按文件名排序
#pdf_files = sorted([file_name for file_name in os.listdir(folder_path) if file_name.endswith('.pdf')])
pdf_files = get_sorted_pdf_files(folder_path)
# 创建一个新的 PDF 文档对象
merged_pdf = PyPDF2.PdfMerger()
# 循环读取需要合并的 PDF 文件,并将其添加到 merged_pdf 文档对象中
for file_name in pdf_files:
with open(os.path.join(folder_path, file_name), 'rb') as pdf_file:
merged_pdf.append(pdf_file)
# 将合并后的 PDF 文件存储到本地磁盘中,以文件夹名称命名
if len(output_folder) == 0:
output_folder = folder_path
output_filename = f'{folder_name}.pdf'
output_file_path = os.path.join(output_folder, output_filename)
with open(output_file_path, 'wb') as output_file:
merged_pdf.write(output_file)
return (f'合并成功!文件位置:{output_folder}\{output_filename} ')
UI代码 aardio
import win.ui;
import fsys.dlg.dir;
import py3;
import py3.export.aardio;
import winex;
import mouse;
/*DSG{{*/
mainForm = win.form(text="PDF极速合并助手1.2(吾爱52pojie.cn专版)By:luojineng";right=514;bottom=369;acceptfiles=1)
mainForm.add(
button={cls="button";text="选择结果目录";left=352;top=122;right=463;bottom=158;z=6};
edit={cls="edit";left=40;top=43;right=331;bottom=70;acceptfiles=1;edge=1;multiline=1;z=4};
edit2={cls="edit";left=41;top=127;right=332;bottom=154;acceptfiles=1;edge=1;multiline=1;z=7};
edit3={cls="edit";text="合并日志";left=24;top=281;right=486;bottom=343;edge=1;multiline=1;z=9};
groupbox={cls="groupbox";text="选择要合并的PDF文件目录";left=22;top=19;right=491;bottom=95;edge=1;z=2};
groupbox2={cls="groupbox";text="合并PDF成功的文件存放位置";left=22;top=103;right=491;bottom=179;edge=1;z=1};
selectDir={cls="button";text="选择源头目录";left=351;top=38;right=462;bottom=74;z=3};
start={cls="button";text="开始合并PDF";left=21;top=197;right=490;bottom=241;z=5};
static2={cls="static";text="注意:如果没选择存放合并成功PDF的文件位置,默认是PDF源头文件位置。";left=31;top=253;right=497;bottom=273;font=LOGFONT(h=-10);transparent=1;z=8}
)
/*}}*/
mainForm.selectDir.oncommand = function(id,event){
mainForm.edit.text = fsys.dlg.dir()
}
mainForm.button.oncommand = function(id,event){
mainForm.edit2.text = fsys.dlg.dir()
}
mainForm.start.oncommand = function(id,event){
if(!#mainForm.edit.text){
win.msgbox("还没有选择要合并PDF的源头目录","aardio");
return;
}
var findir = mainForm.edit.text;
var destdir = mainForm.edit2.text;
var pyMain = py3.import("pyMain");
var pyStr = pyMain.go2pdf(findir,destdir);
mainForm.edit3.text = pyStr;
}
mainForm.onDropFiles = function(files){
var x,y=mouse.getPos()
var hwnd=winex.fromPointReal(x,y)
if !string.match(win.getClass(hwnd),"@@edit") return ;
win.setText(hwnd,files[1])
}
mainForm.show();
return win.loopMessage();
已经打包程序
如果觉得好用,请评个热心值+1
如果觉得好用,请评个热心值+1
如果觉得好用,请评个热心值+1
|