mupdf 0.8.0

Safe Rust wrapper to MuPDF
Documentation
use crate::support::{assert_snapshot, render_page};
use mupdf::pdf::{PdfDocument, PdfPage};
use mupdf::shape::Shape;
use mupdf::{Point, Rect, Size};

pub mod draw {
    use super::*;
    use mupdf::shape::{FinishOptions, PdfColor};

    #[test]
    #[cfg(not(target_arch = "wasm32"))]
    fn single_line_snapshot() {
        let mut doc = PdfDocument::new();
        let mut page = doc.new_page(Size::A4).unwrap();
        let rendered = {
            let mut shape = Shape::new(&mut page).unwrap();
            shape
                .draw_line(Point::new(100.0, 100.0), Point::new(400.0, 100.0))
                .unwrap()
                .finish(&Default::default())
                .unwrap()
                .commit(&mut doc, true)
                .unwrap();
            render_page(shape.page())
        };

        assert_snapshot("tests/shape/snapshots/draw_line.png", &rendered);
    }

    #[test]
    #[cfg(not(target_arch = "wasm32"))]
    fn rect_fill_stroke_snapshot() {
        let mut doc = PdfDocument::new();
        let mut page = doc.new_page(Size::A4).unwrap();
        let rendered = {
            let mut shape = Shape::new(&mut page).unwrap();
            shape
                .draw_rect(&Rect::new(50.0, 50.0, 200.0, 150.0))
                .unwrap()
                .finish(&FinishOptions {
                    color: Some(PdfColor::rgb(0.0, 0.0, 0.0)),
                    fill: Some(PdfColor::rgb(1.0, 1.0, 0.0)),
                    width: 2.0,
                    ..Default::default()
                })
                .unwrap()
                .commit(&mut doc, true)
                .unwrap();
            render_page(shape.page())
        };

        assert_snapshot("tests/shape/snapshots/rect_fill_stroke.png", &rendered);
    }

    #[test]
    #[cfg(not(target_arch = "wasm32"))]
    fn triangle_closed_snapshot() {
        let mut doc = PdfDocument::new();
        let mut page = doc.new_page(Size::A4).unwrap();
        let rendered = {
            let mut shape = Shape::new(&mut page).unwrap();
            shape
                .draw_polyline(&[
                    Point::new(100.0, 100.0),
                    Point::new(200.0, 300.0),
                    Point::new(300.0, 100.0),
                ])
                .unwrap()
                .finish(&FinishOptions {
                    close_path: true,
                    width: 1.5,
                    ..Default::default()
                })
                .unwrap()
                .commit(&mut doc, true)
                .unwrap();
            render_page(shape.page())
        };

        assert_snapshot("tests/shape/snapshots/triangle_closed.png", &rendered);
    }

    #[test]
    #[cfg(not(target_arch = "wasm32"))]
    fn overlay_preserves_existing_snapshot() {
        let mut doc = PdfDocument::from_bytes(include_bytes!("../files/dummy.pdf")).unwrap();
        let mut page = PdfPage::try_from(doc.load_page(0).unwrap()).unwrap();
        let rendered = {
            let mut shape = Shape::new(&mut page).unwrap();
            shape
                .draw_line(Point::new(40.0, 420.0), Point::new(555.0, 420.0))
                .unwrap()
                .finish(&FinishOptions {
                    color: Some(PdfColor::rgb(1.0, 0.0, 0.0)),
                    width: 4.0,
                    ..Default::default()
                })
                .unwrap()
                .commit(&mut doc, true)
                .unwrap();
            render_page(shape.page())
        };

        assert_snapshot(
            "tests/shape/snapshots/overlay_preserves_existing.png",
            &rendered,
        );
    }

    #[test]
    #[cfg(not(target_arch = "wasm32"))]
    fn bezier_rotated_snapshot() {
        let mut doc = PdfDocument::new();
        let mut page = doc.new_page(Size::A4).unwrap();
        page.set_rotation(90).unwrap();

        let rendered = {
            let mut shape = Shape::new(&mut page).unwrap();
            shape
                .draw_bezier(
                    Point::new(0.0, 0.0),
                    Point::new(50.0, 150.0),
                    Point::new(150.0, 150.0),
                    Point::new(200.0, 0.0),
                )
                .unwrap()
                .finish(&FinishOptions {
                    width: 2.0,
                    close_path: false,
                    ..Default::default()
                })
                .unwrap()
                .commit(&mut doc, true)
                .unwrap();
            render_page(shape.page())
        };

        assert_snapshot("tests/shape/snapshots/bezier_rotated.png", &rendered);
    }
}