Shrink PDF file size by recompressing images, removing unused resources, and compressing content streams. No external tools required.
use pdfluent::{PdfDocument, CompressOptions};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut doc = PdfDocument::open("large_report.pdf")?;
let result = doc.compress(CompressOptions::default())?;
doc.save("large_report_compressed.pdf")?;
println!(
"Reduced from {} KB to {} KB ({:.0}% smaller)",
result.original_size / 1024,
result.compressed_size / 1024,
result.reduction_percent(),
);
Ok(())
}Add the pdfluent crate to Cargo.toml.
[dependencies]
pdfluent = "0.9"Load the file you want to compress.
use pdfluent::PdfDocument;
let mut doc = PdfDocument::open("presentation.pdf")?;CompressOptions controls image quality, stream compression level, and which cleanup steps to run.
use pdfluent::CompressOptions;
let opts = CompressOptions::default()
.image_jpeg_quality(75) // 0-100, lower = smaller file
.compress_content_streams(true)
.remove_unused_resources(true)
.remove_duplicate_objects(true);Call compress() with the options. The result contains before/after sizes so you can log the reduction.
let result = doc.compress(opts)?;
println!("Original: {} bytes", result.original_size);
println!("Compressed: {} bytes", result.compressed_size);
println!("Saved: {:.1}%", result.reduction_percent());Write the optimised PDF to disk.
doc.save("presentation_small.pdf")?;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.