XFDF Support

XFDF is an XML-like standard from Adobe XFDF (ISO 19444-1:2016) for encoding annotations and forms (see this XFDF overview). It is compatible with Adobe Acrobat and several other third-party frameworks.

ℹ️ Note: XFDF has various limitations. In most cases, using PSPDFKit Instant will result in a smaller file and better synchronization.

PSPDFKit for Android supports both reading and writing XFDF files. The XfdfFormatter class contains parseXfdf() and writeXfdf() methods you can use to perform these operations. It also contains their asynchronous counterparts, parseXfdfAsync() and writeXfdfAsync() (recommended so you can easily offload parsing from the UI thread).

Importing XFDF

To read from an XFDF file:

Copy
1
2
3
4
5
6
7
8
9
// Your data provider, serving the XFDF file which we'll parse.
var yourDataProvider = SomeDataProvider()

// The async parse method is recommended (so you can easily offload parsing from the UI thread).
XfdfFormatter.parseXfdfAsync(pdfDocument, yourDataProvider)
    .subscribeOn(Schedulers.io()) // Specify thread on which to parse XFDF.
    .subscribe { annotations ->
        // Handle the list of annotations here.
    }
Copy
1
2
3
4
5
6
7
8
9
// Your data provider, serving the XFDF file which we'll parse.
DataProvider yourDataProvider = new SomeDataProvider();

// The async parse method is recommended (so you can easily offload parsing from the UI thread).
XfdfFormatter.parseXfdfAsync(pdfDocument, yourDataProvider)
    .subscribeOn(Schedulers.io()) // Specify thread on which to parse XFDF.
    .subscribe(annotations -> {
        // Handle the list of annotations here.
    });

The list of annotations you get in the callback will not be added to the document automatically. This allows you to have better control over which of these annotations you want to add. To add annotations to a document, use document.getAnnotationProvider().addAnnotationToPage() on the annotations you want to add.

Exporting to XFDF

You can export annotations and form fields from a document to an XFDF file like so:

Copy
1
2
3
4
5
6
7
8
9
10
11
12
13
// List of annotations from the document to be exported.
val listOfAnnotationsToExport = ...

// List of form fields from the document to be exported.
val listOfFormFieldsToExport = ...

// Output stream pointing to the XFDF file into which to write the data.
val outputStream = ...

// The async write method is recommended (so you can easily offload writing from the UI thread).
XfdfFormatter.writeXfdfAsync(pdfDocument, listOfAnnotationsToExport, listOfFormFieldsToExport, outputStream)
        .subscribeOn(Schedulers.io()) // Specify thread on which to write XFDF.
        .subscribe(..)
Copy
1
2
3
4
5
6
7
8
9
10
11
12
13
// List of annotations from the document to be exported.
List<Annotation> listOfAnnotationsToExport = ... ;

// List of form fields from the document to be exported.
List<FormField> listOfFormFieldsToExport = ... ;

// Output stream pointing to the XFDF file into which to write the data.
OutputStream outputStream = ... ;

// The async write method is recommended (so you can easily offload writing from the UI thread).
XfdfFormatter.writeXfdfAsync(pdfDocument, listOfAnnotationsToExport, listOfFormFieldsToExport, outputStream)
        .subscribeOn(Schedulers.io()) // Specify thread on which to write XFDF.
        .subscribe(..);

Exporting Annotations to XFDF via Adobe Acrobat

Adobe Acrobat can export annotations into XFDF. The export menu is part of the Comments tool and is accessed by opening the tool in the sidebar.

You can access the export function by clicking on the three dots and then choosing Export All To Data File.

  1. At the bottom of the page, choose Acrobat XFDF Files.
  2. Select the directory you wish to save the XFDF file to and name the file.
  3. Click save.

A successful export will result in a file with an .xfdf extension.

Importing Annotations to XFDF via Adobe Acrobat

The export function is part of the Comments tool and is accessed by clicking on its icon.

Click on the three dots to open the import menu, and then click on Import Data File.

Highlight the .xfdf file you wish to import and click Select.

The import function completes with the annotations being placed on the document.

Adobe Acrobat Error Conditions

Error Description Screenshot
Damaged/missing document body
Damaged/missing description tag
Missing document flag