Rasterize individual pages or an entire PDF document to JPEG files at a configurable DPI and quality level.
use pdfluent::{Document, render::{RenderOptions, ImageFormat}};
fn main() -> pdfluent::Result<()> {
let doc = Document::open("input.pdf")?;
let opts = RenderOptions::new()
.dpi(150)
.format(ImageFormat::Jpeg { quality: 85 });
for (i, page) in doc.pages().enumerate() {
let image = page.render(&opts)?;
image.save(format!("page_{:03}.jpg", i + 1))?;
}
Ok(())
}A read-only Document is sufficient for rendering.
let doc = Document::open("input.pdf")?;Set the DPI for rasterization and the output format. Higher DPI produces sharper images but larger files.
use pdfluent::render::{RenderOptions, ImageFormat};
let opts = RenderOptions::new()
.dpi(150) // 150 DPI = medium resolution
.format(ImageFormat::Jpeg { quality: 85 }) // 85% JPEG quality
.background_color([255, 255, 255]); // white backgroundpage.render() returns a RenderedImage containing the pixel data and dimensions.
let page = doc.page(0)?;
let image = page.render(&opts)?;
println!("Width: {}px", image.width());
println!("Height: {}px", image.height());image.save() writes the encoded JPEG bytes to the specified path.
image.save("page_1.jpg")?;Iterate over all pages and write one JPEG per page.
std::fs::create_dir_all("output_images")?;
for (i, page) in doc.pages().enumerate() {
let image = page.render(&opts)?;
image.save(format!("output_images/page_{:03}.jpg", i + 1))?;
}No JVM, no runtime, no DLL dependencies. Ships as a single native binary or WASM module.
Rust's ownership model prevents buffer overflows and use-after-free. No segfaults in PDF parsing.
Same code runs server-side, in Docker, on AWS Lambda, on Cloudflare Workers, or in the browser via WASM.