Introducing gopdfrab: PDF/A verification and conversion for Go
gopdfrab verifies PDF documents against PDF/A-1b and converts non-conforming ones. It ships as a Go library, a single static CLI binary and a WebAssembly build, with no CGo and nothing to install alongside it.
Why another PDF/A implementation
You could already validate PDF/A, but you could not do so from inside a Go program. The existing implementations are things you run rather than things you import, and that shapes everything downstream: a subprocess to manage, another tool's output to parse, a deployment that carries a runtime you would otherwise not need.
gopdfrab is pure Go with no CGo, so it cross-compiles anywhere Go does, WebAssembly included, with the API handing back typed errors.
What it does today
What it deliberately does not do
PDF/A-2, -3 and -4 are not implemented. They are on the roadmap, and until they land veraPDF is the tool for anything beyond PDF/A-1b. PDF/UA is a different standard again, and is not covered either.
gopdfrab also does not create PDFs. It reads, verifies and rewrites documents that already exist. Generate with a generation library, then verify the output. Check out other Go PDF libraries for that.
How it is tested
The Isartor suite and the veraPDF corpus both pass in full, in CI, next to a differential test against the veraPDF binary itself so a disagreement fails the build. On top of that sits generated broken input and three levels of fuzzing, written up in a separate post.
Status
Dual-licensed under the AGPL 3.0 or a commercial license. Start at the documentation, or try it on a document of your own in the browser validator.