Enterprise PDF SDK

PDF processingthat runs everywhere.

The only pure-Rust PDF SDK with XFA support. ~2MB in the browser. Native speed on the server.

Parse, render, flatten XFA forms, validate PDF/A, and sign documents across Rust, Python, Node.js, and WebAssembly — all from one SDK. No C, no C++, no legacy baggage.

74×*
faster cold start
22×*
less memory
~2MB
WASM bundle
use pdfluent::Sdk;

fn main() -> pdfluent::Result<()> {
    let sdk = Sdk::init_with_license("license.json")?;

    // Flatten a legacy XFA form to a static PDF
    let doc = sdk.open("government_form.xdp")?;
    let flat = doc.flatten_xfa()?;
    flat.save("output.pdf")?;

    println!("Flattened {} pages.", flat.page_count());
    Ok(())
}

XFA Form Processing

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

~2MB WASM Bundle

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

74× 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());
}
Your files never leave your browser

Try it in Your Browser

All processing happens locally via WebAssembly. No server uploads, complete privacy.

Text Extractor

Core

Extract text with layout preservation

Try Demo →

PDF Viewer

Core

Full WASM rendering in the browser, XFA forms included

Try Demo →

PDF/A Validator

Compliance

Check archival compliance against PDF/A-1 through PDF/A-3

Try Demo →

PDF Merge

Core

Combine multiple PDFs into a single document

Try Demo →

PDF/A Converter

Compliance

Convert a PDF to archival PDF/A format

Try Demo →

Page Info

Info

View page count, file size, metadata, and fonts

Try Demo →

Metadata

Info

Deep dive into document properties and XMP metadata

Try Demo →

Signatures

Security

Detect and verify digital signatures

Try Demo →

Thumbnail

Core

Generate instant page previews

Try Demo →

Annotations

Info

List comments, highlights, and stamps

Try Demo →

Performance That Matters

vs Java-based alternatives — full methodology

74×*
Faster cold start
vs. PDFBox (JVM)
22×*
Less memory
vs. PDFBox (JVM)
~2MB
WASM bundle
no server needed
0
Segfaults
memory-safe by design

Built in 100% pure Rust — no C, no C++, no JVM. PDFluent starts in under 10ms, uses minimal memory, and ships as a single binary or a ~2MB WASM bundle 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, 74× faster cold start, 18MB RAM
  • XFA forms — dynamic reflow, FormCalc, XML data binding
  • ~2MB WASM bundle — process PDFs in the browser, no server
  • Offline Ed25519 license files — works in air-gapped environments

Developer

€499/year

1 developer · unlimited projects

For solo developers building a single product.

  • PDF parsing & text extraction
  • Rendering (PNG, JPEG)
  • Form filling (AcroForms)
  • Merge, split & watermark
  • Compress & optimize
  • Encrypt & decrypt
  • Rust + C API
  • WASM Core (~3 MB)
  • Perpetual fallback licence
  • PDF/A validation & conversion
  • Digital signatures
  • XFA flatten
  • Python & Node.js bindings
Start 30-Day Trial
Most Popular

Team

€1,499/year

Up to 5 developers · unlimited projects

For small teams that need compliance and signatures.

  • Everything in Developer
  • PDF/A validation & conversion
  • Digital signatures & verification
  • Redaction
  • PDF/UA accessibility
  • ZUGFeRD & Factur-X
  • Python & Node.js bindings
  • Perpetual fallback licence
  • XFA flatten
  • OCR & DOCX export
  • Docker image
Start 30-Day Trial

Business

€2,999/year

Up to 15 developers · unlimited projects

For mid-size teams with legacy forms and complex workflows.

  • Everything in Team
  • XFA 3.3 flatten + FormCalc
  • OCR (Tesseract integration)
  • DOCX export
  • Java bindings
  • Docker image
  • 48h email support
  • Perpetual fallback licence
  • OEM / SaaS redistribution
  • Air-gapped deployment
Start 30-Day Trial

Enterprise

€5,999/year

Unlimited developers · unlimited projects

For large organisations, OEM vendors, and SaaS platforms.

  • Everything in Business
  • OEM / SaaS redistribution rights
  • Air-gapped deployment
  • 24h email support
  • Dedicated Slack channel
  • Custom contract terms
  • Perpetual fallback licence
Start 30-Day Trial

All prices in EUR, excl. VAT. Billed annually. Every paid plan includes a perpetual fallback licence — pay for one year, keep that version forever.