PDF/A Compliance for Go

Verify and convert PDF documents with a small, predictable API.
gopdfrab gopher
main.go
doc, _ := pdfrab.Open("input.pdf")
defer doc.Close()

ok, _ := doc.IsPDFA()
if ok {
	fmt.Println("PDF/A-1b compliant")
	return
}

result, _ := doc.Convert(pdfrab.PDFA_1B)
os.WriteFile("converted.pdf", result.Output, 0o644)

204/204

Isartor Test Suite

569/569

veraPDF Test Suite

0

External Dependencies

Features

Processing you can trust

Standards compliant, composable, blazingly fast.
Full PDF/A-1b coverage
PDF to PDF/A-1b conversion
Customizable verification and conversion profiles
PDF/A-clause-accurate diagnostics
Pure Go, zero runtime deps
Delightfully simple API
Benchmarks

Faster by design

Go 1.26 vs OpenJDK 21

Validation throughput

docs / sec · higher is better
gopdfrab1,830
PDFBox Preflight143
veraPDF112

Documents fully verified per second.

Cold start time

ms · lower is better
gopdfrab5
PDFBox Preflight371
veraPDF1,221

Time from process start to first result.

Peak memory usage

MB · lower is better
gopdfrab62
PDFBox Preflight793
veraPDF764

Max RSS

Deployment footprint

MB · lower is better
gopdfrab5
PDFBox Preflight12
veraPDF15

Static go binary vs. JVM runtime plus jars.

Figures are modelled on validating the veraPDF and Isartor PDF/A-1b corpuses on a single machine. Treat numbers as directional, results may vary.
API

A small, predictable API

Open, run, verify, convert.
verify.go
v, _ := doc.Verify(pdfrab.PDFA_1B)

if v.Valid {
	fmt.Println("Document is PDF/A-1b compliant")
} else {
	fmt.Println("Issues:")
	for i, issue := range v.Issues {
		fmt.Printf("#%v: %v\n", i+1, issue)
	}
}

Runs anywhere Go runs

  • Concurrency-friendly
    Verify documents in parallel across goroutines.
  • Edge-ready
    Sub-10ms cold starts make gopdfrab a fit for serverless and edge runtimes.
terminal
go get github.com/voidrab/gopdfrab

Verify your first PDF/A document

Read the docs or go straight to the source.