Flatten PDF Forms Fields on Android

PSPDFKit allows form flattening using the PdfProcessor class.

❗Important: When using the processor API before loading a document, you must ensure PSPDFKit is fully initialized, or processing will fail. Check out our Integrating PSPDFKit guide for more information.

Form elements are of a special annotation type, AnnotationType::WIDGET, so please first see our guide on flattening annotations, which also covers flattening for printing. You can use the method discussed there to flatten all types of form elements:

// Flatten only forms, and copy everything else.
val task = PdfProcessorTask.fromDocument(document)
                .changeAllAnnotations(PdfProcessorTask.AnnotationProcessingMode.KEEP)
                .changeAnnotationsOfType(AnnotationType.WIDGET, PdfProcessorTask.AnnotationProcessingMode.FLATTEN)
PdfProcessor.processDocumentAsync(task, ...)
// Flatten only forms, and copy everything else.
PdfProcessorTask task = PdfProcessorTask.fromDocument(document)
				.changeAllAnnotations(PdfProcessorTask.AnnotationProcessingMode.KEEP)
				.changeAnnotationsOfType(AnnotationType.WIDGET, PdfProcessorTask.AnnotationProcessingMode.FLATTEN);
PdfProcessor.processDocumentAsync(task, ...);

If you want to flatten only form elements of a specific FormType, you can use PdfProcessorTask#changeFormsOfType instead.

For example, you might not want to flatten a signature annotation, as only the visual representation of the digital signature — and not the actual digital signature — would be included in the resulting document:

// Flatten all forms except for signature types.
val task = PdfProcessorTask.fromDocument(document)
                .changeAnnotationsOfType(AnnotationType.WIDGET, PdfProcessorTask.AnnotationProcessingMode.FLATTEN)
                .changeFormsOfType(FormType.SIGNATURE, PdfProcessorTask.AnnotationProcessingMode.KEEP)
PdfProcessor.processDocument(task, ...)
// Flatten all forms except for signature types.
PdfProcessorTask task = PdfProcessorTask.fromDocument(document)
				.changeAnnotationsOfType(AnnotationType.WIDGET, PdfProcessorTask.AnnotationProcessingMode.FLATTEN)
				.changeFormsOfType(FormType.SIGNATURE, PdfProcessorTask.AnnotationProcessingMode.KEEP);
PdfProcessor.processDocumentAsync(task, ...);