Hvordan konfigurere generering av PDF
Aktivere ny PDF-generering
Fra og med versjon 7.5 av nuget-pakkene (Altinn.App.Api og Altinn.App.Core) er det lansert en ny måte å generere PDF-er på. Denne nye måten kan skrus av og på ved å legge til følgende seksjon og innstilling i appsettings.json.
"FeatureManagement": {
"NewPdfGeneration": true
}
Dette vil sørge for at den nye PDF-tjenesten kalles. Denne aksepterer en URL som peker tilbake til en automatisk generert side i appen. Siden bygges opp og danner grunnlaget for PDF-en. Grensesnittet IPdfFormatter
som dokumentert nedenfor er fortsatt relevant hvis du trenger spesiallogikk for å skjule komponenter/sider fra PDF-en.
Det er to ulike måter å konfigurere PDF-genereringen på:
Det er også mulig å se en forhåndsvisning av hvordan PDF-en kommer til å se ut i nettleseren imens du jobber med den (kun v7.5+).
Automatisk konfigurasjon
Denne metoden brukes som standard dersom du ikke har spesifisert en egendefinert PDF-side. Denne metoden trekker ut alle sidene og komponentene i den rekkefølgen de vises, og tar de med i PDF-dokumentet.
Ekskludering av sider og komponenter
Som regel har man behov for å ekskludere visse sider og komponenter som ikke er relevant for PDF-dokumentet. Dette kan konfigureres på to ulike måter:
- Ved å modifisere
Settings.json
-filen for layout-settet. - Programmatisk ved å implementere det i kode. Dette åpner for dynamisk ekskludering basert på skjemadataen.
Avhengig av hvilken versjon du kjører setter man opp den programmatiske metoden litt forskjellig, men logikken er helt lik. Oversikten under viser hvordan det settes opp for versjonen du kjører:
- Opprett en klasse som implementerer
IPdfFormatter
-grensesnittet som ligger iAltinn.App.Core.Features
-navnerommet.
Du kan navngi og plassere filene i den mappestrukturen du selv ønsker i prosjektet ditt. Men vi anbefaler at du benytter meningsfulle navnerom som i et hvilket som helst annet .Net-prosjekt. - Registrér din implementering i Program.cs-klassen.Dette sørger for at din kode er kjent for applikasjonen og at koden blir kjørt når den skal.
services.AddTransient<IPdfFormatter, PdfFormatter>();
PdfHandler.cs
-filen under App/logic/Print
-mappen.Egendefinert konfigurasjon
Denne metoden lar deg spesifisere en helt egendefinert PDF ved å definere en layout-fil som bestemmer hva den skal inneholde.
For å ta i bruk denne metoden må du opprette en ny layout-fil for PDF-en og sette pdfLayoutName
i Settings.json
til å peke til den filen:
{
"$schema": "https://altinncdn.no/toolkits/altinn-app-frontend/4/schemas/json/layout/layoutSettings.schema.v1.json",
"pages": {
"order": ["side1"],
"pdfLayoutName": "minPdfLayout"
}
}
Denne layout-filen konfigureres på akkurat samme måte som andre layout-filer, bortsett fra at ikke alle komponenttyper er tilgjengelig. Komponenttypene som kan brukes i en PDF-layout er følgende:
Summary
Group
InstanceInformation
Header
Paragraph
Image
Panel
Forhåndsvisning i nettleseren
Det er mulig å se en forhåndsvisning av hvordan den genererte PDF-en kommer til å se ut i nettleseren imens du jobber. Følg instruksjonene nedenfor:
- Viktig: Bruk Google Chrome til å forhåndsvise PDF.
PDF-generatoren bruker en variant av Chrome til å generere PDF-en, så andre nettlesere vil ikke produsere et korrekt resultat ved forhåndsvisning. - Kjør opp appen din lokalt eller åpne appen din i testmiljøet, og start en instans.
- Åpne utviklerverktøyet ved å trykke på knappen nederst i høyre hjørne, eller bruk hurtigtasten
Ctrl+Shift+K
/⌘+Shift+K
. - Trykk på
Forhåndsvis PDF
-knappen i utviklerverktøyet.
Innstillinger
Selv om standardinnstillingene for den nye tjenesten skal være nok for de fleste applikasjoner, kan de overstyres ved å legge til en PdfGeneratorSettings-seksjon i appsettings.json (standardinnstillinger vises under).
"PdfGeneratorSettings": {
"ServiceEndpointUri": "https://{org}.apps.{hostName}/{appId}/#/instance/{instanceId}",
"AppPdfPageUriTemplate": "https://{org}.apps.{hostName}/{appId}/#/instance/{instanceId}?pdf=1",
"WaitForSelector": "#readyForPrint",
"WaitForTime": 5000
}
Hvis WaitForSelector er satt så blir WaitForTime ignorert. WaitForSelector sikrer at siden er ferdig oppbygd og presentert før PDF-en genereres.