返回市场
办公阅读器

办公阅读器

作者:cyberelf2 星标更新:2025-08-15

项目介绍

Office Reader MCP

一个高性能的模型上下文协议(MCP)服务器,用于读取和处理各种办公文档格式,包括PDF、Excel、Word和PowerPoint文件。

功能

文档支持

  • PDF 文件:提取文本并使用多种后端选项将页面渲染为图像
  • Excel 文件:逐表读取电子表格
  • Word 文档:从DOCX文件中提取文本内容
  • PowerPoint 文件:提取文本内容,并使用原生Rust渲染生成幻灯片快照图像

PowerPoint 幻灯片快照

该库支持使用原生Rust库(无需外部依赖)将PowerPoint幻灯片转换为图像:

use office_reader_mcp::powerpoint_parser::generate_slide_snapshot;

// 生成第1张幻灯片的PNG快照
let result = generate_slide_snapshot("presentation.pptx", 1, "png");

match result.error {
    None => {
        if let Some(image_data) = result.image_data {
            std::fs::write("slide1.png", image_data).unwrap();
            println!("幻灯片快照已保存为slide1.png");
        }
    }
    Some(error) => println!("错误: {}", error),
}

关键特性:

  • 原生实现:无需像LibreOffice这样的外部依赖
  • 快速渲染:使用tiny-skia图形库进行高效的图像生成
  • 多种格式:支持PNG和JPEG输出格式
  • 直接解析PPTX:直接从PowerPoint XML结构中提取内容
  • 幻灯片验证:自动验证幻灯片编号和文件存在性

支持的输出格式:

  • PNG(推荐用于质量)
  • JPG/JPEG(较小的文件大小)

性能特征

PDF 处理

  • pdfium-render(最快):每页约50-100毫秒
  • mupdf:每页约100-200毫秒
  • poppler-rs:每页约200-300毫秒
  • pdf-extract(备用):每页约500毫秒到2秒

PowerPoint 处理

  • 原生渲染:每张幻灯片约100-300毫秒(无外部进程开销)
  • 文本提取:每张幻灯片约50-100毫秒
  • 内存高效:单独处理幻灯片而不加载整个演示文稿

安装

先决条件

  • Rust(最新稳定版)
  • 无需外部依赖即可实现PowerPoint功能

可选PDF后端

为了增强PDF处理,您可以启用可选功能:

[dependencies]
office_reader_mcp = { version = "0.1.0", features = ["pdfium"] }

可用功能:

  • pdfium:Google的Pdfium库(最快的PDF处理)
  • mupdf:MuPDF绑定(非常快)
  • poppler:Poppler绑定(快速)

使用示例

PowerPoint 幻灯片快照

use office_reader_mcp::powerpoint_parser::{generate_slide_snapshot, get_powerpoint_slide_count};

// 获取幻灯片数量
let slide_count = get_powerpoint_slide_count("presentation.pptx")?;
println!("演示文稿有{}张幻灯片", slide_count);

// 为所有幻灯片生成快照
for slide_num in 1..=slide_count {
    let result = generate_slide_snapshot("presentation.pptx", slide_num, "png");
    
    if let Some(image_data) = result.image_data {
        let filename = format!("slide_{}.png", slide_num);
        std::fs::write(&filename, image_data)?;
        println!("生成了{}", filename);
    }
}

文本提取

use office_reader_mcp::powerpoint_parser::process_powerpoint_with_slides;

// 从特定幻灯片中提取文本
let result = process_powerpoint_with_slides("presentation.pptx", Some("1,3,5".to_string()));

if result.error.is_none() {
    println!("提取的内容:\n{}", result.content);
    println!("处理的幻灯片: {:?}", result.returned_slides);
}

架构

原生PowerPoint渲染管道

  1. PPTX 解析:直接读取ZIP存档并解析XML
  2. 内容提取:解析幻灯片XML以提取文本、形状和布局信息
  3. 图形渲染:使用tiny-skia将幻灯片内容渲染为光栅图像
  4. 格式转换:使用image库输出为PNG或JPEG

原生方法的优势

  • 无外部依赖:消除了对LibreOffice的需求
  • 更好的性能:没有进程启动开销
  • 跨平台:在Windows、macOS和Linux上一致工作
  • 内存高效:单独处理幻灯片
  • 确定性:跨环境一致的渲染

错误处理

该库提供了全面的错误处理:

let result = generate_slide_snapshot("presentation.pptx", 1, "png");

match result.error {
    None => println!("成功!"),
    Some(error) => {
        if error.contains("未找到") {
            println!("文件未找到");
        } else if error.contains("不存在") {
            println!("无效的幻灯片编号");
        } else {
            println!("渲染错误: {}", error);
        }
    }
}

局限性

当前PowerPoint渲染局限性

  • 文本渲染:当前将文本渲染为占位矩形(完整的文本渲染需要额外的字体库)
  • 复杂布局:高级PowerPoint功能如动画、过渡和复杂形状具有基本支持
  • 嵌入媒体:视频和音频不被渲染
  • 字体处理:使用默认字体(可以通过fontdb集成扩展)

未来改进

  • 完整的文本渲染,带有适当的字体
  • 增强的形状和图像支持
  • 动画帧提取
  • SVG输出格式
  • 自定义样式选项

贡献

欢迎贡献!改进领域:

  1. 带有适当字体支持的增强文本渲染
  2. 更好的从PPTX文件中提取形状和图像
  3. 性能优化
  4. 额外的输出格式(SVG,WebP)
  5. 高级布局处理

许可证

此项目根据MIT许可证发布。