function ExportXFDF(const FileName: string): Integer; overload;
function ExportXFDF(Stream: TStream): Integer; overload;
function ExportXFDFToStream(Stream: TStream): Integer;
ExportXFDF walks every page of the loaded document and produces an
ISO 19444-1 conformant XFDF document rooted in the
http://ns.adobe.com/xfdf/ namespace. The output consists of
a <fields> section and an <annots>
section, both emitted as UTF-8 XML.
For form fields, the method enumerates the widget annotations of every
page, reads each field value, and writes a <field>
element. Hierarchical (qualified) field names are split on the dot
separator and emitted as nested <field> elements so
that the parent/child structure round-trips. Checkboxes and radio buttons
export their export value (the appearance-state name that
represents the on state) as the field value. Signature fields are listed
but their value is never exported.
For annotations, every non-widget, non-popup annotation on every page
is serialized. The exporter recognizes 18 /Subtype values:
text, highlight, underline, strikeout, squiggly, line, circle, square,
caret, polygon, polyline, stamp, ink, freetext, fileattachment, sound,
link, and redact. Each is written as an element under
<annots> carrying its page index, bounding rectangle,
contents, title (author), name (NM), subject, modification
and creation dates, flags, and color.
Encoding conventions follow ISO 19444-1: colors are written as
#RRGGBB hex strings; coordinate lists (rectangle, line
endpoints, polygon/polyline vertices, ink lists) are comma-separated
numbers; and annotation flags are emitted as a comma-separated list of
flag names rather than a raw bitmask.
PDFium itself exposes no XFDF API. ExportXFDF is implemented entirely in Pascal by PDFiumPas on top of its own annotation and form-field data model, querying PDFium only for the per-annotation attribute values.
Returns the number of UTF-8 bytes written. The Stream
overload accepts a TStream to write into; the
FileName overload accepts a file path and creates/truncates
that file. ExportXFDFToStream is an alias for the
Stream overload.
CA) and geometric data (line endpoints, polygon/polyline vertices, ink lists) are exposed through high-level records that are read-only on the PDFium side, because PDFium has no SetNumberValue setter for annotation dictionaries. These attributes are preserved as-is during export, so they round-trip through XFDF even though they cannot be edited.ImportXFDF or consumed by Acrobat, and vice versa.
// Export all fields and annotations to an .xfdf file
BytesWritten := Pdf1.ExportXFDF('C:\Data\form.xfdf');
// Or to a stream
var
Stream: TFileStream;
begin
Stream := TFileStream.Create('C:\Data\form.xfdf', fmCreate);
try
Pdf1.ExportXFDF(Stream);
finally
Stream.Free;
end;
end;