# PDF2OFD **Repository Path**: sayme/pdf2-ofd ## Basic Information - **Project Name**: PDF2OFD - **Description**: 一款本地化 PDF 转 OFD 工具,支持左右对比预览,自动转换,零学习成本。基于 Python + PyQt5 + EasyOFD 开发。 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-21 - **Last Updated**: 2026-01-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PDF 转 OFD 工具 > 一个简单易用的 PDF 转 OFD 格式转换工具,支持左右对比预览功能。 [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![Platform](https://img.shields.io/badge/platform-Windows-lightgrey.svg)](https://www.microsoft.com/windows) [![Python](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/) ## ✨ 功能特点 - 🎯 **单文件处理** - 专注单个 PDF 文件转换,简单高效 - 🔄 **自动转换** - 打开 PDF 自动检测并转换为 OFD - 👁️ **左右对比** - 实时预览 PDF 和 OFD,方便对比效果 - 📄 **多页浏览** - 支持翻页功能,可查看文档所有页面 - 🎨 **简洁界面** - 极简设计,一键操作,零学习成本 - 💾 **智能保存** - OFD 自动保存在 PDF 同目录,方便管理 - 🚀 **高清预览** - 200 DPI 高质量渲染,预览清晰 ## 🖼️ 界面预览 ``` ┌─────────────────────────────────────────────┐ │ [📂 打开 PDF 文件] 📄 当前文件名 │ ├─────────────────────────────────────────────┤ │ ┌──────────────┬──────────────┐ │ │ │ PDF 预览 │ OFD 预览 │ │ │ │ │ │ │ │ └──────────────┴──────────────┘ │ ├─────────────────────────────────────────────┤ │ 首页 上一页 [3/5] 下一页 末页 │ │ 跳转到: [3] │ └─────────────────────────────────────────────┘ ``` ## 📋 系统要求 - **操作系统**: Windows 10 或更高版本 - **Python**: 3.8 或更高版本 - **环境**: 推荐使用 Anaconda/Miniconda ## 🚀 快速开始 ### 方法一:使用 Conda(推荐) ```bash # 1. 创建 conda 环境 conda env create -f environment.yml # 2. 激活环境 conda activate pdf2ofd # 3. 运行程序 python main.py ``` 或者直接双击运行: ```bash # 一键安装 conda_install.bat # 一键启动 conda_run.bat ``` ### 方法二:使用 pip ```bash # 1. 安装依赖 pip install -r requirements.txt # 2. 运行程序 python main.py ``` ## 📦 打包为可执行文件 ```bash # 打包成单文件 exe(推荐) build_exe.bat # 打包成文件夹版(启动更快) build_exe_folder.bat ``` 打包后的文件位于 `dist/` 目录,可直接分发给没有 Python 环境的用户。 ## 💡 使用说明 ### 基本操作 1. **打开文件** - 点击"打开 PDF 文件"按钮 2. **自动转换** - 程序自动检测并转换(如需要) 3. **查看预览** - 左侧 PDF,右侧 OFD,实时对比 4. **翻页浏览** - 使用底部按钮或页码跳转 ### 同步翻页控制 - **首页** - 跳转到第 1 页 - **上一页** - 向前翻一页 - **下一页** - 向后翻一页 - **末页** - 跳转到最后一页 - **跳转到** - 输入页码直接跳转 ### 文件保存 转换后的 OFD 文件自动保存在 PDF 文件的同一目录: ``` C:\Documents\报告.pdf C:\Documents\报告.ofd ← 自动生成 ``` ## 🏗️ 项目结构 ``` pdf2ofd/ ├── main.py # 主程序入口 ├── environment.yml # Conda 环境配置 ├── requirements.txt # pip 依赖列表 ├── ui/ │ ├── __init__.py │ └── main_window.py # 主窗口界面 ├── utils/ │ ├── __init__.py │ ├── converter.py # PDF 转 OFD 转换器 │ └── preview.py # 预览功能 ├── conda_install.bat # Conda 环境安装脚本 ├── conda_run.bat # 启动脚本(Conda) ├── build_exe.bat # 打包脚本(单文件) └── build_exe_folder.bat # 打包脚本(文件夹) ``` ## 🔧 技术栈 - **GUI 框架**: PyQt5 - **PDF 处理**: PyMuPDF (fitz) - **OFD 转换**: EasyOFD - **图像处理**: Pillow - **打包工具**: PyInstaller ## 📖 OFD 格式说明 OFD (Open Fixed-layout Document) 是中国国家版式文档格式标准(GB/T 33190-2016)。 **特点:** - ✅ 国家标准格式 - ✅ 版式固定不变形 - ✅ 支持电子签章 - ✅ 长期保存可靠 **应用场景:** - 电子政务 - 电子发票 - 电子合同 - 档案管理 ## ⚙️ 配置说明 ### 转换模式 默认使用图像模式转换(`optional_text=False`),确保版式准确: ```python # 在 utils/converter.py 中可以修改 ofd_bytes = self.ofd_converter.pdf2ofd(pdf_bytes, optional_text=False) ``` - `optional_text=False`: 图像模式,版式稳定,文件较大 - `optional_text=True`: 文本模式,文件较小,可能有版式偏差 ### 预览质量 在 `ui/main_window.py` 中可以调整渲染 DPI: ```python pixmap = self.preview_handler.render_page(file, page, dpi=200) ``` ## 🐛 常见问题 ### Q: 转换失败,提示 test 目录错误? A: 已修复。程序会自动管理工作目录并清理临时文件。 ### Q: 预览有滚动条? A: 已优化。预览会自动缩放适应窗口,无滚动条。 ### Q: 程序启动慢? A: 首次启动需要加载依赖,2-3 秒是正常的。打包后的单文件版本可能需要更长时间。 ### Q: 杀毒软件拦截? A: PyInstaller 打包的 exe 可能被误报,添加到白名单即可。 ### Q: OFD 预览不显示? A: 某些 PyMuPDF 版本不支持 OFD 预览。转换功能不受影响,请使用专业 OFD 阅读器查看。 ## 📝 开发说明 ### 安装开发环境 ```bash # 克隆仓库 git clone https://gitee.com/sayme/pdf2-ofd.git cd pdf2-ofd # 创建环境 conda env create -f environment.yml conda activate pdf2ofd # 运行 python main.py ``` ### 代码检查 ```bash # 检查依赖 python check_dependencies.py # 测试转换功能 python test_converter.py ``` ## 🤝 贡献指南 欢迎提交 Issue 和 Pull Request! 1. Fork 本仓库 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 提交 Pull Request ## 📄 许可证 本项目采用 MIT 许可证。详见 [LICENSE](LICENSE) 文件。 ## 👥 作者 **知演医疗技术团队** ## 🙏 致谢 - [EasyOFD](https://github.com/renoyuan/easyofd) - OFD 转换核心库 - [PyMuPDF](https://github.com/pymupdf/PyMuPDF) - PDF 处理 - [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) - GUI 框架 ## 📮 联系方式 如有问题或建议,请: - 提交 [Issue](https://gitee.com/sayme/pdf2-ofd/issues) - 发送邮件至:[联系邮箱] --- **⭐ 如果这个项目对您有帮助,请给一个 Star!**