Validate and convert PDF to PDF/A
Drop in a PDF to see whether it is valid PDF/A-1b and exactly which clauses it breaks. One click fixes what can be fixed. Your file never leaves your device.
- 1Check
- 2Fix
- 3Download
The tool runs entirely in your browser using WebAssembly, so the file you choose is never uploaded anywhere. It needs JavaScript enabled. You can run the same 159 checks and the converter offline with the command-line tool.
How it works
Runs in your browser
Most online PDF/A tools ask you to hand over the document. This one doesn't need to.
Nothing is transmitted
gopdfrab is compiled to WebAssembly and executes in a Web Worker on this page. Your PDF is read from disk into memory in your own browser. No request carries it anywhere, because there is no endpoint to carry it to.
159 checks, not a guess
The same engine as the Go library and the CLI, covering ISO 19005-1 clauses 6.1 to 6.9 — structure, colour, images, transparency, fonts, annotations, actions, metadata and forms — plus generic ISO 32000 object-model conformance.
Fixes you can see
Failures are grouped by area, and each names the clause it violates and the page it sits on. After fixing, every one is marked fixed or remaining, and the result is re-verified before you download it.
What fixing does
Six things that stop a PDF being PDF/A
Conversion is iterative: gopdfrab fixes what it can, re-verifies, and repeats until the document converges or nothing further can be resolved.
Fonts are embedded
PDF/A requires every glyph a document draws to come from a font embedded in the file itself. Referenced-but-absent fonts are the single most common reason a PDF fails validation.
Colour is made device-independent
RGB and CMYK are only allowed when the file declares the target colour space. A conforming ICC profile is added if one is missing.
Transparency is removed
PDF/A-1 forbids transparency groups and soft masks entirely — they were introduced after PDF 1.4's archival subset was fixed.
Encryption is stripped
An archival document has to remain readable without a key, so PDF/A does not permit encryption of any kind. Encrypted input can still be read if you supply the password.
Active content is dropped
JavaScript, launch actions and embedded files are not permitted in PDF/A-1: an archived document must not be able to execute anything or depend on external payloads.
Metadata is rewritten
A conforming XMP packet and the PDF/A identifier are written, and the XMP is reconciled with the document information dictionary so the two cannot disagree.
Coverage
What gets checked
gopdfrab organises its 159 checks into 11 groups. Each maps onto a clause range of ISO 19005-1 (PDF/A), or to the generic object model beneath it.
| Group | Specification area |
|---|---|
| File structure | 6.1.x — file header, trailer, xref, object framing, limits |
| Colour | 6.2.2 OutputIntent, 6.2.3.x device colours, 6.2.9–10 |
| Images and XObjects | 6.2.4-6.2.7 image/form/PostScript XObjects |
| Transparency | 6.2.8 transfer functions, 6.4 soft masks/blend modes/alpha |
| Fonts | 6.3.x embedding, subsets, metrics, encoding |
| Annotations | 6.5.x annotation types and dictionaries |
| Actions | 6.6.x action types and additional actions |
| Metadata | 6.7.x XMP metadata, extension schemas, PDF/A identifier |
| Logical structure | 6.8 tagged PDF structure hierarchy and marked content |
| Interactive forms | 6.9 interactive forms |
| Object model | Generic ISO 32000 object-model conformance, independent of PDF/A |
Reference
What the failures mean
Every issue the tool reports has a clause behind it, a cause, and something you can do about it.
Font not embedded
Why "font not embedded" fails PDF/A-1b, what causes it, and how to fix it by embedding the font program or converting the document.
Glyph not in font
A character used on the page has no glyph in the embedded font subset. Why that fails PDF/A-1b and how to fix the subset.
Missing OutputIntent
PDF/A requires an OutputIntent with an embedded ICC profile when device-dependent colour is used. What that means and how to add one.
Device colour without OutputIntent
Using DeviceRGB, DeviceCMYK or DeviceGray in PDF/A-1b requires a matching OutputIntent. What the check means and the two ways out.
FAQ
Frequently asked questions
Need this in your own code?
The browser tool is the same engine as the Go library and the CLI. Verify in a goroutine, convert whole directories from a shell, or gate a CI pipeline on it — validation alone builds to a 4.3 MB static binary with no runtime dependencies.