Public beta · 1.0.0-beta.5

PDF processing for every stack.

One Rust-native SDK. Five language channels live on public package registries today.

Public beta — APIs may shift before 1.0. Perpetual-fallback licence on every paid plan.

Choose your environment

Install in your stack.

Five public package channels — pick the one you ship in.

  • Rust

    Beta

    Server-side and native CLI workloads.

    cargo add pdfluent
  • Python

    Beta

    Data pipelines and batch processing.

    pip install pdfluent
  • WASM / JavaScript

    Beta

    In-browser PDF — no server required.

    npm install @pdfluent/sdk-wasm
  • .NET

    Beta

    C# / F# on .NET 6 and newer.

    dotnet add package PDFluent --version 1.0.0-beta.5
  • Java

    Beta

    JVM apps and JVM-based pipelines.

    com.pdfluent:pdfluent:1.0.0-beta.5

XFA Form Processing

The only pure-Rust XFA engine. Handles dynamic reflow, FormCalc scripting, and SOM path resolution — the parts every other SDK skips.

~3 MB WASM Bundle (Brotli)

PDF processing in the browser with no server. Drop in the Core bundle and your users' files never leave their device.

36× Faster Cold Start

Pure Rust means no JVM warmup, no GC pauses. Starts in under 10ms. Processes thousands of PDFs in parallel without breaking a sweat.

EU Compliance Built-in

PDF/A-1/2/3 archiving, PDF/UA accessibility, ZUGFeRD and Factur-X e-invoicing. Validate and remediate — not just check.

Every operation

Fast. Measurably.

Every operation returns a structured result. Sub-millisecond for most tasks. Here's what you actually get.

PDF Processing
2.4ms
{
  "status": "success",
  "text": "Invoice #12345 extracted in 2.4ms",
  "pages": 3
}
XFA Flattening
8.1ms
{
  "status": "flattened",
  "note": "Dynamic form converted to static PDF in 8.1ms"
}
PDF/A Validation
1.2ms
{
  "compliant": true,
  "level": "PDF/A-3b",
  "validated_in": "1.2ms"
}
Text Extraction
3.7ms
{
  "text": "Full document text extracted",
  "words": 1247,
  "time": "3.7ms"
}
Digital Signature
12.3ms
{
  "signed": true,
  "algorithm": "RSA-SHA256",
  "timestamp": "2026-03-26T10:30:00Z"
}
OCR Processing
45.2ms
{
  "recognized": true,
  "confidence": 0.97,
  "text": "Scanned document text recognized"
}
PDF Merge
5.8ms
{
  "merged": true,
  "input_files": 3,
  "output_pages": 12,
  "time": "5.8ms"
}
Format Conversion
18.4ms
{
  "converted": "PDF to DOCX",
  "fidelity": "high",
  "time": "18.4ms"
}
Redaction
6.2ms
{
  "redacted": true,
  "patterns": ["SSN", "email"],
  "matches": 7
}

Complete PDF Toolkit

Everything you need to build PDF-powered applications

PDF Processing

Parse any PDF — malformed, compressed, encrypted — without crashing. Extract text with accurate reading order, render pages, merge, split, and save with incremental writes. Built on a streaming parser that handles multi-GB files without loading them into memory.

use pdfluent::Sdk;

let sdk = Sdk::init_with_license("license.json")?;
let doc = sdk.open("report.pdf")?;

// Extract text with bounding boxes
for page in doc.pages() {
    for block in page.extract_text_blocks()? {
        println!("[{:.0},{:.0}] {}", block.x, block.y, block.text);
    }
}

// Merge multiple PDFs
let merged = sdk.merge(vec![
    sdk.open("part1.pdf")?,
    sdk.open("part2.pdf")?,
])?;
merged.save("combined.pdf")?;

XFA Forms

Six million XFA forms exist in government, tax, and banking systems worldwide. Most SDKs either refuse to open them or break complex layouts on flatten. PDFluent implements XFA 3.3 parsing, FormCalc scripting, XML data binding, and SOM path resolution — all in pure Rust. Visual accuracy is actively improving.

use pdfluent::{Sdk, XfaFlattenOptions};

let sdk = Sdk::init_with_license("license.json")?;
let doc = sdk.open("tax_return.xdp")?;

// Import XML data, then flatten to static PDF
let xml = std::fs::read("filled_data.xml")?;
doc.import_xfa_data(&xml)?;

let flat = doc.flatten_xfa_with_options(XfaFlattenOptions {
    preserve_acroform: true,
    embed_fonts: true,
    ..Default::default()
})?;
flat.save("filed_return.pdf")?;

// Or just extract field data as XML
let data = doc.export_xfa_data()?;
std::fs::write("extracted.xml", data)?;

Compliance & Archiving

PDF/A archiving for 7-year EU retention rules, PDF/UA accessibility for WCAG 2.2, ZUGFeRD and Factur-X e-invoicing for EN-16931. PDFluent validates, reports clause-level violations, and converts — without requiring you to become a PDF spec expert.

use pdfluent::{Sdk, PdfaLevel};

let sdk = Sdk::init_with_license("license.json")?;
let doc = sdk.open("legacy.pdf")?;

// Validate with detailed report
let report = doc.validate_pdfa(PdfaLevel::A2b)?;
if !report.is_compliant() {
    for v in report.violations() {
        eprintln!("[§{}] {}", v.clause, v.message);
    }
}

