一个高性能的模型上下文协议(MCP)服务器,用于读取和处理各种办公文档格式,包括PDF、Excel、Word和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),
}
关键特性:
tiny-skia图形库进行高效的图像生成支持的输出格式:
为了增强PDF处理,您可以启用可选功能:
[dependencies]
office_reader_mcp = { version = "0.1.0", features = ["pdfium"] }
可用功能:
pdfium:Google的Pdfium库(最快的PDF处理)mupdf:MuPDF绑定(非常快)poppler:Poppler绑定(快速)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);
}
tiny-skia将幻灯片内容渲染为光栅图像image库输出为PNG或JPEG该库提供了全面的错误处理:
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);
}
}
}
fontdb集成扩展)欢迎贡献!改进领域:
此项目根据MIT许可证发布。