Compatibility
What TruPDF reads, writes, and renders without loss.
Document formats
| Format | Render | Edit (Phase 5+) | Save back |
|---|---|---|---|
| PDF 1.4 – 2.0 | ✅ | ✅ | ✅ |
| Encrypted PDF | ✅ | ✅ (after unlock) | ✅ |
| Linearized PDF | ✅ | ✅ | ✅ |
| PDF/A-1, A-2, A-3 | ✅ | ✅ | ⚠ (validation not enforced post-save) |
| Signed PDF | ✅ (badge + verify) | append-only | ✅ (incremental update) |
| 3D PDF (U3D / PRC) | poster only | — | — |
Non-PDF inputs route through the TruPDF conversion engine:
| Format | Route |
|---|---|
| Office — DOC(X/M), XLS(X/M/B), PPT(X/M), ODT/ODS/ODP, RTF, Pages/Numbers/Keynote, CSV/TSV, Visio, Publisher, EPUB | Office pipeline |
| HTML, XHTML, HTM | HTML render pipeline |
| Images — PNG, APNG, JPG/JPEG, GIF, BMP, SVG, WebP, AVIF, ICO | Image pipeline |
| Extended raster — TIFF, HEIC, camera raw | Raster pipeline |
| Text & code — TXT, Markdown/MDX, JSON, XML, YAML, TOML, source code (JS/TS, Python, Java, Go, Rust, SQL, …) | Text pipeline |
| Email — EML, MSG | Email pipeline |
| XPS, OXPS | XPS pipeline |
| XOD (legacy WebViewer XOD archives) | XOD pipeline |
| 2D CAD — DXF, DWG (R12–R2018, incl. CTB plot styles), DWF, DWFx, DGN | the TruCAD engine (TruenoTech's clean-room CAD engine, deployed as a sidecar) |
RVT / RFA (3D BIM) is not supported — uploads are rejected with a typed, actionable error. Without the conversion service, the viewer handles PDF plus browser-native image formats client-side.
Annotations (XFDF)
TruPDF round-trips XFDF with Acrobat-spec conformance. Saved annotations render identically in Acrobat, Chrome, Firefox, Edge, and Apple Preview.
Supported types:
- Text markup — highlight, underline, strikethrough, squiggly, caret.
- Free text — sticky note, freetext, callout, typewriter.
- Shapes — rectangle, ellipse, polygon, polyline, line, arrow,
arc, cloud (with
/BEcloud border). - Ink / handwritten — ink, pencil, freehand-highlight, handwritten-signature.
- Stamps — rubber-stamp (Approved / Draft / Urgent / …), image- stamp, date-stamp.
- File / media — file-attachment (icon: Graph / Paperclip / PushPin / Tag), sound.
- Measurement — distance, perimeter, area, rectangle-area, ellipse-area, arc-measurement, count. Calibration units preserved.
- Redaction —
redaction-mark(Phase 8 burn-pending). - Other — link, image, watermark, reply (threading via
inReplyTo). - Form widgets — signature-field, form-text, form-checkbox, form-radio, form-combobox, form-listbox, form-signature.
Common fields preserved: id, page, rect, color, fillColor,
strokeWidth, dashArray, opacity, author, contents (rich
text), createdAt, modifiedAt, locked, hidden, noPrint,
subject, status, inReplyTo, customData.
XFDF + AcroForm round-trip is a CI gate. Failing cases live in
packages/annotations/src/__tests__/XFDFRoundTrip.test.ts.
Forms
| Type | Read | Write | Notes |
|---|---|---|---|
| AcroForm text | ✅ | ✅ | Single + multi-line, regex pattern |
| AcroForm checkbox | ✅ | ✅ | |
| AcroForm radio | ✅ | ✅ | Mutually exclusive groups |
| AcroForm choice | ✅ | ✅ | Combo + listbox |
| AcroForm pushbutton | ✅ | ✅ | Action triggers |
| AcroForm signature | ✅ | ✅ | See Signatures |
| Static XFA | ✅ | ✅ (after unlockStaticXFA) | XFA datasets serialized on save |
| Dynamic XFA | ⚠ best-effort render | — | Reject dynamic-flow markers |
| FDF data | ✅ | ✅ | Legacy systems |
| XFDF data | ✅ | ✅ | Preferred wire format |
Sandboxed JS calculation engine recognises a small set of named
built-ins (AFSimple_Calculate, AFRange_Validate). No eval, no
new Function. Unknown scripts emit a ValidationIssue and never
execute.
Digital signatures
- Sign — PKCS#7 detached, via the signing pipeline.
- Algorithms — RSA-2048 / 4096, ECDSA P-256 / P-384 / P-521.
- Hashes — SHA-256 / SHA-384 / SHA-512 (with RSA-PSS padding).
- Verify — byte-range integrity, chain validation against host- supplied trust anchors, optional OCSP / CRL fetchers, time-stamp token recognition, LTV flagging.
- Multi-signature — append without invalidating prior signatures (incremental updates).
3D
3D annotations (U3D / PRC, detected via the embedded 3D stream)
render a poster preview via @trupdf/threed. Interactive 3D
manipulation is out of scope; the license feature id is threed.
Browser matrix
| Browser | Standard mode | Secure mode | Notes |
|---|---|---|---|
| Chrome 110+ | ✅ | ✅ | Recommended |
| Edge 110+ | ✅ | ✅ | Chromium engine |
| Firefox 110+ | ✅ | ✅ | |
| Safari 16+ | ✅ | ✅ | iPadOS supported |
| Mobile Safari | ✅ | ✅ | Touch + Apple Pencil |
| Android Chrome | ✅ | ✅ | S Pen via PointerEvents |
The render worker is bundled as an ES module inside the package — no globals, no separate hosting.
Mobile / stylus
- Pinch zoom, two-finger rotate, swipe, long-press.
- Apple Pencil via PointerEvents (pressure, tilt, twist).
- Wacom tablets via PointerEvents.
- S Pen via PointerEvents.
- Palm rejection on, configurable pressure curves (soft / linear / firm).
- Coalesced pointer events for low-latency ink rendering.
Accessibility
- WCAG 2.2 AA target.
- Keyboard navigation through all controls.
- Live region announcements for page change, annotation updates, form validation, tool activation.
- Screen-reader friendly text layer in standard mode; structural reading order in secure mode.
- Focus trap in modals, focus restoration on close.
- Skip links, visible focus indicators.
Internationalization
- 31 locales out of the box (English source).
- RTL support for Arabic, Hebrew, Farsi.
- Locale switched at runtime via
changeLanguage(). - Missing keys fall back to English.
- Hosts can register custom translations or override strings.
What's intentionally out of scope
- Interactive 3D (U3D / PRC) — poster image only.
- Video playback inside PDFs.
- AcroForm scripting beyond the recognised built-ins (security).
- Dynamic XFA write-back (read + best-effort render only).
- RVT / RFA (3D BIM) — rejected with a typed, actionable error; 2D CAD (DXF, DWG, DWF, DWFx, DGN) is supported via the TruCAD engine.