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.

Kotlin·MIT-lisens·PDF/A-2a · PDF/UA

vedtak.hbsmal
<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>
Samme data, to former. Malen til venstre, det ferdige dokumentet til høyre. Verdiene i blått er de samme feltene, fylt inn. Fiktivt eksempel.

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.

  1. Steg 1

    Skriv malen

    En .hbs-fil med Handlebars og HTML under templates/ditt_lagnavn/. Feltene {{navn}} og {{dato}} er hull som fylles av dataene.

  2. 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.

  3. 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/genhtml med ENABLE_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

Dockerfile
FROM ghcr.io/navikt/pdfgen:<release>

COPY templates /app/templates
COPY fonts     /app/fonts
COPY resources /app/resources

2 · Mappestruktur

terminal
# grunnstruktur
mkdir {templates,fonts,resources,data}

# én mappe per lag/app
mkdir {templates,data}/ditt_lagnavn

Legg .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