Skip to content

Commit

Permalink
Feature/accessibility (#54)
Browse files Browse the repository at this point in the history
* use accessibility

* attempt to run test workflow

* partially fix tests

* version: 2.0.0-rc1 for easier preliminary testing as a baseimage

* make tests be happy about every problematic UA-case

* target PDF/A-2a, hopefully

* update readme with some info about v2.0, remove some lint

Co-authored-by: Tor Idland <[email protected]>
  • Loading branch information
chinatsu and tidnav authored Sep 26, 2022
1 parent e4f10d1 commit b6197b2
Show file tree
Hide file tree
Showing 16 changed files with 57 additions and 35 deletions.
5 changes: 2 additions & 3 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
name: Run tests
on:
push:
branches:
- '*'
- '!master'
branches-ignore:
- master

jobs:
build:
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ FROM gcr.io/distroless/java17@sha256:2460346ea882bc4fb880363a4aa046c4567c4f095f8

WORKDIR /app

COPY build/libs/pdfgen-1.5.3-all.jar app.jar
COPY build/libs/pdfgen-2.0.0-rc1-all.jar app.jar
COPY fonts fonts
COPY templates templates
COPY resources resources
Expand Down
20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,26 @@ Find the newest version of gradle here: https://gradle.org/releases/ Then run th

```./gradlew wrapper --gradle-version $gradleVersjon```


## pdfgen 2.0 release candidate

`pdfgen` 2.0 targets a new PDF standard, [PDF/A-2a](https://en.wikipedia.org/wiki/PDF/A#PDF/A-2), as well as [PDF/UA](https://en.wikipedia.org/wiki/PDF/UA).
The primary goal is to produce PDFs that are not only valid for archival, but also valid according to Universal Accessibility standards.
This introduces a few "breaking" changes, although they are not enforced by pdfgen; it is still possible to produce PDFs that don't achieve "Universal Accessibility" as defined by PDF/UA.

There is a release candidate published, although none of the documentation exists to describe how to produce PDFs with proper UA for template writers as of yet.
As such, here be dragons!
A [licensed Adobe Acrobat DC](https://gist.github.com/karinaldw/1c4c321fe05bdc1e8996e00722d5317a#adobe-acrobat-dc-pdf) is one of the tools that can check the PDFs for proper UA, as well as [PAC 3](https://www.access-for-all.ch/en/pdf-accessibility-checker.html) (Windows only).

```dockerfile
# Dockerfile
FROM ghcr.io/navikt/pdfgen:2.0.0-rc1

COPY templates /app/templates # handlebars templates
COPY fonts /app/fonts # fonts to be embedded
COPY resources /app/resources # additional resources
```

## 👥 Contact

This project is currently maintained by the organisation [@navikt](https://github.com/navikt).
Expand Down
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

group = "no.nav.pdfgen"
version = "1.5.3"
version = "2.0.0-rc1"

val handlebarsVersion = "4.3.0"
val jacksonVersion = "2.13.3"
Expand Down
1 change: 0 additions & 1 deletion src/main/kotlin/no/nav/pdfgen/api/GeneratePdfApi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@ fun Routing.setupGeneratePdfApi(env: Environment, templates: TemplateMap) {
}
}
}

}

private fun hotTemplateData(applicationName: String, template: String): JsonNode {
Expand Down
5 changes: 3 additions & 2 deletions src/main/kotlin/no/nav/pdfgen/pdf/Create.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ fun createPDFA(html: String, env: Environment): ByteArray {
useFont({ ByteArrayInputStream(font.bytes) }, font.family, font.weight, font.style, font.subset)
}
}
.usePdfAConformance(PdfRendererBuilder.PdfAConformance.PDFA_2_U)
.usePdfAConformance(PdfRendererBuilder.PdfAConformance.PDFA_2_A)
.usePdfUaAccessbility(true)
.useColorProfile(env.colorProfile)
.useSVGDrawer(BatikSVGDrawer())
.withHtmlContent(html, null)
Expand Down Expand Up @@ -109,7 +110,7 @@ fun createPDFA(imageStream: InputStream, outputStream: OutputStream, env: Enviro
}
}

