Roadmap
The journey ahead
Feel free to reach out if you have any questions or suggestions. gopdfrab is a small, open-source project and I welcome contributions.
Pre-1.0 — the API is not frozen yet
The goal for 1.0 is the best PDF/A-1b verifier and converter available in Go, good enough that the API can be frozen. Until then anything may change between releases, so pin a version if you depend on current behaviour.
DoneIn progressPlanned
PDF/A-1b verification
158 checks across 10 groups. 204/204 on the Isartor suite and 569/569 on the veraPDF corpus, cross-checked against the veraPDF binary itself in CI rather than against filename expectations alone.
Selective check profiles & diagnostics API
Add or remove checks from the full profile, clause-accurate issue reporting, a stable JSON shape, and document helpers (IsPDFA, IsPDF, ClaimedConformance, PageCount, Version, Metadata, XMPMetadata).
Conversion to PDF/A
Pre-emptive fixups, then a verify/fix loop, with a raster last resort. Colour conversion, font embedding and metadata injection; anything unresolved is reported as a residual instead of being passed off as valid.
Encryption & damage recovery
Standard security handler decryption (RC4 40/128, AES-128, AES-256). A bad cross-reference offset re-locates the object, a missing startxref rebuilds the whole table — damage is reported as an issue, never a silent failure.
Object-model conformance
Generic ISO 32000 verification and conversion derived from the Arlington PDF Model, answering "is this even valid PDF" independent of any PDF/A level.
Fuzzing, hardening & benchmarks
Generated broken PDFs replayable from a seed, fuzz targets at three levels including semantic oracles for determinism, honesty and convergence, depth and size caps throughout, and a reproducible benchmark harness against veraPDF and PDFBox Preflight.
Command-line tool
A standalone gopdfrab binary for verification and conversion in CI pipelines — recursive directory walks, JSON output, and exit codes 0/1/2 for conformant, non-conformant and error.
The road to 1.0
Hardening PDF/A-1b until the API can be frozen: filling the last unimplemented catalogue entries, pushing package coverage to ~95%, and closing the remaining font-metric edge cases. The API is not stable until this lands.
PDF/A-2, -3 and -4
Extend the verifier to the newer PDF/A parts on the same clause-registry architecture. These come after 1.0, not before.