# pdf2other-project **Repository Path**: aylerh/pdf2other-project ## Basic Information - **Project Name**: pdf2other-project - **Description**: 统一的 PDF 转换服务(非ocr式),支持:PDF → DOCX / XLSX (表格提取) / 图片(ZIP) / PPTX。 - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-19 - **Last Updated**: 2026-03-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # pdf2other-project gitee:https://gitee.com/aylerh/pdf2other-project 镜像大小0.6G左右:ayler/pdf2other-convert ## 页面样式 ### 主页 ![1](./images/1.png) ## 功能 统一的 PDF 转换服务,支持:PDF → DOCX / XLSX / 图片 / PPTX / MD (文本) / MD (ZIP)。 - **PDF 转 PPTX**:(1)非全图片pdf:表格完整保留,文字按样式和布局智能还原。(2)全图片pdf; - **PDF 转 MD (非 OCR)**:基于布局分析的高保真 Markdown 提取,支持文本模式和带图模式。 - **PDF 转 XLSX**:全自动表格识别,支持多页表格自动分 Sheet 导出。 - **自动清理**:内置后台任务,自动清理过期的临时文件。 ## 优点 - **高保真还原**:非 OCR 方案,保留原始文字属性、表格结构和图片位置。 - **环境一致性**:提供完备的 Docker 镜像,开箱即用。 - **极速预体验**:首页集成预览 UI,支持直接拖拽转换。 - **针对性排版修复**:针对扫描件或 OCR PDF 常见的“大字号标题被截断”、“固定行高溢出”等痛点进行了底层参数优化与后处理自动适配。 ## 缺点 - **非 OCR**:虽然进行了排版优化,但本质上仍依赖 PDF 文本层,对于无文本层的纯图片 PDF 建议先进行 OCR 预处理。 - pdf转docx速度较慢:受限于pdf2docx的性能; ## 快速开始(Docker) 1. 修改 `.env`(如需要更改端口): ``` SERVER_PORT=8000 TEMP_DIR=/tmp/pdf_converter DEBUG=false ``` 2. 启动服务: ```bash docker-compose up -d --build ``` 3. 访问根路径查看端点(port根据SERVER_PORT): ``` GET http://localhost:8000/ ``` ## 单个html访问 浏览器打开:single_html\pdf2other.html 配置好ip:port后使用; ## 本地开发(在已安装依赖的环境下) 1. 系统依赖已最小化:由 **@pdf处理** (基于 PyMuPDF) 统一接管。不再需要安装 Poppler 或 Java。 2. 创建并激活虚拟环境,安装依赖: ```bash pip install -r requirements.txt ``` 3. 运行服务: ```bash uvicorn app.main:app --host 0.0.0.0 --port 8000 ``` ## 注意事项 - 本项目已由 **@pdf处理** 方案替代了 `pdf2image` 和 `tabula-py`,统一使用 **PyMuPDF (fitz)** 作为核心引擎,显著提升了转换速度且无需复杂的系统依赖。 - 临时文件默认保存在 `.env` 中的 `TEMP_DIR`,docker-compose 将其映射到 `./temp`。 ## 扩展 后续计划添加:OCR (解析扫描件)、多文件合并/拆分、基于队列的异步任务处理。欢迎提出改进需求。 # 介绍 该项目构建了一个基于 **FastAPI** 的全功能 PDF 转换服务,核心目标是将静态的 PDF 文档还原为**高可编辑性**的 Office 文档。以下是其功能与技术的简要总结: ### 一、 核心功能 1. **PDF 智能转 PPTX**: * **布局还原**:自动识别 PDF 页面尺寸并同步至幻灯片。 * **原生表格转换**:将 PDF 表格转换为 PPT 原生 `Table` 对象,支持后期编辑。 * **连贯文本提取**:将破碎的 PDF 片段按行合并,并保留加粗、斜体等属性。 2. **PDF 转 Markdown (非 OCR)**: * **布局感知**:基于 `PyMuPDF4LLM`和pdf2md-no-ocr-project(即https://gitee.com/aylerh/pdf2md-no-ocr-project),自动转换标题、列表、代码块及公式。 * **精准插图**:通过 Y 坐标定位,在 Markdown 中准确还原图片位置。 * **表格优化**:自动清理 Markdown 表格中的冗余默认表头。 3. **PDF 转 XLSX (Excel)**: * **性能飞跃**:采用 `PyMuPDF` 核心引擎,无需 Java 环境,识别速度极大提升。 * **多页支持**:自动识别所有页面的表格,并按 `PageX_TableY` 命名分 Sheet 存储。 4. **PDF 转 Images/ZIP**: * **指令级精简渲染**:针对复杂矢量表格优化,提速显著。 5. **自动化环境管理**: * 具备临时文件后台清理协程,确保系统磁盘安全。 ### 二、 核心技术栈 * **后端框架**:**FastAPI** + **Uvicorn**。 * **PDF 解析引擎**: * **PyMuPDF (fitz)**:核心解析引擎,用于文本坐标、矢量图形及图片解析。 * **PyMuPDF4LLM**:专门用于高保真 Markdown 提取及 RAG 场景适配。 * **pdf2docx**:成熟的 Word 转换方案。 * **文档生成库**: * **python-pptx**:生成原生 PowerPoint 元素。 * **Openpyxl**:高效处理并生成大批量 Excel 数据。 * **基础设施**: * **Docker**:基于 `Python 3.11-slim`,预置所有系统依赖。 ### 三、 关键优化点 * **文本清洗技术**:通过正则表达式和字符串处理,剔除 PDF 原始数据中的“硬换行”,实现 PPT 单元格内的**自然自动换行**。 * **分层解析策略**:先定位表格区域(BBox),再根据区域过滤文本,有效防止了表格内容与浮动文本框的重叠。 * **层级构建模型**:利用 PPT 的 `Run` 对象在段落内承载不同格式,完美平衡了“文本连贯性”与“局部样式保留”。 * **行高自适应修复 (DOCX)**:集成了 `python-docx` 后处理引擎,自动将 `pdf2docx` 转换后的“固定行高”重置为“单倍行距”,彻底解决了 OCR 识别后的 PDF 在转换时首行大标题被切掉一半的问题。 # 接口示例(使用 curl) - PDF → DOCX ```bash curl -X POST -F "file=@file.pdf" http://localhost:8000/convert/pdf-to-docx -o out.docx ``` - PDF → XLSX(提取表格) ```bash curl -X POST -F "file=@file.pdf" -F "pages=all" -F "lattice=true" http://localhost:8000/convert/pdf-to-xlsx -o out.xlsx ``` - PDF → 图片(ZIP) ```bash curl -X POST -F "file=@file.pdf" -F "format=png" http://localhost:8000/convert/pdf-to-images -o out_images.zip ``` - PDF → PPTX ```bash curl -X POST -F "file=@file.pdf" http://localhost:8000/convert/pdf-to-pptx -o out.pptx ``` - PDF → Markdown (文本) ```bash curl -X POST -F "file=@file.pdf" http://localhost:8000/convert/pdf-to-markdown-text -o out.md ``` - PDF → Markdown (ZIP) ```bash curl -X POST -F "file=@file.pdf" http://localhost:8000/convert/pdf-to-markdown-zip -o out.zip ```