Fra Nav · Bygd for gjenbruk
pdfgen
HTML-mal inn. Ferdig dokument ut.
pdfgen tar en Handlebars-mal og litt JSON-data og gir deg en arkivgyldig PDF tilbake over HTTP. Samme oppskrift bak brev, vedtak og kvitteringer — i produksjon i Nav siden 2018.
Nav peker nye prosjekter mot etterfølgeren pdfgenrs (Rust, med Typst-maler). pdfgen driftes og brukes fortsatt.
<h1>Vedtak om {{ytelse}}</h1>
<p>Til {{navn}}</p>
<p>Sak {{saksnr}}</p>
<p>Vi har innvilget
søknaden din om
{{ytelse}}, datert
{{dato}}.</p>Vedtak
Vedtak om foreldrepenger
Til Kari Nordmann
Sak 4711/2026
Vi har innvilget søknaden din om foreldrepenger, datert 14. juli 2026.
Med vennlig hilsen
Saksbehandlende enhet
Slik virker det
pdfgen er én liten Kotlin-tjeneste (Ktor) som lastes med malene dine og svarer på HTTP. Du eier malene og dataene — pdfgen står for forvandlingen.
Steg 1
Skriv malen
En
.hbs-fil med Handlebars og HTML undertemplates/ditt_lagnavn/. Feltene{{navn}}og{{dato}}er hull som fylles av dataene.Steg 2
Send JSON-data
Dataene kobles til malen over HTTP. Under utvikling leser pdfgen testdata fra
data/<app>/<mal>.json, så du ser resultatet i nettleseren mens du jobber.Steg 3
Få PDF-en tilbake
GET /api/v1/genpdf/<app>/<mal>gir en ferdig PDF. Trenger du HTML i stedet, slår du på/api/v1/genhtmlmedENABLE_HTML_ENDPOINT=true.
Bygd for arkivet — og for lesbarhet
Et offentlig dokument skal kunne arkiveres i årevis og leses av alle. pdfgen sikter mot standardene som gjør nettopp det, og har gjort det i produksjon lenge.
- Siden 2018
- pdfgen har generert dokumenter i Nav siden 2018 — brev, vedtak og kvitteringer bygget på det samme mønsteret.
- PDF/A-2a
- Målet er PDF-er som er gyldige for langtidsarkivering, ikke bare for øyeblikket de lages i.
- PDF/UA
- Universell utforming er et uttalt mål: dokumenter som også er tilgjengelige, ikke bare arkivgyldige.
- VeraPDF-validering
- Standardene sjekkes med VeraPDF, og fonter bakes inn i dokumentet så det ser likt ut overalt.
Kom i gang
pdfgen brukes oftest som et basisbilde: du legger malene, fontene og ressursene dine oppå. Alt du trenger er Docker.
1 · Dockerfile
FROM ghcr.io/navikt/pdfgen:<release>
COPY templates /app/templates
COPY fonts /app/fonts
COPY resources /app/resources2 · Mappestruktur
# grunnstruktur
mkdir {templates,fonts,resources,data}
# én mappe per lag/app
mkdir {templates,data}/ditt_lagnavnLegg .hbs-malene i templates/ditt_lagnavn/ og tilhørende testdata i data/ditt_lagnavn/. Navnet blir en del av API-stien.
Ta den i bruk i din virksomhet
pdfgen er ikke bundet til Nav. Mønsteret — mal pluss data pluss en liten tjeneste — passer enhver virksomhet som må lage mange like dokumenter.
Det du trenger
- Docker til å kjøre basisbildet fra
ghcr.io/navikt/pdfgen - Handlebars-maler og JSON-data for dokumentene dine
- Fontene du vil bake inn, om standardoppsettet ikke holder
Det du bør vite
MIT-lisensiert og fritt å bruke. Vi lover ingen support-SLA, men issues og pull requests er velkomne.
Vær oppmerksom: pdfgen har fått en etterfølger skrevet i Rust — pdfgenrs — som Nav peker nye prosjekter mot. Ideen er den samme (mal + JSON inn, PDF ut), men malspråket er Typst i stedet for Handlebars. Starter du på nytt i dag, se på begge; pdfgen er den med åtte års produksjonshistorie.
Klar for enhver norsk etat