How-to guides/Errors & Debugging
Feature Not Supported
XFA forms are not supported by this reader

How to fix "XFA forms are not supported by this reader"

XFA forms are an Adobe-proprietary format only supported by Acrobat and Reader. Most viewers show a blank page or this error.

Why this happens

The viewer does not implement the XFA renderer

XFA is an Adobe proprietary standard that requires a dedicated rendering engine. Browsers (Chrome, Firefox, Safari), macOS Preview, Linux PDF viewers (Evince, Okular), and most non-Adobe mobile apps do not implement XFA. They display the fallback content defined in the PDF — often a blank page or a message asking the user to open in Acrobat.

Adobe's XFA renderer has been deprecated

Adobe deprecated XFA in PDF 2.0 (ISO 32000-2) and has been discouraging its use since 2017. Even in Adobe Reader, XFA support may be disabled in newer versions or restricted in certain deployment modes (e.g. Reader in browser mode).

The XFA form has no static AcroForm fallback

XFA PDFs can optionally include a pre-rendered AcroForm representation for viewers that don't support XFA. If the creator didn't include a fallback, non-XFA viewers render a blank page. This is the most common reason the form appears completely empty.

How to fix it

1

Flatten the XFA form to a static PDF

If you don't need the fields to remain interactive — for example, you're archiving a completed form — flatten the XFA into a static PDF. This removes all form logic and produces a plain document any viewer can display.

use pdfluent::PdfDocument;

let mut doc = PdfDocument::open("completed-xfa-form.pdf")?;

// Flatten XFA into a non-interactive static PDF
doc.flatten_xfa()?;
doc.save("flattened-output.pdf")?;
2

Extract the XFA data and process it yourself

When the form logic matters more than the rendering, read the field model out of the document and work with the values. PDFluent gives you the fields and their values; producing a new document from them is a job for whatever generates your other documents, because PDFluent has no authoring API.

use pdfluent::PdfDocument;

let mut doc = PdfDocument::open("xfa-form.pdf")?;

let model = doc.xfa_form_model()?;
println!("{} fields over {} layout pages", model.fields.len(), model.page_count);

for field in &model.fields {
    println!("{} = {:?} ({:?})", field.name, field.value, field.field_type);
}

Frequently asked questions