Expand description
§演示文稿(Presentation)—— 顶层 API
对标 python-pptx 的 Presentation 类,是用户与本库交互的唯一入口:
- 通过
Presentation::new/Presentation::open创建或加载.pptx; - 通过
Presentation::slides_mut增删/编辑幻灯片; - 通过
Presentation::save/Presentation::to_bytes序列化输出。
§内部数据
Presentation 内部维护三类“集合“:
Slides:用户实际编辑的幻灯片列表(Slide);SlideLayouts:版式列表(每个Slide通过rId引用其中一个);SlideMasters:母版列表(版式再引用母版,呈现“主-版-页“三层结构)。
这三者不与 python-pptx 完全等价(python-pptx 用方法 slide_layouts[i] 暴露),
而是直接以集合形式提供,便于将来加入更复杂的工作流。
§在三层架构中的位置
Presentation 属于高阶 API 层。它直接聚合 Slides / SlideLayouts /
SlideMasters 三个集合;当用户调用 save 时,由 to_opc_package 把这些内存模型
序列化为 crate::opc::OpcPackage,再交给 zip 写出 .pptx。
§单元
幻灯片尺寸字段(width / height)一律使用 Emu,与 OOXML XML 中
<p:sldSz cx="..." cy="..."/> 一致。常用换算:1 in = 914 400 EMU,
1 cm = 360 000 EMU。
§示例
use pptx_rs::Presentation;
use pptx_rs::Inches;
let mut p = Presentation::new().unwrap();
let counter = p.id_counter();
let s = p.slides_mut().add_slide(counter).unwrap();
s.shapes_mut().add_textbox_with_text(
Inches(1.0), Inches(1.0), Inches(4.0), Inches(1.0),
"Hello, pptx-rs!",
).unwrap();
p.save("out.pptx").unwrap();(doctest 用 unwrap 仅为缩短示例;生产代码应使用 ? 传播错误。)
Structs§
- Audio
Entry - 音频媒体条目:保存到
/ppt/media/mediaN.mp3的音频 part 元数据(TODO-033)。 - Chart
Entry - 图表条目:保存到
/ppt/charts/chartN.xml的 chart part 元数据。 - Core
Properties - 文档核心属性(对标 pypdf
DocumentInformation+ OOXMLcore-properties)。 - Custom
Properties - 自定义文档属性集合(
/docProps/custom.xml)。 - Diagram
Entry - SmartArt(diagram)条目:保存到
/ppt/diagrams/下的 4 个 part 元数据(TODO-037)。 - Media
Entry - 媒体条目:保存到
/ppt/media/<file>目录中的二进制资源。 - OleEntry
- OLE 对象条目:保存到
/ppt/embeddings/oleObjectN.bin的 OLE part 元数据(TODO-043)。 - Presentation
- 演示文稿(内存模型)。
- Video
Entry - 视频媒体条目:保存到
/ppt/media/mediaN.mp4的视频 part 元数据(TODO-033)。
Enums§
- Custom
Property Value - 自定义属性值类型(
/docProps/custom.xml中的vt:*元素)。
Constants§
- DEFAULT_
HEIGHT_ EMU - 默认演示文稿高度(EMU)。对应 7.5 英寸 —— 1 in = 914 400 EMU。
- DEFAULT_
WIDTH_ EMU - 默认演示文稿宽度(EMU)。对应 10 英寸(4:3 比例)—— 1 in = 914 400 EMU。