---
title: doc_pdf
canonical_url: "https://www.modelscope.cn/studios/KUN03036/doc_pdf"
md_url: "https://www.modelscope.cn/studios/KUN03036/doc_pdf.md"
repository: KUN03036/doc_pdf
last_updated: 2025-08-11
sdk_type: gradio
sdk_version: 5.34.1
downloads: 0
stars: 5
---

# doc_pdf

> doc_pdf - KUN03036 在 ModelScope 创建的在线 Demo。MCP - DOCX/PDF文档生成服务

KUN03036/doc_pdf 是 ModelScope 魔搭社区上的在线可交互 Demo（创空间），基于 gradio 5.34.1 构建。

- **Repository**: KUN03036/doc_pdf
- **SDK**: gradio
- **SDK version**: 5.34.1
- **Downloads**: 0
- **Stars**: 5
- **Last updated**: 2025-08-11

Source: https://www.modelscope.cn/studios/KUN03036/doc_pdf

---

# MCP - DOCX/PDF文档生成服务

## 1. 项目简介

### 项目背景

在与大语言模型（LLM）进行交互时，我们常常会得到包含复杂格式（如数学公式、代码块、表格等）的 Markdown 文本。这些内容在网页上显示精美，但一旦被复制粘贴到本地编辑器（如 Microsoft Word），格式往往会变得混乱不堪。

### 解决方案

**本MCP服务**是一个旨在解决此问题的后端服务。它提供了一个核心功能：将标准 Markdown 文本**高保真**地转换为 **DOCX** 或 **PDF** 格式的文档。

该服务专为集成而设计。设想一个场景：用户在与一个大模型进行多轮对话后，要求模型将对话内容或最终结论整理成一份正式的文档。此时，大模型可以将整理好的 Markdown 文本发送给 MCP 服务，MCP 生成相应的 DOCX 或 PDF 文件，并返回一个可供用户直接下载的文件链接。

### 核心特性

* **高质量转换**：基于强大的 `Pandoc` 和 `LaTeX` (xelatex) 引擎，确保 Markdown 中的各种元素（标题、列表、代码、表格、数学公式等）都能被正确转换。
* **格式支持**：支持生成通用的 `.docx` 文件和高质量的 `.pdf` 文件。
* **中英文字体自定义**：允许用户为文档内容分别指定中文字体和英文字体，解决了混合语言排版中的常见问题。
* **自动化依赖管理**：服务启动时会自动检查并安装所需的系统级依赖（如 Pandoc, LaTeX, 字体库），简化了部署流程。
* **Web 界面与 API**：提供一个简单的 Gradio Web 界面用于快速测试和手动转换，同时其架构也易于作为 API 服务被其他程序调用。

## 2. 部署指南

### 环境要求

* **操作系统**: Debian 或基于 Debian 的 Linux 发行版 (如 Ubuntu)。这是因为脚本使用 `apt-get` 来安装系统依赖。
* **Python**: Python 3.x
* **权限**: 需要 `root` 或 `sudo` 权限来安装系统依赖。

### 安装步骤

1.  **克隆或下载项目**
    将项目文件（`mcp_service.py` 和 `example.md`）下载到您的服务器上。

2.  **准备 `requirements.txt`**
    在项目根目录下创建一个名为 `requirements.txt` 的文件，并填入以下内容：
    ```txt
    gradio
    pypandoc
    python-docx
    path.py
    ```

3.  **安装 Python 依赖**
    使用 pip 安装所有必要的 Python 库：
    ```bash
    pip install -r requirements.txt
    ```

4.  **安装系统依赖（自动）**
    无需手动安装！脚本首次启动时会自动调用 `apt-get` 来安装所有必需的系统级软件包，包括：
    * **核心工具**: `pandoc`
    * **LaTeX 套件**: `texlive-full` (或脚本中指定的精简组件)
    * **字体库**: 文泉驿微米黑、文鼎楷体、文鼎宋体、Liberation 字体家族等。

    **注意**：由于需要安装系统软件包，请确保以 `root` 用户身份运行此脚本，或者运行的用户拥有无密码执行 `sudo apt-get` 的权限。

### 启动服务

直接运行 Python 脚本即可启动服务：

```bash
python mcp_service.py
```
服务启动后，您会在终端看到类似如下的输出：
```bash
🚀 [环境检查] 开始检查并安装系统依赖...
✅ [环境检查] 系统依赖已成功安装或已存在。
Running on local URL:  [http://127.0.0.1:7860](http://127.0.0.1:7860)
```
现在，您可以通过浏览器访问 `http://127.0.0.1:7860` 来使用该服务。

## 3. 使用方式

### 方式一：通过 Web 界面进行手动转换

对于需要手动转换文档的场景，可以直接使用服务提供的 Web UI。
1. 打开浏览器：访问服务地址（例如 http://your-server-ip:7860）。
2. 粘贴内容：在左侧的 "粘贴原始 Markdown 在此进行测试" 文本框中，输入或粘贴您的 Markdown 全文。
3. 选择字体：根据需要，在下拉菜单中选择文档的 "中文字体" 和 "英文字体"。
4. 选择格式：在 "选择输出格式" 中，点选 DOCX 或 PDF。
5. 生成文档：点击蓝色的 "生成文档" 按钮。
6. 下载文件：稍等片刻，右侧的 "下载生成的文档" 区域会显示可供下载的文件链接。同时，下方会显示处理状态和模拟的 JSON 返回报告。

