Creating a thumbnail of a PDF using Cairo, Poppler and Rust
This seems pretty good to me. I didn't notice any bugs, and I don't have knowledge of what pdf crates are available, so I just have a few points about idiomatic Rust.

To start, I just want to note that when I tried to create this project locally to work on, I had to fiddle around with the versions of the crates to get a working combination, which makes it an especially good idea to include what versions you're using somewhere in your question.

You can simply remove all uses of extern crate some_crate, since they aren't needed anymore in rust 2018 edition (the default by now).

I like the use of an error enum. You could consider using something like the crate thiserror to derive Display and From instances for the enum. (This just reduces boilerplate.)

I often like having type Result&lt;T, E = MyErrorType&gt; = std::result::Result&lt;T, E&gt;;, especially for a library, which lets me write Result&lt;()&gt; to use my error or Result&lt;(), OtherError&gt; to use another.

pub fn create_thumbnail(pdf_path: &amp;Path, out_path: &amp;Path) -&gt; Result&lt;()&gt; {
    let doc = PopplerDocument::new_from_file(pdf_path, "")?;

    let page = doc.get_page(0).ok_or(Error::NoPagesError)?;

    let (width, height) = page.get_size();

    let surface = ImageSurface::create(Format::Rgb24, width as i32, height as i32)?;

    let ctxt = Context::new(&amp;surface);
    ctxt.set_source_rgb(1.0, 1.0, 1.0);
    ctxt.paint();

    page.render(&amp;ctxt);

    let mut f = File::create(out_path)?;
    surface.write_to_png(&amp;mut f)?;

    Ok(())
}


You should use Paths when you're representing paths. You can use ok_or or ok_or_else to convert Option to Result, which works well with ?. Rust can infer the type of your floats in set_source_rgb, but if you want to be explicit then you should use 1.0f64 rather than 1.0 as f64. I removed your comments just for space in the answer, but they are meaningful since they give reason and don't just restate the code.