// Convert to PDF/A-2b
let archived = doc.convert_to_pdfa(PdfaLevel::A2b)?;
archived.save("archived.pdf")?;

// Full compliance dashboard in one call
let dash = doc.run_compliance_checks()?;
println!("PDF/A: {} | PDF/UA: {} | ZUGFeRD: {}",
    dash.pdfa.is_compliant(),
    dash.pdfua.is_compliant(),
    dash.zugferd.is_valid());

Digital Signatures

PAdES-B-B, B-T, B-LT, and B-LTA signatures with RFC 3161 timestamping. Load PKCS#12 certificates, add visible or invisible signatures, verify chains and revocation status, and sign multi-party documents. Everything runs offline — no API calls, no external services.

use pdfluent::{Sdk, Signer, SignatureOptions};

let sdk = Sdk::init_with_license("license.json")?;
let doc = sdk.open("contract.pdf")?;

let signer = Signer::from_pkcs12("cert.p12", "password")?;
let signed = doc.sign(signer, SignatureOptions {
    page: 0,
    reason: "Approved by legal".to_string(),
    location: "Amsterdam, NL".to_string(),
    timestamp_url: Some("http://timestamp.sectigo.com".into()),
    ..Default::default()
})?;
signed.save("signed_contract.pdf")?;

// Verify existing signatures
for sig in doc.signatures() {
    let result = sig.verify()?;
    println!("{}: valid={}, modified={}",
        sig.signer_name(),
        result.is_valid(),
        result.document_modified());
}
Public package availability

Five registries. Install today.

PDFluent ships its public-beta builds to five language registries. Nothing private. Nothing gated.

Performance That Matters

vs Java-based alternatives — full methodology

36×*
Faster cold start
vs. PDFBox (JVM init)
3–5×*
Less peak memory
vs. iText / PDFBox
~3 MB
WASM bundle (Brotli)
no server needed
0
Segfaults
memory-safe by design

Built in 100% pure Rust — no C, no C++, no JVM. PDFluent starts in under 30 ms, uses minimal memory, and ships as a single binary or a ~3 MB Brotli-compressed WASM bundle (~10 MB uncompressed) that runs anywhere: server, browser, edge, embedded.

The Difference

PDFluent vs. Traditional SDKs

See how our pure Rust approach compares to legacy Java-based solutions

Apryse / iText / Nutrient

  • ×Per-developer licensing — 3 devs costs 3× as much
  • ×Enterprise pricing — contact sales, no public price published
  • ×Memory-unsafe runtimes (C++, JVM) — historic memory-safety CVEs, JVM warmup, 400MB RAM
  • ×XFA: none (Nutrient), Windows-only (Apryse), add-on only (iText)
  • ×No WASM — can't run in the browser
  • ×Online license validation — breaks in air-gapped environments

PDFluent

  • Per-product pricing — your whole team, one license
  • Starts at €1,990/year — transparent, no sales call required
  • 100% pure Rust — memory-safe, 36× faster cold start, 46 MB peak RAM on merge
  • XFA forms — dynamic reflow, FormCalc, XML data binding
  • ~3 MB Brotli-compressed WASM bundle — process PDFs in the browser, no server
  • Offline Ed25519 license files — works in air-gapped environments
Commercial licensing

Talk to us about commercial licensing.

Every paid plan includes a perpetual-fallback licence and a 30-day trial. We respond within one business day.

Lite

€699one-time

1 developer · 1 location · 1 product

One developer, one location, one product.

  • Full SDK — all features, all targets
  • Rust + C API
  • WASM build target (~3 MB Brotli)
  • Python, Node.js, Java bindings
  • AcroForms, XFA, PDF/A, signatures
  • Encryption, redaction, compression
  • Email support (best effort)
  • First year of updates included
  • Perpetual licence
or start free trial
Most Popular

Plus

€1,099one-time

3 developers · 3 locations · 3 products

Small teams — up to 3 developers, 3 locations, 3 products.

  • Full SDK — all features, all targets
  • Rust + C API
  • WASM build target (~3 MB Brotli)
  • Python, Node.js, Java bindings
  • AcroForms, XFA, PDF/A, signatures
  • Encryption, redaction, compression
  • Email support (48h response)
  • First year of updates included
  • Perpetual licence
or start free trial

Professional

€2,199one-time

10 developers · 10 locations · 10 products

Mid-size teams — up to 10 developers, 10 locations, 10 products.

  • Full SDK — all features, all targets
  • Rust + C API
  • WASM build target (~3 MB Brotli)
  • Python, Node.js, Java bindings
  • AcroForms, XFA, PDF/A, signatures
  • Encryption, redaction, compression
  • Email support (24h response)
  • First year of updates included
  • Perpetual licence
or start free trial

Unlimited

€4,399one-time

Unlimited developers · locations · products

Large teams and OEM vendors. Unlimited everything.

  • Full SDK — all features, all targets
  • Rust + C API
  • WASM build target (~3 MB Brotli)
  • Python, Node.js, Java bindings
  • AcroForms, XFA, PDF/A, signatures
  • Encryption, redaction, compression
  • Email support (24h response)
  • Priority bugfix queue
  • First year of updates included
  • Perpetual licence
or start free trial

All prices in EUR, excl. VAT. Perpetual licence — pay once, own that version forever. OEM redistribution and air-gapped deployment available as add-ons. Enterprise from €12,000.