Office阅读器MCP
一种高性能的模型上下文协议(MCP)服务器,用于读取和处理各种办公文档格式,包括PDF、Excel、Word和PowerPoint文件。
特性
文档支持
- pdf文件:提取文本并将页面呈现为具有多种后端选项的图像
- Excel文件:通过逐表处理读取电子表格
- Word文档:从DOCX文件中提取文本内容
- PowerPoint文件:使用原生Rust渲染提取文本内容并生成幻灯片快照作为图像
PowerPoint幻灯片快照
该库支持使用以下命令将PowerPoint幻灯片转换为图像 原生Rust库 (无需外部依赖):
use office_reader_mcp::powerpoint_parser::generate_slide_snapshot;
// Generate PNG snapshot of slide 1
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!("Slide snapshot saved as slide1.png");
}
}
Some(error) => println!("Error: {}", error),
}主要特点:
- 本机实现:不需要LibreOffice等外部依赖项
- 快速渲染:用途
tiny-skia用于高效图像生成的图形库 - 多种格式:支持PNG和JPEG输出格式
- 直接PPTX解析:直接从PowerPoint XML结构中提取内容
- 幻灯片验证:自动验证幻灯片编号和文件是否存在
支持的输出格式:
- PNG(推荐质量)
- JPG/JPEG(较小的文件大小)
性能特征
PDF处理
- pdfium渲染 (最快):每页约50-100ms
- mupdf文件:每页约100-200ms
- 波普尔:每页约200-300ms
- pdf摘录 (回退):每页~500ms-2s
PowerPoint处理
- 原生渲染:每张幻灯片约100-300ms(无外部工艺开销)
- 文本提取:每张幻灯片约50-100ms
- 内存效率高:单独处理幻灯片,而不加载整个演示文稿
安装
先决条件
- 锈 (最新稳定版本)
- 无外部依赖关系 PowerPoint功能所需
可选PDF后端
为了增强PDF处理,您可以启用可选功能:
[dependencies]
office_reader_mcp = { version = "0.1.0", features = ["pdfium"] }可用功能:
pdfium:谷歌的Pdfium库(最快的PDF处理)mupdf:MuPDF绑定(非常快)poppler:Poppler绑定(快速)
使用示例
PowerPoint幻灯片快照
use office_reader_mcp::powerpoint_parser::{generate_slide_snapshot, get_powerpoint_slide_count};
// Get slide count
let slide_count = get_powerpoint_slide_count("presentation.pptx")?;
println!("Presentation has {} slides", slide_count);
// Generate snapshots for all slides
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!("Generated {}", filename);
}
}文本提取
use office_reader_mcp::powerpoint_parser::process_powerpoint_with_slides;
// Extract text from specific slides
let result = process_powerpoint_with_slides("presentation.pptx", Some("1,3,5".to_string()));
if result.error.is_none() {
println!("Extracted content:\n{}", result.content);
println!("Processed slides: {:?}", result.returned_slides);
}建筑
本机PowerPoint渲染管道
- PPTX解析:直接读取ZIP存档和XML解析
- 内容提取:解析幻灯片XML以提取文本、形状和布局信息
- 图形渲染:使用
tiny-skia将幻灯片内容渲染为光栅图像 - 格式转换:使用PNG或JPEG格式输出
image板条箱
原生方法的好处
- 无外部依赖关系:消除LibreOffice要求
- 更好的性能:无进程生成开销
- 交叉平台的:在Windows、macOS和Linux上一致工作
- 内存效率高:单独处理幻灯片
- 确定性的:跨环境的一致渲染
错误处理
该库提供全面的错误处理:
let result = generate_slide_snapshot("presentation.pptx", 1, "png");
match result.error {
None => println!("Success!"),
Some(error) => {
if error.contains("not found") {
println!("File not found");
} else if error.contains("does not exist") {
println!("Invalid slide number");
} else {
println!("Rendering error: {}", error);
}
}
}局限性
当前PowerPoint渲染限制
- 文本渲染:当前将文本呈现为占位符矩形(全文呈现需要额外的字体库)
- 复杂布局:高级PowerPoint功能,如动画、过渡和复杂形状,都有基本支持
- 嵌入式媒体:不渲染视频和音频
- 字体处理:使用默认字体(可以扩展为
fontdb集成)
未来的增强功能
- 使用适当字体的全文渲染
- 增强的形状和图像支持
- 动画帧提取
- SVG输出格式
- 自定义样式选项
贡献
欢迎投稿!需要改进的地方:
- 通过适当的字体支持增强文本呈现
- 从PPTX文件中更好地提取形状和图像
- 性能优化
- 其他输出格式(SVG、WebP)
- 高级布局处理
许可证
该项目根据MIT许可证获得许可。
