Interactive Document Processing
HotPDF provides bounded, non-executing workflows for loaded field scripts, RichMedia payloads, XFA data binding, FormCalc, and XFDF annotation exchange
Safe calculation and validation
EvaluateLoadedFieldJavaScript reads a field action for the requested trigger and evaluates only the documented safe subset
AFSimple_Calculateaggregates named fieldsAFRange_Validateapplies inclusive or exclusive boundsevent.value,this.getField(...).value, typed literals, array indexing, arithmetic, unary, comparison, equality, short-circuit logical, and conditional operators form bounded expressions- Allowlisted conversions, selected
Mathfunctions, deterministic UTC dates, and bounded string and array methods support common form logic without a script engine - Unsupported functions, members, statements, and active scripting constructs fail closed
RichMedia inspection and sanitization
GetLoadedRichMediaAssetCount, GetLoadedRichMediaAssetInfo, and ExtractLoadedRichMediaAsset traverse a bounded RichMedia asset name tree and expose decoded embedded bytes
SanitiseLoadedRichMediaAnnotations removes RichMedia annotations and collects their now-unreachable FileSpec and EmbeddedFile objects for a safe full rewrite without removing unrelated active content
XFA SOM and FormCalc
XFA flattening accepts indexed instances, wildcard instances, class selectors, descendant selectors, and $record, $data, or !data roots while preserving document order
The bounded FormCalc subset supports mixed scalar and SOM node-set aggregates, nested numeric and string calls, deterministic selection and conversion helpers, trigonometric and logarithmic functions, and the documented operation, array, depth, elapsed-time, and output limits
XFDF annotation round trips
XFDF import and export use one shared mapping for Text, FreeText, Line, Square, Circle, Polygon, PolyLine, Highlight, Underline, StrikeOut, Squiggly, Stamp, Ink, Caret, FileAttachment, Sound, Redact, and Link annotations
Popup dictionaries remain children of their owning markup annotation, while Widget and RichMedia data use their dedicated form and media workflows