printpdf 0.9.1

Rust library for reading and writing PDF files
Documentation
use printpdf::*;

#[test]
fn test_shape_text_simple() {
    let font_bytes = include_bytes!("../examples/assets/fonts/RobotoMedium.ttf");
    let font = ParsedFont::from_bytes(font_bytes, 0, &mut Vec::new()).unwrap();

    let options = TextShapingOptions {
        font_size: Pt(12.0),
        ..Default::default()
    };

    let shaped_text = font.shape_text("Hello World", &options, &FontId::new());

    // Should have at least one line
    assert!(!shaped_text.lines.is_empty());

    // The line should have words
    assert!(!shaped_text.lines[0].words.is_empty());
}

#[test]
fn test_text_with_hole() {
    let font_bytes = include_bytes!("../examples/assets/fonts/RobotoMedium.ttf");
    let font = ParsedFont::from_bytes(font_bytes, 0, &mut Vec::new()).unwrap();

    let long_text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam auctor, nisl \
                     eget ultricies tincidunt, nisl nisl aliquam nisl, eget aliquam nisl nisl \
                     eget nisl. Nullam auctor, nisl eget ultricies tincidunt, nisl nisl aliquam \
                     nisl, eget aliquam nisl nisl eget nisl.";

    let hole = TextHole {
        rect: Rect::from_xywh(
            Pt(10.0),
            Pt(10.0),
            Pt(20.0),
            Pt(20.0),
        ),
    };

    let options = TextShapingOptions {
        font_size: Pt(12.0),
        max_width: Some(Pt(200.0)),
        holes: vec![hole],
        ..Default::default()
    };

    let shaped_text = font.shape_text(long_text, &options, &FontId::new());

    // Text should have multiple lines
    assert!(shaped_text.lines.len() > 1);
}