// readme

cargo add pdfluent                  # Rust
pip install pdfluent                # Python and the pdfluent command
npm install @pdfluent/node          # Node.js

docs/hero/, and both panels, and the picture itself, come out of PDFluent’s own rasterizer. The generator refuses to write it if the redacted text is still extractable or validate_pdfa() disagrees.

How it scores

PDFluent 1.3.0 ranks above every engine on the published opendataloader-bench leaderboard (as of 3 November 2026)*.

Full tables, all four measures and how to reproduce


In thirty seconds

use pdfluent::prelude::*;

fn main() -> Result<()> {
    let doc = PdfDocument::open("input.pdf")?;

    for page in doc.pages() {
        println!("{}", page.text()?);
    }

    let report = doc.validate_pdfa(PdfAProfile::A2b)?;
    if report.is_compliant() {
        println!("PDF/A-2B βœ“");
    }
    Ok(())
}

QUICKSTART.md is the same five minutes in each language, and…