### 方式二：作为 API 被大模型或其他服务调用

MCP 的核心价值在于其 API 能力。其他服务（如 LLM 应用后端）可以通过向 Gradio 的 API 端点发送 POST 请求来调用它。

**API 端点**: http://your-server-ip:7860/api/predict
**请求方法**: POST
**请求体 (Body)**: JSON 格式

```JSON
{
  "data": [
    "这里是完整的 Markdown **文本** 内容。\\n\\n# 这是一个标题\\n\\n一个公式：$E=mc^2$",
    "PDF",
    "文泉驿微米黑 (WenQuanYi Micro Hei)",
    "Liberation Serif"
  ]
}
```

**参数说明** (`data `数组中的元素按顺序对应):
1. `markdown_content (string)`: 完整的 Markdown 字符串。
2. `output_format (string)`: 输出格式，"DOCX" 或 "PDF"。
3. `chinese_font (string)`: 中文字体选项，从支持的列表中选择。
4. `english_font (string)`: 英文字体选项，从支持的列表中选择。

**成功响应** (Response):
调用方可以完整打印mcp服务返回结果。

## 4. 示例
假设大模型为用户总结了技术报告内容如下：
~~~markdown
# 综合技术报告：从傅里叶变换到神经网络

## 第一部分：信号处理基础

### 1.1 傅里叶变换简介

傅里叶变换（Fourier Transform）是一种将信号从时域转换到频域的重要工具。其连续形式定义为：

$$ \hat{f}(\xi) = \int_{-\infty}^{\infty} f(x)\ e^{-2\pi i x \xi} \,dx $$

这个公式展示了信号 $f(x)$ 如何分解为不同频率 $\xi$ 的复指数函数的叠加。其中 `$i$` 是虚数单位，满足 `$i^2 = -1$`。

### 1.2 关键属性

傅里叶变换具有多种**重要属性**，例如*线性*、*时移*和*频移*等。

> “数学是宇宙的语言。” - 伽利略

---

## 第二部分：机器学习核心

### 2.1 梯度下降算法

梯度下降是一种优化算法，用于寻找函数的局部最小值。其核心迭代步骤可以表示为：

$θ_{new} = θ_{old} - η * ∇J(θ)$

其中 `∇J(θ)` 是损失函数 `J` 对参数 `θ` 的梯度。

### 2.2 决策树与随机森林

下面是一个展示不同算法性能的表格，其中包含了对齐测试：

| 算法名称 | 准确率 (Accuracy) | 召回率 (Recall) | 备注 |
|:---:|:---|---:|
| 决策树 (Decision Tree) | 85.2% | 84.1% | 容易过拟合 |
| 随机森林 (Random Forest) | **92.5%** | **91.8%** | 性能更稳健 |
| `支持向量机 (SVM)` | 89.7% | 88.5% | 对高维数据有效 |

这是一个任务列表：
- [x] 完成数据预处理
- [ ] 训练模型
- [ ] 评估并撰写报告

---

## 第三部分：深度学习实践

### 3.1 卷积神经网络 (CNN)

CNN 在图像识别领域取得了巨大成功。一个典型的 CNN 层级结构如下：

1.  输入层 (Input Layer)
2.  卷积层 (Convolutional Layer)
    - 使用激活函数，如 ReLU: $f(x) = \max(0, x)$
3.  池化层 (Pooling Layer)
4.  全连接层 (Fully Connected Layer)
5.  输出层 (Output Layer)

![CNN 结构示意图](https://pic.rmb.bdstatic.com/bjh/cms/231215/ea07c51b84b7d4379eab1271c08bc94a_1702648348.5498_956.png)

### 3.2 Python 代码示例

以下是使用 `PyTorch` 构建一个简单神经网络的代码片段：

```python
import torch
import torch.nn as nn

class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet, self).__init__()
        self.layer1 = nn.Linear(784, 128)
        self.activation = nn.ReLU()
        self.layer2 = nn.Linear(128, 10)

    def forward(self, x):
        x = self.layer1(x)
        x = self.activation(x)
        x = self.layer2(x)
        return x
```
~~~
中间包含了编号、图片、代码块、latex公式等复杂信息，如果直接复制到docx中会损失部分信息，还需要手动整理混乱的格式。而**本mcp服务**可以直接返回一个`下载链接`，`下载的docx示例`见本项目中`example.docx`文件。

## 5. 改进方向
### markdown格式矫正

现在v1.0版本生成`DOCX`和`PDF`的效果依赖于大模型的指令遵循，要求大模型返回规范的`markdown`文本作为输入。但实际上由于大模型很多时候返回的内容要用于浏览器渲染，所以不能保证严格的`markdown`格式。相信大家都见过大模型返回的一段代码，前一半在代码块中，后一半在文本中。或者在输出复杂公式的时候，成为一片乱码。

期望能够通过`python包+分段检查+llm矫正`的方式，修正markdown文本，从而生成高质量`DOCX`和`PDF`。
