使用 FastMCP 實現 Word 文檔與 JSON 數據互轉的 Python 服務

一、項目背景

本文分享一個基于 FastMCP 框架實現的文檔處理服務,可實現 Word 文檔(.docx)與 JSON 數據格式的雙向轉換。通過此服務,開發者可以輕松實現文檔內容提取、結構化數據填充、樣式模板復用等功能,適用于自動化報告生成、數據導入導出等場景。

二、核心代碼解析

1. 服務端實現(my_server.py

import json
from fastmcp import FastMCP
from wan_neng_copy_word import clone_document as word_to_dict
from wan_neng_copy_word_pro import clone_document
from wan_neng_copy_word import clone_document as get_para_style
from gen_all_styles import gen_all_stylesmcp = FastMCP(name="MyServer")# 基礎問候工具
@mcp.tool
def greet(name: str) -> str:"""Greet a user by name."""return f"Hello, {name}!"# Word 轉 JSON 工具
@mcp.tool
def word_to_json(word_path: str) -> str:"""Convert a word document to json."""body_s, body_p = word_to_dict(word_path)return json.dumps(body_p)# JSON 轉 Word 工具
@mcp.tool
def json_to_word(word_path: str, json_data: str) -> str:"""Convert a json to word document."""try:body_ws, _ = get_para_style('demo_template.docx')except:gen_all_styles()body_ws, _ = get_para_style('demo_template.docx')body_s, _ = get_para_style(word_path)clone_document(body_s, json.loads(json_data), body_ws, 'cloned_example.docx')return 'cloned_example.docx'# 啟動 MCP 服務
if __name__ == "__main__":mcp.run(transport="streamable-http", host="127.0.0.1", port=9000)

關鍵組件說明:

  • FastMCP:基于 MCP 協議的服務框架,提供工具注冊與調用能力
  • wan_neng_copy_word 系列模塊:實現 Word 文檔解析與生成的核心邏輯
  • gen_all_styles:樣式模板生成工具
  • 雙向轉換邏輯
    • word_to_json:提取文檔內容結構并序列化為 JSON
    • json_to_word:應用模板樣式生成新文檔

2. 客戶端測試代碼

import asyncio
from fastmcp import Client# MCP 服務配置
config = {"mcpServers": {"document-service": {"url": "http://127.0.0.1:9000/mcp","transport": "streamable-http"}}
}# 創建客戶端實例
client = Client(config)async def main():async with client:# 讀取 JSON 數據with open("1.json", "r", encoding="utf-8") as f:body_p = f.read()# 調用 JSON 轉 Word 工具result = await client.call_tool("json_to_word", {"word_path": "1.docx", "json_data": body_p})print(f"生成文檔路徑: {result}")if __name__ == "__main__":asyncio.run(main())

三、運行環境要求

  1. Python 3.8+ 環境
  2. 依賴庫安裝:
    pip install fastmcp python-docx
    
  3. 文件依賴:
    • demo_template.docx(樣式模板)
    • 1.docx(輸入文檔)
    • 1.json(結構化數據)

四、功能演示流程

  1. 啟動服務:
    python my_server.py
    
  2. 執行客戶端測試:
    python client_test.py
    
  3. 輸出結果:
    • 生成 cloned_example.docx 文檔
    • 驗證文檔內容與原始模板樣式的一致性

五、應用場景

  1. 自動化報告生成:通過 API 動態填充數據到預設模板
  2. 文檔結構分析:提取 Word 內容進行 NLP 處理
  3. 跨格式轉換:作為其他格式(如 Markdown、HTML)轉換的中間層
  4. 樣式統一管理:基于模板批量生成標準化文檔

六、注意事項

  1. 文件路徑問題:確保工作目錄包含所需模板文件
  2. 異常處理增強建議
    # 可擴展的異常處理示例
    try:# 文件操作代碼
    except FileNotFoundError as e:return {"error": f"Missing file: {str(e)}"}
    except json.JSONDecodeError:return {"error": "Invalid JSON input"}
    
  3. 性能優化方向
    • 添加緩存機制復用樣式模板
    • 支持異步文件讀寫
    • 實現流式傳輸處理大文件

七、擴展建議

  1. 添加文件校驗模塊:
    def validate_word_file(path):if not os.path.exists(path):raise ValueError("Template file not found")if not path.endswith('.docx'):raise ValueError("Invalid file format")
    
  2. 支持更多格式轉換:
    • 集成 pandoc 實現多格式轉換
    • 添加 PDF 導出功能
  3. API 接口增強:
    • 添加文件上傳下載接口
    • 實現任務隊列異步處理

該實現展示了如何通過 MCP 協議構建文檔處理服務,開發者可根據實際需求擴展更多文檔操作功能。完整項目代碼需注意分離服務端/客戶端模塊,并完善錯誤處理機制。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87395.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87395.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87395.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue3輪播圖組件,當前輪播區域有當前圖和左右兩邊圖,兩邊圖各顯示一半,支持點擊跳轉和手動滑動切換

功能: 自動循環播放(到達末尾后回到第一張)、可設置切換間隔時間(interval屬性) 左右導航按鈕(可自定義顯示/隱藏) 點擊底部指示器跳轉到指定幻燈片、且位置可調(輪播圖內部/外部&…

350+交付案例,高質量低成本構建智慧園區數字孿生交付新范式

在智慧園區建設領域,數字孿生技術正成為推動園區智能化轉型的核心引擎。山東融谷信息憑借其全要素、全周期、全方位的數字孿生交付能力,已成功交付350余個項目,覆蓋產業園區、智慧樓宇、智慧社區等多元場景,低成本高質量交付&…

OpenCV 圖像像素類型轉換與歸一化

一、知識點 1、OpenCV支持多種數據類型,每種類型都對應著不同的取值范圍。 (1)、CV_8U取值范圍[0, 255]。 (2)、CV_16U取值范圍[0, 65535]。 (3)、CV_32F取值范圍[0, 1]。 2、OpenCV提供convertTo()函數來轉換數據類型,提供normalize()函數來改…

機器學習算法_支持向量機

一、支持向量機 支持向量機只能做二分類任務 SVM全稱支持向量機,即尋找到一個超平面使樣本分成兩類,且間隔最大 硬間隔:如果樣本線性可分,在所有樣本分類都正確的情況下,尋找最大間隔;如果出現異常值或樣…

Linux : echo ~ tail 重定向符

🚀 Linux 常用命令詳解:echo、tail 與重定向符號全解析(含通俗案例) 📅 更新時間:2025年6月17日 🏷? 標簽:Linux基礎 | Shell命令 | echo | tail | 輸出重定向 | Linux入門 文章目錄…

uniapp的更新流程【安卓、IOS、熱更新】

UniApp應用更新方案 兩種更新方式 APP全量升級:需要重新下載安裝包熱更新:通過下載wgt資源包實現,用戶只需重啟應用 Android更新實現 用戶需要授權安裝權限,流程為下載APK后自動彈出安裝界面 var dtask plus.downloader.cre…

火山引擎解碼生態型增長鐵律

“技術流量與力量的崛起,本質上是一場生態規模的競賽。每次浪潮的排頭兵,都是指尖沾著代碼的開發者——互聯網時代的Linux社區讓開源席卷全球,移動互聯網的App Store催生百萬開發者,而今天,大模型正在用API重構產業。”…

警惕GO的重復初始化

go的初始化方式有很多種,在某些情況下容易引起重復初始化導致錯誤。 事例如下: 當使用gorm連接數據庫時定義了全局DB var DB *gorm.DB 但是在后面某個函數內部初始化時導致DB重新初始化變成了局部變量,導致原來的全局變量DB還是nil func I…

python校園服務交流系統

目錄 技術棧介紹具體實現截圖系統設計研究方法:設計步驟設計流程核心代碼部分展示研究方法詳細視頻演示試驗方案論文大綱源碼獲取/詳細視頻演示 技術棧介紹 Django-SpringBoot-php-Node.js-flask 本課題的研究方法和研究步驟基本合理,難度適中&#xf…

AlexNet:圖像分類領域的里程碑網絡及其創新剖析

文章目錄 前言AlexNet一、網絡的背景二、網絡結構三、網絡的創新3.1 首次使用GPU訓練網絡3.2 使用Relu激活函數3.2.1 sigmoid激活函數和tanh激活函數3.2.1.1 sigmoid激活函數3.2.1.2 tanh激活函數 3.3 Relu激活函數3.4 使用LRN局部響應歸一化(已棄用)3.4.1 LRN的定義與起源3.4.…

iOS性能調優實踐:結合KeyMob等多個工具提升應用穩定性與流暢度

在iOS應用開發中,性能問題往往難以通過單一工具輕松解決。尤其是當App面臨用戶反饋的流暢度差、卡頓嚴重、內存泄漏等問題時,開發者需要依靠多種工具的組合,才能有效地排查和優化性能瓶頸。 在我們最近的一個項目中,開發團隊在處…

球形波方程的推導與解法

題目 問題 6. 一個球形波是三維波動方程的解,形式為 u ( r , t ) u(r,t) u(r,t),其中 r r r 是到原點的距離(球坐標)。波動方程的形式為: u t t = c 2 ( u r r + 2 r u r ) (球形波方程) . u_{tt} = c^{2} \left( u_{rr} + \frac{2}{r} u_{r} \right) \quad \text{(球形…

自動打電話軟件設計與實現

文章目錄 方案概述實現代碼1. 安裝必要的庫2. 主程序代碼3. HTML模板 (templates/index.html) 功能說明部署說明擴展功能建議注意事項 方案概述 使用Twilio的API進行電話呼叫實現基本的呼叫邏輯添加簡單的用戶界面 實現代碼 1. 安裝必要的庫 pip install twilio flask2. 主…

RedissonLock源代碼分析與鎖應用

文章目錄 前言一、RedissonLock源代碼分析1.1 嘗試加鎖2.2 解鎖 二、鎖業務應用1.服務層方法注解方式 注入鎖1.1 定義DistributedLock 注解類1.2 定義DistributedLockAspect 切片類1.3 嘗試獲取鎖代碼片斷1.4 釋放鎖代碼片斷1.5 服務層注入鎖注解 2.代碼行加鎖2.1 pom.xml文件引…

深入理解mysql索引

一、什么是索引? 索引(Index) 是數據庫管理系統中一種特殊的數據結構,存儲在磁盤上。它包含對數據表中一列或多列的值進行排序,并存儲了指向表中實際數據行物理位置或主鍵值的引用指針。可以把它類比為書籍的目錄&…

VMware vSphere Foundation 9.0 技術手冊 —— Ⅰ 安裝 ESXi 9.0 (虛擬機)

目錄 1. 安裝 ESXi 9.0 (虛擬機)(1)ESXi Standard Boot Menu(2)ESXi 安裝導向(3)最終用戶許可協議(4)選擇系統盤(5)選擇鍵盤類型(6)設…

UE5 游戲模板 —— TopDownGame 俯視角游戲

UE5 游戲模板 —— TopDownGame 俯視角游戲 前言一、模塊導入二、TopDownGameMode三、TopDownPlayerController1、構造函數2、SetupInputComponent初始化新輸入系統處理輸入邏輯 四、TopDownCharacter五、射線檢測總結 前言 上一篇文章介紹了一下PuzzleGame模板的流程&#xf…

基于深度學習的智能圖像分割系統:技術與實踐

前言 圖像分割是計算機視覺領域中的一個核心任務,其目標是將圖像劃分為多個有意義的區域或對象。圖像分割在醫學影像分析、自動駕駛、安防監控等多個領域有著廣泛的應用。近年來,深度學習技術,尤其是卷積神經網絡(CNN)…

【學習筆記】2.2 Encoder-Decoder

參考資料:https://github.com/datawhalechina/happy-llm 在 Transformer 中,使用注意力機制的是其兩個核心組件——Encoder(編碼器)和 Decoder(解碼器)。 2.2.1 Seq2Seq 模型 Seq2Seq(序列到…

# 材料力學押題

材料力學押題 文章目錄 材料力學押題第一題第二題組合變形彎曲變形 第一題 Q 求力作用的銷釘位置的豎直偏移距離。 S 方法一:能量方法 材料應變能計算為: U ∫ 內力 2 2 剛度 d A U\int \frac{\text{內力}^2}{2\times 剛度}\text{d}A U∫2剛度內力2?dA 克拉珀龍原理&…