private fun verifyCompliance(input: ByteArray, flavour: PDFAFlavour = PDFAFlavour.PDFA_2_U): Boolean {
private fun verifyCompliance(input: ByteArray, flavour: PDFAFlavour = PDFAFlavour.PDFA_2_A): Boolean {
val pdf = ByteArrayInputStream(input)
val validator = Foundries.defaultInstance().createValidator(flavour, false)
val result = Foundries.defaultInstance().createParser(pdf).use { validator.validate(it) }
Expand Down
4 changes: 2 additions & 2 deletions src/test/resources/data/syfosoknader/annetarbeidsforhold.json
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,7 @@
"id": "30",
"tag": "IKKE_SOKT_UTENLANDSOPPHOLD_INFORMASJON",
"sporsmalstekst": null,
"undertekst": "<p>I utgangspunktet kan du bare få sykepenger mens du er i et land innenfor EØS. Du kan likevel <a target=\"_blank\" href=\"https://tjenester.nav.no/sykefravaer/sykepengesoknad-utland\">søke NAV om å få reise ut av EØS</a> og beholde sykepengene i en begrenset periode.</p>",
"undertekst": "<p>I utgangspunktet kan du bare få sykepenger mens du er i et land innenfor EØS. Du kan likevel <a target=\"_blank\" title=\"Åpner søknadsside om å beholde sykepenger utenfor EØS i et nytt vindu\" href=\"https://tjenester.nav.no/sykefravaer/sykepengesoknad-utland\">søke NAV om å få reise ut av EØS</a> og beholde sykepengene i en begrenset periode.</p>",
"svartype": "IKKE_RELEVANT",
"min": null,
"max": null,
Expand Down Expand Up @@ -465,7 +465,7 @@
"id": "32",
"tag": "VAER_KLAR_OVER_AT",
"sporsmalstekst": "Viktig å være klar over:",
"undertekst": "<ul><li>Du kan bare få sykepenger hvis det er din egen sykdom eller skade som hindrer deg i å jobbe. Sosiale eller økonomiske problemer gir ikke rett til sykepenger.</li><li>Du kan miste retten til sykepenger hvis du nekter å opplyse om din egen arbeidsevne, eller hvis du ikke tar imot behandling eller tilrettelegging.</li><li>Retten til sykepenger gjelder bare inntekt du har mottatt som lønn og betalt skatt av på sykmeldingstidspunktet.</li><li>NAV kan innhente opplysninger som er nødvendige for å behandle søknaden.</li><li>Du må melde fra til NAV hvis du satt i varetekt, sonet straff eller var under forvaring i sykmeldingsperioden.</li><li>Fristen for å søke sykepenger er som hovedregel 3 måneder</li></ul><p>Du kan lese mer om rettigheter og plikter på <a href=\"https://www.nav.no/sykepenger\" target=\"_blank\">nav.no/sykepenger</a>.</p>",
"undertekst": "<ul><li>Du kan bare få sykepenger hvis det er din egen sykdom eller skade som hindrer deg i å jobbe. Sosiale eller økonomiske problemer gir ikke rett til sykepenger.</li><li>Du kan miste retten til sykepenger hvis du nekter å opplyse om din egen arbeidsevne, eller hvis du ikke tar imot behandling eller tilrettelegging.</li><li>Retten til sykepenger gjelder bare inntekt du har mottatt som lønn og betalt skatt av på sykmeldingstidspunktet.</li><li>NAV kan innhente opplysninger som er nødvendige for å behandle søknaden.</li><li>Du må melde fra til NAV hvis du satt i varetekt, sonet straff eller var under forvaring i sykmeldingsperioden.</li><li>Fristen for å søke sykepenger er som hovedregel 3 måneder</li></ul><p>Du kan lese mer om rettigheter og plikter på <a title=\"Åpner infoside om sykepenger i nytt vindu\" href=\"https://www.nav.no/sykepenger\" target=\"_blank\">nav.no/sykepenger</a>.</p>",
"svartype": "IKKE_RELEVANT",
"min": null,
"max": null,
Expand Down
2 changes: 1 addition & 1 deletion src/test/resources/data/syfosoknader/arbeidsledig.json
Original file line number Diff line number Diff line change
Expand Up @@ -435,7 +435,7 @@
"id": "26",
"tag": "VAER_KLAR_OVER_AT",
"sporsmalstekst": "Viktig å være klar over:",
"undertekst": "<ul><li>Du kan bare få sykepenger hvis det er din egen sykdom eller skade som hindrer deg i å jobbe. Sosiale eller økonomiske problemer gir ikke rett til sykepenger.</li><li>Du kan miste retten til sykepenger hvis du nekter å opplyse om din egen arbeidsevne, eller hvis du ikke tar imot behandling eller tilrettelegging.</li><li>Retten til sykepenger gjelder bare inntekt du har mottatt som lønn og betalt skatt av på sykmeldingstidspunktet.</li><li>NAV kan innhente opplysninger som er nødvendige for å behandle søknaden.</li><li>Du må melde fra til NAV hvis du satt i varetekt, sonet straff eller var under forvaring i sykmeldingsperioden.</li><li>Fristen for å søke sykepenger er som hovedregel 3 måneder</li></ul><p>Du kan lese mer om rettigheter og plikter på <a href=\"https://www.nav.no/sykepenger\" target=\"_blank\">nav.no/sykepenger</a>.</p>",
"undertekst": "<ul><li>Du kan bare få sykepenger hvis det er din egen sykdom eller skade som hindrer deg i å jobbe. Sosiale eller økonomiske problemer gir ikke rett til sykepenger.</li><li>Du kan miste retten til sykepenger hvis du nekter å opplyse om din egen arbeidsevne, eller hvis du ikke tar imot behandling eller tilrettelegging.</li><li>Retten til sykepenger gjelder bare inntekt du har mottatt som lønn og betalt skatt av på sykmeldingstidspunktet.</li><li>NAV kan innhente opplysninger som er nødvendige for å behandle søknaden.</li><li>Du må melde fra til NAV hvis du satt i varetekt, sonet straff eller var under forvaring i sykmeldingsperioden.</li><li>Fristen for å søke sykepenger er som hovedregel 3 måneder</li></ul><p>Du kan lese mer om rettigheter og plikter på <a href=\"https://www.nav.no/sykepenger\" title=\"Åpner infoside om sykepenger i nytt vindu\" target=\"_blank\">nav.no/sykepenger</a>.</p>",
"svartype": "IKKE_RELEVANT",
"min": null,
"max": null,
Expand Down
2 changes: 1 addition & 1 deletion src/test/resources/data/syfosoknader/arbeidstakere.json
Original file line number Diff line number Diff line change
Expand Up @@ -631,7 +631,7 @@
"id": "308935",
"tag": "VAER_KLAR_OVER_AT",
"sporsmalstekst": "Viktig å være klar over:",
"undertekst": "<ul><li>Du kan bare få sykepenger hvis det er din egen sykdom eller skade som hindrer deg i å jobbe. Sosiale eller økonomiske problemer gir ikke rett til sykepenger.</li><li>Du kan miste retten til sykepenger hvis du nekter å opplyse om din egen arbeidsevne, eller hvis du ikke tar imot behandling eller tilrettelegging.</li><li>Retten til sykepenger gjelder bare inntekt du har mottatt som lønn og betalt skatt av på sykmeldingstidspunktet.</li><li>NAV kan innhente opplysninger som er nødvendige for å behandle søknaden.</li><li>Du må melde fra til NAV hvis du satt i varetekt, sonet straff eller var under forvaring i sykmeldingsperioden.</li><li>Fristen for å søke sykepenger er som hovedregel 3 måneder</li></ul><p>Du kan lese mer om rettigheter og plikter på <a href=\"https://www.nav.no/sykepenger\" target=\"_blank\">nav.no/sykepenger</a>.</p>",
"undertekst": "<ul><li>Du kan bare få sykepenger hvis det er din egen sykdom eller skade som hindrer deg i å jobbe. Sosiale eller økonomiske problemer gir ikke rett til sykepenger.</li><li>Du kan miste retten til sykepenger hvis du nekter å opplyse om din egen arbeidsevne, eller hvis du ikke tar imot behandling eller tilrettelegging.</li><li>Retten til sykepenger gjelder bare inntekt du har mottatt som lønn og betalt skatt av på sykmeldingstidspunktet.</li><li>NAV kan innhente opplysninger som er nødvendige for å behandle søknaden.</li><li>Du må melde fra til NAV hvis du satt i varetekt, sonet straff eller var under forvaring i sykmeldingsperioden.</li><li>Fristen for å søke sykepenger er som hovedregel 3 måneder</li></ul><p>Du kan lese mer om rettigheter og plikter på <a title=\"Åpner infoside om sykepenger i nytt vindu\" href=\"https://www.nav.no/sykepenger\" target=\"_blank\">nav.no/sykepenger</a>.</p>",
"svartype": "IKKE_RELEVANT",
"min": null,
"max": null,
Expand Down
2 changes: 1 addition & 1 deletion src/test/resources/data/syfosoknader/behandlingsdager.json
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@
"id": "50766",
"tag": "VAER_KLAR_OVER_AT",
"sporsmalstekst": "Viktig å være klar over:",
"undertekst": "<ul><li>Du kan bare få sykepenger hvis det er din egen sykdom eller skade som hindrer deg i å jobbe. Sosiale eller økonomiske problemer gir ikke rett til sykepenger.</li><li>Du kan miste retten til sykepenger hvis du nekter å opplyse om din egen arbeidsevne, eller hvis du ikke tar imot behandling eller tilrettelegging.</li><li>Retten til sykepenger gjelder bare inntekt du har mottatt som lønn og betalt skatt av på sykmeldingstidspunktet.</li><li>NAV kan innhente opplysninger som er nødvendige for å behandle søknaden.</li><li>Du må melde fra til NAV hvis du satt i varetekt, sonet straff eller var under forvaring i sykmeldingsperioden.</li><li>Fristen for å søke sykepenger er som hovedregel 3 måneder</li></ul><p>Du kan lese mer om rettigheter og plikter på <a href=\"https://www.nav.no/sykepenger\" target=\"_blank\">nav.no/sykepenger</a>.</p>",
"undertekst": "<ul><li>Du kan bare få sykepenger hvis det er din egen sykdom eller skade som hindrer deg i å jobbe. Sosiale eller økonomiske problemer gir ikke rett til sykepenger.</li><li>Du kan miste retten til sykepenger hvis du nekter å opplyse om din egen arbeidsevne, eller hvis du ikke tar imot behandling eller tilrettelegging.</li><li>Retten til sykepenger gjelder bare inntekt du har mottatt som lønn og betalt skatt av på sykmeldingstidspunktet.</li><li>NAV kan innhente opplysninger som er nødvendige for å behandle søknaden.</li><li>Du må melde fra til NAV hvis du satt i varetekt, sonet straff eller var under forvaring i sykmeldingsperioden.</li><li>Fristen for å søke sykepenger er som hovedregel 3 måneder</li></ul><p>Du kan lese mer om rettigheter og plikter på <a title=\"Åpner infoside om sykepenger i nytt vindu\" href=\"https://www.nav.no/sykepenger\" target=\"_blank\">nav.no/sykepenger</a>.</p>",
"svartype": "IKKE_RELEVANT",
"min": null,
"max": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@
"id": "308955",
"tag": "IKKE_SOKT_UTENLANDSOPPHOLD_INFORMASJON",
"sporsmalstekst": null,
"undertekst": "<p>I utgangspunktet kan du bare få sykepenger mens du er i Norge. Du kan likevel <a target=\"_blank\" href=\"https://www.nav.no/no/Person/Arbeid/Sykmeldt%2C+arbeidsavklaringspenger+og+yrkesskade/Sykepenger/sykepenger-ved-utenlandsopphold\">søke NAV om å få reise utenlands</a> og beholde sykepengene i en begrenset periode.",
"undertekst": "<p>I utgangspunktet kan du bare få sykepenger mens du er i Norge. Du kan likevel <a title=\"Åpner infoside om å beholde sykepenger utenfor Norge i et nytt vindu\" target=\"_blank\" href=\"https://www.nav.no/no/Person/Arbeid/Sykmeldt%2C+arbeidsavklaringspenger+og+yrkesskade/Sykepenger/sykepenger-ved-utenlandsopphold\">søke NAV om å få reise utenlands</a> og beholde sykepengene i en begrenset periode.",
"svartype": "IKKE_RELEVANT",
"min": null,
"max": null,
Expand Down Expand Up @@ -400,7 +400,7 @@
"id": "308960",
"tag": "VAER_KLAR_OVER_AT",
"sporsmalstekst": "Viktig å være klar over:",
"undertekst": "<ul><li>Du kan bare få sykepenger hvis det er din egen sykdom eller skade som hindrer deg i å jobbe. Sosiale eller økonomiske problemer gir ikke rett til sykepenger.</li><li>Du kan miste retten til sykepenger hvis du nekter å opplyse om din egen arbeidsevne, eller hvis du ikke tar imot behandling eller tilrettelegging.</li><li>Retten til sykepenger gjelder bare inntekt du har mottatt som lønn og betalt skatt av på sykmeldingstidspunktet.</li><li>NAV kan innhente opplysninger som er nødvendige for å behandle søknaden.</li><li>Du må melde fra til NAV hvis du satt i varetekt, sonet straff eller var under forvaring i sykmeldingsperioden.</li><li>Fristen for å søke sykepenger er som hovedregel 3 måneder</li></ul><p>Du kan lese mer om rettigheter og plikter på <a href=\"https://www.nav.no/sykepenger\" target=\"_blank\">nav.no/sykepenger</a>.</p>",
"undertekst": "<ul><li>Du kan bare få sykepenger hvis det er din egen sykdom eller skade som hindrer deg i å jobbe. Sosiale eller økonomiske problemer gir ikke rett til sykepenger.</li><li>Du kan miste retten til sykepenger hvis du nekter å opplyse om din egen arbeidsevne, eller hvis du ikke tar imot behandling eller tilrettelegging.</li><li>Retten til sykepenger gjelder bare inntekt du har mottatt som lønn og betalt skatt av på sykmeldingstidspunktet.</li><li>NAV kan innhente opplysninger som er nødvendige for å behandle søknaden.</li><li>Du må melde fra til NAV hvis du satt i varetekt, sonet straff eller var under forvaring i sykmeldingsperioden.</li><li>Fristen for å søke sykepenger er som hovedregel 3 måneder</li></ul><p>Du kan lese mer om rettigheter og plikter på <a title=\"Åpner infoside om sykepenger i nytt vindu\" href=\"https://www.nav.no/sykepenger\" target=\"_blank\">nav.no/sykepenger</a>.</p>",
"svartype": "IKKE_RELEVANT",
"min": null,
"max": null,
Expand Down
3 changes: 3 additions & 0 deletions src/test/resources/html/test_template_included_fonts.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
<html>
<head>
<title>Test template</title>
<meta name="subject" content="Dokumentemne"/>
<meta name="author" content="pdfgen"/>
<meta name="description" content="Test template"/>
<style>
h1 {
font-family: "Source Sans Pro" !important;
Expand Down
3 changes: 3 additions & 0 deletions templates/dsopkontroll/kontrollforespoersel.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
<head>
<meta charset="UTF-8" />
<title>Kontroll forespørsel</title>
<meta name="subject" content="Dokumentemne"/>
<meta name="author" content="pdfgen"/>
<meta name="description" content="Kontroll forespørsel"/>
<style>
* {
font-family: "Source Sans Pro" !important;
Expand Down
11 changes: 7 additions & 4 deletions templates/syfosoknader/partials/base.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,27 @@
<html>
<head>
<meta charset="UTF-8" />
<meta name="subject" content="{{> doctitle}}"/>
<meta name="author" content="pdfgen"/>
<meta name="description" content="{{> doctitle}}"/>
<title>{{> doctitle}}</title>
{{#block 'syfosoknader/partials/style' }}
{{/block}}
</head>
<body>
<div id="header">
<img class="navlogo" src="{{ image "Navlogo.png" }}"/>
<img class="navlogo" alt="Nav-logo" src="{{ image "Navlogo.png" }}"/>
<h1 class="title">{{> title}}</h1>
</div>
<div class="container">
<div class="personinfo">
<div class="persontekst">
<div class="persontekst__sidetopp">
<img class="personikon" src="{{ image "Personikon.png" }}"/>
<img class="personikon" alt="Personikon" src="{{ image "Personikon.png" }}"/>
<div class="persontekst__personalia">
<p class="navn">
<h2 class="navn">
{{ navn }}
</p>
</h2>
<p class="id">
{{ insert_at fnr 6 }}
</p>
Expand Down
10 changes: 5 additions & 5 deletions templates/syfosoknader/partials/spmpartial.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
{{#eq verdi "CHECKED"}}
<div class="oppsummering__sporsmalscontainer">
<div class="oppsummering__avkrysset">
<img class="checkbox" src="{{ image "Checkboks.png" }}"/>
<img class="checkbox" alt="Sjekkboks-ikon" src="{{ image "Checkboks.png" }}"/>
<span class="svar svar--checkbox">{{ sporsmalstekst }}</span>
</div>
{{# if undersporsmal }}
Expand All @@ -23,7 +23,7 @@
{{#eq verdi "CHECKED"}}
<div class="oppsummering__sporsmalscontainer">
<div class="oppsummering__avkrysset">
<img class="checkbox" src="{{ image "Checkboks.png" }}"/>
<img class="checkbox" alt="Sjekkboks-ikon" src="{{ image "Checkboks.png" }}"/>
<span class="svar svar--checkbox">{{ sporsmalstekst }}</span>
</div>
{{# if undersporsmal }}
Expand All @@ -43,7 +43,7 @@
{{#eq verdi "CHECKED"}}
<div class="oppsummering__sporsmalscontainer">
<div class="oppsummering__avkrysset">
<img class="checkbox" src="{{ image "Checkboks.png" }}"/>
<img class="checkbox" alt="Sjekkboks-ikon" src="{{ image "Checkboks.png" }}"/>
<span class="svar svar--checkbox">{{ iso_to_date sporsmalstekst }}</span>
</div>
{{# if undersporsmal }}
Expand Down Expand Up @@ -236,7 +236,7 @@
</p>
{{/if }}
<div class="oppsummering__avkrysset">
<img class="checkbox" src="{{ image "Checkboks.png" }}"/>
<img class="checkbox" alt="Sjekkboks-ikon" src="{{ image "Checkboks.png" }}"/>
<span class="svar svar--checkbox">
{{ capitalize svar.0.verdi }}
</span>
Expand Down Expand Up @@ -363,7 +363,7 @@
{{#eq verdi "CHECKED"}}
<div class="oppsummering__sporsmalscontainer">
<div class="oppsummering__avkrysset">
<img class="checkbox" src="{{ image "Checkboks.png" }}"/>
<img class="checkbox" alt="Sjekkboks-ikon" src="{{ image "Checkboks.png" }}"/>
<span class="svar svar--checkbox">{{ sporsmalstekst }}</span>
</div>
{{# if undersporsmal }}
Expand Down
Loading

0 comments on commit b6197b2

Please sign in to comment.