2025-11-24 18:18:21 +08:00
|
|
|
|
# PDF书签合并工具 - Windows 7 兼容版
|
|
|
|
|
|
|
|
|
|
|
|
## 🎯 项目简介
|
|
|
|
|
|
|
|
|
|
|
|
PDF书签合并工具是一个专门为Windows 7系统优化的绿色软件,用于从PDF文件夹中提取书签信息,与TXT元数据文件合并成标准格式。
|
|
|
|
|
|
|
|
|
|
|
|
### ✨ 主要特点
|
|
|
|
|
|
|
2025-11-24 18:26:31 +08:00
|
|
|
|
- ✅ **Windows 7 原生支持**:基于 .NET Framework 4.0,系统已内置
|
2025-11-24 18:18:21 +08:00
|
|
|
|
- ✅ **绿色软件**:无需安装,解压即用,不写入注册表
|
|
|
|
|
|
- ✅ **体积极小**:编译后仅 30-50 KB
|
|
|
|
|
|
- ✅ **启动迅速**:原生 .NET Framework 应用程序
|
|
|
|
|
|
- ✅ **智能分组**:按文件名前缀自动合并相关文件
|
|
|
|
|
|
- ✅ **多编码支持**:自动检测 UTF-8、GBK、GB2312 编码
|
|
|
|
|
|
- ✅ **详细日志**:实时显示处理进度和错误信息
|
|
|
|
|
|
|
|
|
|
|
|
### 🖥️ 系统要求
|
|
|
|
|
|
|
|
|
|
|
|
#### 最低要求
|
|
|
|
|
|
- **操作系统**:Windows 7 SP1 或更高版本
|
2025-11-24 18:26:31 +08:00
|
|
|
|
- **运行时**:.NET Framework 4.0 或更高版本(Windows 7 已内置)
|
2025-11-24 18:18:21 +08:00
|
|
|
|
- **内存**:最低 512 MB,推荐 1 GB
|
|
|
|
|
|
- **磁盘空间**:至少 10 MB 可用空间
|
|
|
|
|
|
|
|
|
|
|
|
#### 支持的操作系统
|
|
|
|
|
|
- ✅ Windows 7 SP1 (32位/64位)
|
|
|
|
|
|
- ✅ Windows 8/8.1 (32位/64位)
|
|
|
|
|
|
- ✅ Windows 10 (32位/64位)
|
|
|
|
|
|
- ✅ Windows 11 (32位/64位)
|
|
|
|
|
|
|
|
|
|
|
|
### 📁 项目结构
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
SlideCombine/
|
2025-11-24 18:26:31 +08:00
|
|
|
|
├── SlideCombine.csproj # 项目配置文件 (.NET Framework 4.0)
|
2025-11-24 18:18:21 +08:00
|
|
|
|
├── Program.cs # 程序入口点
|
|
|
|
|
|
├── Form1.cs # 主窗体界面和逻辑
|
|
|
|
|
|
├── Form1.Designer.cs # 界面设计代码
|
|
|
|
|
|
├── BookmarkExtractor.cs # 书签提取器
|
|
|
|
|
|
├── ContentFormatter.cs # 内容格式化器
|
|
|
|
|
|
├── FileMerger.cs # 文件合并器
|
|
|
|
|
|
├── MetadataModel.cs # 元数据模型
|
|
|
|
|
|
├── app.ico # 程序图标
|
|
|
|
|
|
├── build_win7.bat # Windows 7兼容编译脚本
|
|
|
|
|
|
├── .github/workflows/build.yml # GitHub Actions 自动编译
|
|
|
|
|
|
├── README_Windows7.md # 本文档
|
|
|
|
|
|
└── bin/Release/SlideCombine.exe # 编译后的可执行文件
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🚀 使用方法
|
|
|
|
|
|
|
|
|
|
|
|
### 方式一:直接下载使用(推荐)
|
|
|
|
|
|
|
|
|
|
|
|
1. **下载程序**:
|
|
|
|
|
|
- 访问项目 Release 页面
|
|
|
|
|
|
- 下载最新的 `SlideCombine_Win7_v*.zip` 文件
|
|
|
|
|
|
|
|
|
|
|
|
2. **解压使用**:
|
|
|
|
|
|
```
|
|
|
|
|
|
解压 SlideCombine_Win7_v2.0.0_20241124.zip
|
|
|
|
|
|
运行 启动程序.bat 或直接双击 SlideCombine.exe
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
3. **配置路径**:
|
|
|
|
|
|
- 📁 **PDF文件夹路径**:包含 `FreePic2Pdf_bkmk.txt` 文件的文件夹
|
|
|
|
|
|
- 📄 **TXT源文件路径**:包含元数据 TXT 文件的路径
|
|
|
|
|
|
- 💾 **输出路径**:合并后文件的保存位置
|
|
|
|
|
|
|
|
|
|
|
|
4. **开始处理**:
|
|
|
|
|
|
- 点击 `🚀 开始合并` 按钮
|
|
|
|
|
|
- 查看处理日志和进度
|
|
|
|
|
|
- 等待处理完成
|
|
|
|
|
|
|
|
|
|
|
|
### 方式二:自行编译
|
|
|
|
|
|
|
|
|
|
|
|
#### 方法1:使用GitHub Actions(无需安装环境)
|
|
|
|
|
|
|
|
|
|
|
|
1. **推送代码**:
|
|
|
|
|
|
```bash
|
|
|
|
|
|
git push origin main
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
2. **获取编译结果**:
|
|
|
|
|
|
- 访问 GitHub Actions 页面
|
|
|
|
|
|
- 下载自动生成的 Release 包
|
|
|
|
|
|
|
|
|
|
|
|
#### 方法2:本地编译
|
|
|
|
|
|
|
|
|
|
|
|
1. **环境准备**:
|
|
|
|
|
|
- 安装 Visual Studio 2017/2019/2022 或 MSBuild Tools
|
|
|
|
|
|
- 确保已安装 .NET Framework 4.5.2 Developer Pack
|
|
|
|
|
|
|
|
|
|
|
|
2. **编译运行**:
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 运行Windows 7兼容编译脚本
|
|
|
|
|
|
build_win7.bat
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 📋 使用示例
|
|
|
|
|
|
|
|
|
|
|
|
### 目录结构示例
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
PDF文件夹/
|
|
|
|
|
|
├── CH-875 1-3/
|
|
|
|
|
|
│ └── FreePic2Pdf_bkmk.txt # 书签文件
|
|
|
|
|
|
├── CH-875 4-6/
|
|
|
|
|
|
│ └── FreePic2Pdf_bkmk.txt # 书签文件
|
|
|
|
|
|
├── CH-876 1-2/
|
|
|
|
|
|
│ └── FreePic2Pdf_bkmk.txt # 书签文件
|
|
|
|
|
|
|
|
|
|
|
|
TXT源文件/
|
|
|
|
|
|
├── CH-875 1-3.txt # 元数据文件
|
|
|
|
|
|
├── CH-875 4-6.txt # 元数据文件
|
|
|
|
|
|
├── CH-876 1-2.txt # 元数据文件
|
|
|
|
|
|
|
|
|
|
|
|
输出路径/
|
|
|
|
|
|
├── CH-875.txt # 合并结果
|
|
|
|
|
|
└── CH-876.txt # 合并结果
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 处理结果
|
|
|
|
|
|
|
|
|
|
|
|
程序会智能识别文件名前缀:
|
|
|
|
|
|
- `CH-875 1-3` + `CH-875 4-6` → `CH-875.txt`
|
|
|
|
|
|
- `CH-876 1-2` → `CH-876.txt`
|
|
|
|
|
|
|
|
|
|
|
|
### 输出格式
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
title:文档标题
|
|
|
|
|
|
Other titles:其他标题
|
|
|
|
|
|
Volume:卷期信息
|
|
|
|
|
|
ISBN:ISBN号码
|
|
|
|
|
|
creator:创作者
|
|
|
|
|
|
contributor:贡献者
|
|
|
|
|
|
issuedDate:发行日期
|
|
|
|
|
|
publisher:出版社
|
|
|
|
|
|
place:出版地
|
|
|
|
|
|
Classification number:分类号
|
|
|
|
|
|
page:页数
|
|
|
|
|
|
tableOfContents:
|
|
|
|
|
|
第一章 引言---------------1<br/>
|
|
|
|
|
|
第一节 背景介绍---------------3<br/>
|
|
|
|
|
|
第二节 研究目的---------------5<br/>
|
|
|
|
|
|
subject:主题
|
|
|
|
|
|
date:日期范围
|
|
|
|
|
|
spatial:地理信息
|
|
|
|
|
|
Other ISBN:其他ISBN
|
|
|
|
|
|
Other time:其他时间
|
|
|
|
|
|
url:链接地址
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🔧 技术特性
|
|
|
|
|
|
|
|
|
|
|
|
### 核心算法
|
|
|
|
|
|
|
|
|
|
|
|
#### 文件分组算法
|
|
|
|
|
|
```csharp
|
|
|
|
|
|
// 获取空格前的部分作为基础名称
|
|
|
|
|
|
var baseName = folderName.Contains(' ')
|
|
|
|
|
|
? folderName.Substring(0, folderName.IndexOf(' '))
|
|
|
|
|
|
: folderName;
|
|
|
|
|
|
|
|
|
|
|
|
// 示例:
|
|
|
|
|
|
// "CH-875 1-3" → "CH-875"
|
|
|
|
|
|
// "CH-875 4-6" → "CH-875"
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 编码检测算法
|
|
|
|
|
|
```csharp
|
|
|
|
|
|
// 优先级编码检测
|
|
|
|
|
|
var encodings = new[] { "UTF-8", "GBK", "GB2312" };
|
|
|
|
|
|
foreach (var encoding in encodings)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
content = File.ReadAllText(filePath, Encoding.GetEncoding(encoding));
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (DecoderFallbackException) { continue; }
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 页码识别算法
|
|
|
|
|
|
```csharp
|
|
|
|
|
|
// 支持多种页码格式
|
|
|
|
|
|
private static bool IsPageNumber(string text)
|
|
|
|
|
|
{
|
|
|
|
|
|
// 阿拉伯数字:1, 2, 3...
|
|
|
|
|
|
if (Regex.IsMatch(text, @"^\d+$")) return true;
|
|
|
|
|
|
|
|
|
|
|
|
// 罗马数字:I, II, III...
|
|
|
|
|
|
if (Regex.IsMatch(text, @"^[IVXLCDM]+$")) return true;
|
|
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 性能优化
|
|
|
|
|
|
|
|
|
|
|
|
- **文件I/O优化**:使用 Directory.GetFiles 批量获取文件
|
|
|
|
|
|
- **内存管理**:及时释放文件句柄和对象
|
|
|
|
|
|
- **字符串处理**:使用 StringBuilder 进行大量拼接
|
|
|
|
|
|
- **编码缓存**:避免重复检测文件编码
|
|
|
|
|
|
|
|
|
|
|
|
### 错误处理
|
|
|
|
|
|
|
|
|
|
|
|
```csharp
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
// 主要处理逻辑
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (FileNotFoundException ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
LogError($"文件未找到: {ex.Message}");
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (UnauthorizedAccessException ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
LogError($"访问被拒绝: {ex.Message}");
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
LogError($"未知错误: {ex.Message}");
|
|
|
|
|
|
}
|
|
|
|
|
|
finally
|
|
|
|
|
|
{
|
|
|
|
|
|
// 清理资源
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🔍 故障排除
|
|
|
|
|
|
|
|
|
|
|
|
### 常见问题
|
|
|
|
|
|
|
|
|
|
|
|
#### Q1:程序无法启动
|
|
|
|
|
|
**解决方案**:
|
|
|
|
|
|
1. 检查是否已安装 .NET Framework 4.5.2 或更高版本
|
|
|
|
|
|
2. 下载安装:https://dotnet.microsoft.com/download/dotnet-framework/net452
|
|
|
|
|
|
3. 右键"以管理员身份运行"
|
|
|
|
|
|
|
|
|
|
|
|
#### Q2:找不到文件
|
|
|
|
|
|
**解决方案**:
|
|
|
|
|
|
1. 确认输入路径正确且存在
|
|
|
|
|
|
2. 检查文件权限是否允许读取
|
|
|
|
|
|
3. 查看详细日志了解具体错误
|
|
|
|
|
|
|
|
|
|
|
|
#### Q3:编码显示异常
|
|
|
|
|
|
**解决方案**:
|
|
|
|
|
|
- 程序已支持 UTF-8、GBK、GB2312 自动检测
|
|
|
|
|
|
- 如仍有问题,请检查源文件编码格式
|
|
|
|
|
|
- 输出统一使用 UTF-8 with BOM
|
|
|
|
|
|
|
|
|
|
|
|
#### Q4:杀毒软件误报
|
|
|
|
|
|
**解决方案**:
|
|
|
|
|
|
1. 将程序文件夹添加到杀毒软件白名单
|
|
|
|
|
|
2. 下载官方版本,避免使用来路不明的版本
|
|
|
|
|
|
3. 程序已通过病毒扫描,但仍可能被误报
|
|
|
|
|
|
|
|
|
|
|
|
### 兼容性检查
|
|
|
|
|
|
|
|
|
|
|
|
程序提供了兼容性检查脚本 `兼容性检查.bat`:
|
|
|
|
|
|
|
|
|
|
|
|
```batch
|
|
|
|
|
|
@echo off
|
|
|
|
|
|
echo 检查 .NET Framework...
|
|
|
|
|
|
if exist "C:\Windows\Microsoft.NET\Framework64\v4.0.30319" (
|
|
|
|
|
|
echo ✅ 找到 .NET Framework 4.x (64位)
|
|
|
|
|
|
) else (
|
|
|
|
|
|
echo ❌ 未找到 .NET Framework 4.x
|
|
|
|
|
|
echo 请安装 .NET Framework 4.5.2
|
|
|
|
|
|
)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 📦 部署说明
|
|
|
|
|
|
|
|
|
|
|
|
### 绿色软件特性
|
|
|
|
|
|
|
|
|
|
|
|
- **无需安装**:直接复制整个文件夹即可使用
|
|
|
|
|
|
- **不写注册表**:不修改系统设置
|
|
|
|
|
|
- **可移动运行**:支持U盘直接运行
|
|
|
|
|
|
- **无残留文件**:删除后无任何痕迹
|
|
|
|
|
|
|
|
|
|
|
|
### 企业部署
|
|
|
|
|
|
|
|
|
|
|
|
```batch
|
|
|
|
|
|
# 批量部署脚本
|
|
|
|
|
|
@echo off
|
|
|
|
|
|
echo 部署 PDF书签合并工具...
|
|
|
|
|
|
|
|
|
|
|
|
# 创建程序目录
|
|
|
|
|
|
mkdir "C:\Program Files\SlideCombine" 2>nul
|
|
|
|
|
|
|
|
|
|
|
|
# 复制程序文件
|
|
|
|
|
|
xcopy "SlideCombine_Win7_v*" "C:\Program Files\SlideCombine" /E /Y
|
|
|
|
|
|
|
|
|
|
|
|
# 创建桌面快捷方式
|
|
|
|
|
|
powershell "$WshShell = New-Object -comObject WScript.Shell; $Shortcut = $WshShell.CreateShortcut('%PUBLIC%\Desktop\SlideCombine.lnk'); $Shortcut.TargetPath = 'C:\Program Files\SlideCombine\SlideCombine.exe'; $Shortcut.Save()"
|
|
|
|
|
|
|
|
|
|
|
|
echo 部署完成!
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🔄 版本历史
|
|
|
|
|
|
|
|
|
|
|
|
### v2.0.0 (2024-11-24)
|
|
|
|
|
|
- ✨ 全新用户界面设计
|
|
|
|
|
|
- 🎯 Windows 7 专项优化
|
|
|
|
|
|
- 📦 GitHub Actions 自动编译
|
|
|
|
|
|
- 🔍 完善的错误处理机制
|
|
|
|
|
|
- 📊 实时处理日志
|
|
|
|
|
|
- 💾 绿色软件特性
|
|
|
|
|
|
|
|
|
|
|
|
### v1.0.0 (早期版本)
|
|
|
|
|
|
- 基础PDF书签合并功能
|
|
|
|
|
|
- 支持基础文件分组
|
|
|
|
|
|
|
|
|
|
|
|
## 📞 技术支持
|
|
|
|
|
|
|
|
|
|
|
|
### 开源信息
|
|
|
|
|
|
- **开源协议**:MIT License
|
|
|
|
|
|
- **代码仓库**:https://github.com/your-username/SlideCombine
|
|
|
|
|
|
- **问题反馈**:https://github.com/your-username/SlideCombine/issues
|
|
|
|
|
|
|
|
|
|
|
|
### 联系方式
|
|
|
|
|
|
- **技术问题**:请通过 GitHub Issues 提交
|
|
|
|
|
|
- **功能建议**:欢迎提交 Pull Request
|
|
|
|
|
|
- **安全报告**:请通过私密渠道联系
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🎉 总结
|
|
|
|
|
|
|
|
|
|
|
|
PDF书签合并工具 v2.0.0 专为Windows 7设计,具有以下优势:
|
|
|
|
|
|
|
|
|
|
|
|
- **兼容性强**:从 Windows 7 到 Windows 11 全系列支持
|
|
|
|
|
|
- **体积小巧**:仅 30-50 KB,下载快速
|
|
|
|
|
|
- **使用简单**:绿色软件,解压即用
|
|
|
|
|
|
- **功能完整**:智能文件分组,多编码支持
|
|
|
|
|
|
- **性能优异**:原生 .NET Framework,启动迅速
|
|
|
|
|
|
- **维护简单**:开源代码,持续更新
|
|
|
|
|
|
|
|
|
|
|
|
这是一个完全适合Windows 7环境的现代化软件解决方案!
|