Documentation

Everything you need
to build with PDFluent.

Guides, code examples, and API reference for PDF processing in Rust.

Source-available on GitHub

Quick examples

Common operations to get started

Initialise & extract text

Rust
use pdfluent::PdfDocument;

let doc = PdfDocument::open("invoice.pdf")?;

// The full text, in reading order.
let text = doc.extract_text()?;
println!("{text}");

// Or per page.
for n in 0..doc.page_count() {
    println!("--- page {} ---", n + 1);
    println!("{}", doc.page(n)?.text()?);
}

Flatten XFA form

Rust
use pdfluent::PdfDocument;

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

// The form model: one row per logical field.
let model = doc.xfa_form_model()?;
for field in &model.fields {
    println!("{} = {:?}", field.name, field.value);
}

// Fill by name.
doc.set_xfa_field_value("form1.name", pdfluent::xfa::XfaFieldValue::Text("Smith"))?;

Convert & validate PDF/A

Rust
use pdfluent::{PdfAProfile, PdfDocument};

let doc = PdfDocument::open("legacy.pdf")?;

let rapport = doc.validate_pdfa(PdfAProfile::A2b)?;
if rapport.is_compliant() {
    println!("conform PDF/A-2b");
} else {
    for schending in &rapport.violations {
        println!("{schending:?}");
    }
}

Sign a document (PAdES)

Rust
use pdfluent::signer::{PadesProfile, Pkcs12Signer, SignOptions};
use pdfluent::PdfDocument;

let mut doc = PdfDocument::open("contract.pdf")?;
let signer = Pkcs12Signer::from_pfx_file("cert.p12", "password")?;

// SignOptions::new() asks for PAdES B-LT, which needs a document security
// store this build cannot write. Choose the profile you can honour.
let opts = SignOptions::new()
    .profile(PadesProfile::BasicSignature)
    .reason("Approved");

doc.sign(&signer, opts)?;
doc.save("contract-signed.pdf")?;

How-to guides

85+ step-by-step guides covering every PDF operation in Rust — merging, signing, OCR, PDF/A, XFA, and more.

Browse all guides →

Error reference

Error codes with explanations, root causes, and fixes. Covers common issues in iText, PDFBox, IronPDF migrations too.

Browse errors →

Evaluation licence

Request a 30-day evaluation key on this page. Full SDK, no feature restrictions, licence file delivered automatically by email.

Start an evaluation →