# pdf2html - PDF批量转换为HTML工具
一个简单易用的工具,用于将PDF文件批量转换为HTML格式,基于pdf2htmlEX。
## 功能特性
- **批量转换**:一次性转换目录中所有的PDF文件
- **递归搜索**:支持递归搜索子目录中的PDF文件
- **命令行参数**:灵活的命令行参数配置
- **Docker支持**:提供Docker镜像,简化部署和使用
- **进度显示**:清晰的转换进度和结果统计
- **错误处理**:完善的错误处理和超时机制
## 技术栈
- **Python 3**:主要开发语言
- **pdf2htmlEX**:PDF转HTML的核心工具
- **Docker**:容器化部署
## 安装和构建
### 本地安装
1. 确保已安装Python 3和pdf2htmlEX
2. 克隆或下载此项目
### Docker构建
```bash
# 进入项目目录
cd pdf2html
# 构建Docker镜像
docker build -t pdf2html:latest .
```
或者使用docker-compose:
```bash
docker-compose build
```
## 使用方法
### 基本用法
#### 本地使用
```bash
# 转换当前目录下的所有PDF文件
python main.py
# 显示帮助信息
python main.py --help
```
#### Docker使用
```bash
# 转换当前目录下的所有PDF文件
docker run --rm -v $(pwd):/app pdf2html:latest
# 显示帮助信息
docker run --rm pdf2html:latest --help
```
### 命令行参数
| 参数 | 简写 | 默认值 | 说明 |
|------|------|--------|------|
| `--input-dir` | `-i` | `.` (当前目录) | 输入目录,包含PDF文件的目录 |
| `--output-dir` | `-o` | `htmls` | 输出目录,保存HTML文件的目录 |
| `--recursive` | `-r` | `True` | 递归搜索子目录中的PDF文件 |
| `--no-recursive` | - | - | 不递归搜索子目录 |
| `--zoom` | `-z` | `1.3` | 转换时的缩放比例 |
| `--help` | `-h` | - | 显示帮助信息 |
### 使用示例
#### 1. 基本转换
转换当前目录下的所有PDF文件到默认的`htmls`目录:
```bash
# 本地使用
python main.py
# Docker使用
docker run --rm -v $(pwd):/app pdf2html:latest
```
#### 2. 指定输入和输出目录
转换`./pdfs`目录中的PDF文件到`./output`目录:
```bash
# 本地使用
python main.py -i ./pdfs -o ./output
# Docker使用
docker run --rm -v $(pwd):/app pdf2html:latest -i /app/pdfs -o /app/output
```
#### 3. 不递归搜索子目录
只转换当前目录的PDF文件,不搜索子目录:
```bash
# 本地使用
python main.py --no-recursive
# Docker使用
docker run --rm -v $(pwd):/app pdf2html:latest --no-recursive
```
#### 4. 自定义缩放比例
使用1.5倍缩放比例转换PDF:
```bash
# 本地使用
python main.py --zoom 1.5
# Docker使用
docker run --rm -v $(pwd):/app pdf2html:latest --zoom 1.5
```
#### 5. 组合使用参数
组合使用多个参数,实现更精确的控制:
```bash
# 本地使用
python main.py -i ./documents -o ./converted --no-recursive --zoom 2.0
# Docker使用
docker run --rm -v $(pwd):/app pdf2html:latest -i /app/documents -o /app/converted --no-recursive --zoom 2.0
```
### 创建便捷别名(推荐)
为了简化使用,可以创建一个别名:
```bash
# Linux/Mac
alias pdf2html='docker run --rm -v $(pwd):/app pdf2html:latest'
# Windows PowerShell
function pdf2html { docker run --rm -v ${PWD}:/app pdf2html:latest $args }
```
然后就可以像使用普通命令一样使用:
```bash
# 显示帮助
pdf2html --help
# 转换当前目录
pdf2html
# 指定参数
pdf2html -i ./pdfs -o ./htmls
```
## Docker高级用法
### 使用docker-compose
1. 修改`docker-compose.yml`中的`command`参数(如果需要)
2. 运行:
```bash
# 构建并运行
docker-compose up --build
# 或者先构建,再运行
docker-compose build
docker-compose run pdf2html
```
### 挂载多个目录
如果需要访问多个目录中的PDF文件:
```bash
docker run --rm \
-v /path/to/pdfs1:/app/pdfs1 \
-v /path/to/pdfs2:/app/pdfs2 \
-v /path/to/output:/app/output \
pdf2html:latest \
-i /app/pdfs1 \
-o /app/output
```
## 注意事项
1. **文件路径**:在Docker中使用时,所有路径都应该是容器内的路径,通常以`/app`开头
2. **权限**:确保挂载的目录有适当的读写权限
3. **大文件**:转换大型PDF文件可能需要较长时间,默认超时时间为5分钟
4. **依赖项**:pdf2htmlEX可能需要一些系统依赖库,Docker镜像已包含所有必要依赖
## 常见问题
### Q: 如何处理转换失败的文件?
A: 程序会显示转换失败的文件名称和错误信息。您可以检查这些PDF文件是否损坏,或者尝试手动转换。
### Q: 转换后的HTML文件在哪里?
A: 默认情况下,HTML文件会保存在当前目录的`htmls`子目录中。您可以使用`--output-dir`参数指定其他位置。
### Q: 如何只转换新添加的PDF文件?
A: 程序会自动跳过已存在的HTML文件,所以如果您再次运行,只会转换新添加的PDF文件。
### Q: 支持哪些PDF版本?
A: 支持大多数标准PDF文件,但某些特殊格式(如加密PDF)可能无法转换。
## 项目结构
```
pdf2html/
├── main.py # 主程序文件
├── Dockerfile # Docker构建文件
├── docker-compose.yml # Docker Compose配置文件
├── README.md # 项目说明文档
└── .dockerignore # Docker忽略文件
```
## 许可证
Copyright © 2017-2024 liuyuqi. All Rights Reserved.
## 联系方式
如有问题或建议,请联系:liuyuqi.gov@msn.cn