Skip to main content

Crate deckmint

Crate deckmint 

Source
Expand description

§deckmint

Create PowerPoint .pptx presentations programmatically in Rust. Works on native targets and compiles to WASM via the companion deckmint-wasm crate.

§Quick start

use deckmint::{Presentation, ShapeType};
use deckmint::objects::text::TextOptionsBuilder;
use deckmint::objects::shape::ShapeOptionsBuilder;

let mut pres = Presentation::new();
pres.title = "My Presentation".to_string();

let slide = pres.add_slide();
slide.add_text(
    "Hello, World!",
    TextOptionsBuilder::new()
        .x(1.0).y(1.5).w(8.0).h(1.5)
        .font_size(36.0)
        .bold()
        .build()
);
slide.add_shape(
    ShapeType::Rect,
    ShapeOptionsBuilder::new()
        .x(1.0).y(3.0).w(4.0).h(2.0)
        .fill_color("#4472C4")
        .build()
);

let bytes = pres.write().expect("failed to generate pptx");
// bytes is a valid .pptx ZIP archive

§Tables

use deckmint::Presentation;
use deckmint::objects::table::{TableOptionsBuilder, TableCell};

let mut pres = Presentation::new();
let slide = pres.add_slide();
slide.add_table(
    vec![
        vec![TableCell::new("Name"), TableCell::new("Score")],
        vec![TableCell::new("Alice"), TableCell::new("95")],
    ],
    TableOptionsBuilder::new()
        .x(1.0).y(1.5).w(8.0)
        .col_w(vec![4.0, 4.0])
        .font_size(14.0)
        .build(),
);

§Charts

use deckmint::{Presentation, ChartType, ChartOptionsBuilder, ChartSeries};

let mut pres = Presentation::new();
let slide = pres.add_slide();
let series = vec![
    ChartSeries::new("Q1", vec!["Jan", "Feb", "Mar"], vec![10.0, 20.0, 30.0]),
];
slide.add_chart(
    ChartType::Bar,
    series,
    ChartOptionsBuilder::new()
        .x(0.5).y(1.0).w(9.0).h(4.5)
        .title("Monthly Sales")
        .show_value()
        .build(),
);

§Images

use deckmint::Presentation;
use deckmint::objects::image::ImageOptionsBuilder;

let png_bytes: Vec<u8> = std::fs::read("logo.png").unwrap();
let mut pres = Presentation::new();
let slide = pres.add_slide();
slide.add_image_from(
    ImageOptionsBuilder::new()
        .bytes(png_bytes, "png")
        .bounds(3.0, 2.0, 4.0, 3.0)
).unwrap();

§Animations

use deckmint::{Presentation, AnimationEffect, Direction};
use deckmint::objects::text::TextOptionsBuilder;

let mut pres = Presentation::new();
let slide = pres.add_slide();
slide.add_text(
    "I fly in!",
    TextOptionsBuilder::new()
        .x(1.0).y(2.0).w(8.0).h(1.5)
        .animation(AnimationEffect::fly_in(Direction::Left))
        .build(),
);

§Equations (requires math feature, enabled by default)

use deckmint::Presentation;
use deckmint::objects::text::TextOptionsBuilder;

let mut pres = Presentation::new();
let slide = pres.add_slide();

// Standalone equation
slide.add_equation(
    r"x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}",
    TextOptionsBuilder::new().bounds(1.0, 1.5, 8.0, 1.0).build(),
).unwrap();

// Inline math mixed with text (delimited by $...$)
slide.add_text_with_math(
    r"The area of a circle is $A = \pi r^2$.",
    TextOptionsBuilder::new().bounds(1.0, 3.0, 8.0, 1.0).font_size(18.0).build(),
).unwrap();

§Grid layout

The layout module provides a layout::GridLayoutBuilder for arranging objects in rows and columns with gutters and padding.

§Output

Re-exports§

pub use enums::AlignH;
pub use enums::AlignV;
pub use enums::ChartType;
pub use enums::SchemeColor;
pub use enums::ShapeType;
pub use error::PptxError;
pub use presentation::Presentation;
pub use presentation::SectionDef;
pub use presentation::SlideLayout;
pub use presentation::SlideMasterDef;
pub use presentation::ThemeProps;
pub use slide::Slide;
pub use types::AnimationEffect;
pub use types::AnimationEffectType;
pub use types::AnimationTrigger;
pub use types::TextTarget;
pub use types::CheckerboardDir;
pub use types::CustomGeomPoint;
pub use types::Direction;
pub use types::ShapeVariant;
pub use types::SplitOrientation;
pub use types::StripDir;
pub use types::BorderProps;
pub use types::BorderType;
pub use types::Color;
pub use types::Coord;
pub use types::FieldType;
pub use types::FillType;
pub use types::GlowProps;
pub use types::GradientFill;
pub use types::GradientStop;
pub use types::GradientType;
pub use types::HyperlinkAction;
pub use types::HyperlinkProps;
pub use types::ImageColorAdjust;
pub use types::Margin;
pub use types::PatternFill;
pub use types::PatternType;
pub use types::PositionProps;
pub use types::PresLayout;
pub use types::ShadowProps;
pub use types::ShadowType;
pub use types::BevelPreset;
pub use types::BevelProps;
pub use types::Camera3D;
pub use types::CameraPreset;
pub use types::LightDirection;
pub use types::LightRig3D;
pub use types::LightRigType;
pub use types::LineCap;
pub use types::LineJoin;
pub use types::MaterialPreset;
pub use types::Rotation3D;
pub use types::Scene3DProps;
pub use types::Shape3DProps;
pub use types::ShapeFillProps;
pub use types::ShapeLineProps;
pub use types::SlideNumberProps;
pub use types::TextOutlineProps;
pub use types::ThemeColorMod;
pub use types::TransitionDir;
pub use types::TransitionProps;
pub use types::TransitionSpeed;
pub use types::TransitionType;
pub use objects::chart::BarDir;
pub use objects::chart::BarGrouping;
pub use objects::chart::ChartOptions;
pub use objects::chart::ChartOptionsBuilder;
pub use objects::chart::ChartSeries;
pub use objects::chart::LegendPos;
pub use objects::text::char_range_for_run;
pub use objects::text::TabStop;
pub use objects::text::TextFit;
pub use objects::text::TextRunBuilder;
pub use objects::connector::ConnectorEndpoint;
pub use objects::connector::ConnectorOptions;
pub use objects::connector::ConnectorOptionsBuilder;
pub use objects::connector::ConnectorType;
pub use objects::media::MediaOptions;
pub use objects::media::MediaOptionsBuilder;
pub use objects::media::MediaType;
pub use objects::group::GroupOptions;
pub use objects::group::GroupOptionsBuilder;
pub use layout::CellRect;
pub use layout::GridLayout;
pub use layout::GridLayoutBuilder;
pub use layout::GridTrack;
pub use layout::center_in;
pub use layout::align_left;
pub use layout::align_right;
pub use layout::align_top;
pub use layout::align_bottom;
pub use layout::split_h;
pub use layout::split_v;

Modules§

enums
error
layout
CSS-grid-inspired layout helpers for positioning slide objects.
objects
Slide object types — text boxes, shapes, images, tables, and charts.
packaging
presentation
slide
types
utils
validate
Post-generation validation for PPTX archives.
xml