How-to guides/Optimization

Reduce PDF file size in Rust

Shrink PDF file size by recompressing images, removing unused resources, and compressing content streams. No external tools required.

rust
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(())
}
Install:cargo add pdfluentDownload SDK →

Step by step

1

Add PDFluent to your project

Add the pdfluent crate to Cargo.toml.

rust
[dependencies]
pdfluent = "0.9"
2

Open the PDF

Load the file you want to compress.

rust
use pdfluent::PdfDocument;

let mut doc = PdfDocument::open("presentation.pdf")?;
3

Configure compression options

CompressOptions controls image quality, stream compression level, and which cleanup steps to run.

rust
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);
4

Apply compression

Call compress() with the options. The result contains before/after sizes so you can log the reduction.

rust
let result = doc.compress(opts)?;

println!("Original:   {} bytes", result.original_size);
println!("Compressed: {} bytes", result.compressed_size);
println!("Saved:      {:.1}%", result.reduction_percent());
5

Save the compressed document

Write the optimised PDF to disk.

rust
doc.save("presentation_small.pdf")?;

Notes and tips

  • image_jpeg_quality below 60 is usually visible to human eyes on photographic content. 70-80 is a good default.
  • remove_unused_resources deletes fonts and images embedded in the file but not referenced by any page.
  • For PDFs that mainly contain vector graphics and text, image recompression has little effect. Focus on stream compression.
  • Compression is applied in memory. The file on disk is not changed until save() is called.

Why PDFluent for this

Pure Rust

No JVM, no runtime, no DLL dependencies. Ships as a single native binary or WASM module.

Memory safe

Rust's ownership model prevents buffer overflows and use-after-free. No segfaults in PDF parsing.

Runs anywhere

Same code runs server-side, in Docker, on AWS Lambda, on Cloudflare Workers, or in the browser via WASM.

Frequently asked questions