Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
166 changes: 163 additions & 3 deletions README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,52 @@
![example](assets/example.png)

## 使用方法

### Windows 系统
1. 在 [Release](https://github.com/greyovo/markdocx/releases) 下载可执行文件(暂未提供 macOS 版)
2. 在可执行文件所在目录,终端执行命令:`.\markdocx path/to/your/file.md`,会在 md 文件的同目录下生成同名 docx 文件。

### Ubuntu/Linux 系统

#### 方式1:使用便捷脚本(推荐)
1. 运行安装脚本:
```bash
./setup_ubuntu.sh
```

2. 使用转换工具:
```bash
# 显示帮助信息
./markdocx_ubuntu.sh

# 转换markdown文件
./markdocx_ubuntu.sh example/example.md

# 指定输出文件
./markdocx_ubuntu.sh input.md -o output.docx

# 转换后自动打开文件
./markdocx_ubuntu.sh input.md -a
```

#### 方式2:直接使用Python脚本
```bash
# 安装依赖
/opt/miniconda3/envs/office-service/bin/pip install -r requirements.txt

# 运行转换
/opt/miniconda3/envs/office-service/bin/python src/markdocx.py example/example.md
```

#### 方式3:构建可执行文件
```bash
# 构建
./build_ubuntu.sh

# 使用构建的可执行文件
./dist/markdocx example/example.md
```

完整命令示例:

```shell script
Expand Down Expand Up @@ -39,6 +82,119 @@ markdocx "D:/my folder/the input.md" -o "D:/my folder/the output.md"

2. 无序列表和有序列表目前最大解析层级为两级,超过两层的内容会被丢弃

## 🖼️ 增强图片下载功能

MarkDocx 支持增强的图片下载功能,可以解决网络图片访问中的各种问题:

### 🚀 功能特性

- ✅ **SSL证书验证失败** - 支持自签名证书,解决企业内网图片访问问题
- ✅ **需要登录的图片** - 自动读取浏览器Cookie,访问私有图片资源
- ✅ **反爬虫防护** - 模拟真实浏览器请求,绕过反爬虫机制
- ✅ **网络超时问题** - 智能重试机制,提高下载成功率
- ✅ **权限验证** - 支持自定义请求头,处理API接口图片

### 🔧 解决的常见错误

#### SSL证书问题
**错误信息**:
```
[RESOURCE ERROR]: certificate verify failed: self-signed certificate
```
**解决方案**:程序默认跳过SSL验证,支持自签名证书

#### Cookie验证问题
**错误信息**:
```
[RESOURCE ERROR]: HTTP Error 403: Forbidden
```
**解决方案**:自动读取浏览器Cookie,支持需要登录的图片

### 📋 使用方法

#### 基本使用(自动功能)
```bash
# 普通使用,自动应用所有增强功能
./markdocx_ubuntu.sh example/test.md

# 程序会自动:
# - 读取浏览器Cookie
# - 跳过SSL验证
# - 模拟真实浏览器请求
```

#### 针对特定网站

**方法1:使用浏览器登录后转换**
1. 在浏览器中正常登录需要验证的网站
2. 确保图片可以在浏览器中正常显示
3. 运行转换命令,程序会自动读取浏览器Cookie

**方法2:手动配置请求头**
编辑 `src/config/image_config.yaml` 文件:

```yaml
# 图片下载配置
use_browser_cookies: true # 使用浏览器Cookie
verify_ssl: false # 跳过SSL验证
timeout: 15 # 超时时间

# 自定义请求头
custom_headers:
User-Agent: "Mozilla/5.0 ..."
Referer: "https://your-site.com"
Authorization: "Bearer your-token"
```

### 📊 效果对比

| 功能 | 之前 | 现在 |
|------|------|------|
| SSL证书验证 | ❌ 失败报错 | ✅ 自动跳过验证 |
| 需要登录的图片 | ❌ 403/401错误 | ✅ 自动使用浏览器Cookie |
| 反爬虫网站 | ❌ 被拒绝访问 | ✅ 模拟真实浏览器 |
| 网络超时 | ❌ 直接失败 | ✅ 智能重试 |
| 下载进度 | ❌ 无反馈 | ✅ 显示字节数 |

### 🔍 调试信息

程序会显示详细的下载信息:

```bash
[COOKIES] Loaded cookies from Chrome # Cookie加载状态
[IMAGE] fetching: https://example.com/img.jpg # 开始下载
[SUCCESS] Downloaded 144868 bytes # 下载成功
```

如果遇到问题,会显示具体错误:
```bash
[SSL ERROR] certificate verify failed # SSL问题
[NETWORK ERROR] Connection timeout # 网络问题
[FALLBACK] Using urllib with SSL disabled # 使用备用方法
```

### 🎯 支持的场景

- ✅ **企业内网图片**(自签名SSL证书)
- ✅ **私有相册图片**(需要登录验证)
- ✅ **图床服务**(反爬虫保护)
- ✅ **API接口图片**(需要Authorization)
- ✅ **CDN加速图片**(需要Referer验证)

### 🆘 常见问题

**Q: 图片还是下载失败怎么办?**
A: 检查以下几点:
1. 确保浏览器中能正常访问图片
2. 检查网络连接
3. 尝试增加超时时间
4. 查看错误信息,可能需要特殊的请求头

**Q: 某些私有图片无法下载?**
A:
1. 先在浏览器中登录相关网站
2. 确保浏览器Cookie可访问(关闭隐私模式)
3. 可能需要手动配置特殊的请求头

## 自定义样式参数

Expand Down Expand Up @@ -75,19 +231,21 @@ h1: # 段落类型名称,可取的值见上表
after: 0 # 段后空格,默认 [0] pt
```


## 从源码构建

1. 需要 Python 3.0+ 环境
2. 安装依赖 `pip install -r requirements.txt`
3. 入口文件 `markdocx.py`
4. 构建可执行文件
1. Windows 下运行 `build.bat`
2. macOS 复制 `build.bat` 中的命令到终端执行(待验证)
2. Ubuntu/Linux 下运行 `./build_ubuntu.sh`
3. macOS 复制 `build.bat` 中的命令到终端执行(待验证)

## 未来计划

- [x] 使用 YAML 导入样式参数
- [x] 增强图片下载功能(支持SSL、Cookie、反爬虫)
- [x] Ubuntu/Linux 系统支持
- [ ] 支持更多段落类型设置
- [ ] 提供 GUI
- [ ] 提供 macOS 版本。目前我只有 Windows 设备,欢迎参与贡献:)
Expand Down Expand Up @@ -117,4 +275,6 @@ h1: # 段落类型名称,可取的值见上表
- [python-docx](https://python-docx.readthedocs.io)
- [python-markdown](https://python-markdown.github.io)
- [beautifulsoup4](https://beautifulsoup.readthedocs.io)
- [pyyaml](https://pyyaml.org)
- [pyyaml](https://pyyaml.org)
- [requests](https://docs.python-requests.org)
- [browser-cookie3](https://github.com/borisbabic/browser_cookie3)
Binary file removed assets/example.png
Binary file not shown.
14 changes: 14 additions & 0 deletions build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/bin/bash

# Linux/macOS 构建脚本
# 检查是否安装了pyinstaller
if ! command -v pyinstaller &> /dev/null; then
echo "pyinstaller not found. Installing..."
pip install pyinstaller
fi

# 构建可执行文件
pyinstaller --noconfirm --onefile --console --add-data "./src/config:config/" "src/markdocx.py"

echo "构建完成!可执行文件位于 dist/markdocx"
echo "Build completed! Executable is located at dist/markdocx"
42 changes: 42 additions & 0 deletions build_ubuntu.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#!/bin/bash

# Ubuntu 系统构建脚本
# 使用指定的Python环境构建可执行文件

PYTHON_PATH="/opt/miniconda3/envs/office-service/bin/python"
PIP_PATH="/opt/miniconda3/envs/office-service/bin/pip"

echo "=== MarkDocx Ubuntu 构建脚本 ==="
echo "使用Python环境: $PYTHON_PATH"

# 检查Python环境是否存在
if [ ! -f "$PYTHON_PATH" ]; then
echo "错误:指定的Python路径不存在: $PYTHON_PATH"
echo "请先运行 ./setup_ubuntu.sh 进行安装"
exit 1
fi

# 检查是否安装了pyinstaller
echo "检查pyinstaller..."
if ! $PYTHON_PATH -c "import PyInstaller" 2>/dev/null; then
echo "pyinstaller未找到,正在安装..."
$PIP_PATH install pyinstaller
fi

# 构建可执行文件
echo "正在构建可执行文件..."
$PYTHON_PATH -m PyInstaller --noconfirm --onefile --console --add-data "./src/config:config/" "src/markdocx.py"

if [ $? -eq 0 ]; then
echo ""
echo "构建成功!"
echo "可执行文件位于: dist/markdocx"
echo ""
echo "使用方法:"
echo " ./dist/markdocx example/example.md"
echo " ./dist/markdocx example/example.md -o output.docx"
echo " ./dist/markdocx example/example.md -a # 转换后自动打开文件"
else
echo "构建失败!请检查错误信息。"
exit 1
fi
Binary file added example/example.docx
Binary file not shown.
Loading