Jasper Rapporter med våren

1. Oversikt

JasperReports er et open source-rapporteringsbibliotek som gjør det mulig for brukere å lage perfekte pixelrapporter som kan skrives ut eller eksporteres i mange formater, inkludert PDF, HTML og XLS.

I denne artikkelen vil vi utforske de viktigste funksjonene og klassene, og implementere eksempler for å vise evnene.

2. Maven avhengighet

Først må vi legge til jasperapporter avhengighet til vår pom.xml:

 net.sf.jasperreports jasperrapporter 6.4.0 

Den siste versjonen av denne gjenstanden finner du her.

3. Rapportmaler

Rapporter er definert i JRXML-filer. Dette er vanlige XML-filer med en bestemt struktur som JasperReports-motoren kan tolke.

La oss nå se på bare den relevante strukturen til JRXML-filene - for å forstå Java-delen av rapportgenereringsprosessen bedre, som er vårt primære fokus.

La oss lage en enkel rapport for å vise informasjon om ansatte:

3.1. Kompilering av rapporter

JRXML-filer må kompileres slik at rapportmotoren kan fylle dem med data.

La oss utføre denne operasjonen ved hjelp av JasperCompilerManager klasse:

InputStream-medarbeiderReportStream = getClass (). GetResourceAsStream ("/ medarbeiderrapport.jrxml"); JasperReport jasperReport = JasperCompileManager.compileReport (employeeReportStream);

For å unngå å kompilere den hver gang, kan vi lagre den i en fil:

JRSaver.saveObject (jasperReport, "medarbeiderRapport.jasper");

4. Befolkning Rapporter

Den vanligste måten å fylle ut kompilerte rapporter er med poster fra en database. Dette krever at rapporten inneholder et SQL-spørsmål motoren vil utføre for å innhente dataene.

La oss først endre rapporten vår for å legge til et SQL-spørsmål:

    ... 

La oss nå lage en enkel datakilde:

@Bean public DataSource dataSource () {return new EmbeddedDatabaseBuilder () .setType (EmbeddedDatabaseType.HSQL) .addScript ("classpath: employee-schema.sql") .build (); }

Nå kan vi fylle ut rapporten:

JasperPrint jasperPrint = JasperFillManager.fillReport (jasperReport, null, dataSource.getConnection ());

Merk at vi passerer null til det andre argumentet siden rapporten vår ikke mottar noen parametere ennå.

4.1. Parametere

Parametere er nyttige for å overføre data til rapportmotoren som den ikke finner i datakilden eller når data endres avhengig av forskjellige kjøretidsforhold.

Vi kan også endre deler eller til og med hele SQL-spørringen med parametere mottatt i rapportfyllingsoperasjonen.

La oss først endre rapporten for å motta tre parametere:

       // ... 

La oss nå legge til en tittelseksjon for å vise tittel parameter:

 // ...           ... 

Deretter la oss endre spørringen for å bruke minSalary og tilstand parametere:

VELG * FRA MEDARBEIDER LØNN>> $ $ {minSalary} OG $ P! {Tilstand}

Legg merke til de forskjellige syntakene når du bruker tilstand parameter. Dette forteller motoren at parameteren ikke skal brukes som standard PreparedStatement parameter, men som om verdien til denne parameteren opprinnelig ville blitt skrevet i SQL-spørringen.

Til slutt, la oss forberede parametrene og fylle rapporten:

Kartparametere = nytt HashMap (); parameters.put ("title", "Employee Report"); parameters.put ("minSalary", 15000.0); parameters.put ("condition", "LAST_NAME = 'Smith' BESTILLING AV FIRST_NAME"); JasperPrint jasperPrint = JasperFillManager.fillReport (..., parametere, ...);

Merk at tastene til parametere samsvarer med parameternavn i rapporten. Hvis motoren oppdager at en parameter mangler, vil den få verdien fra defaultValueExpression av parameteren hvis noen.

5. Eksport

For å eksportere en rapport starter vi først et objekt fra en eksportørklasse som samsvarer med filformatet vi trenger.

Deretter setter vi vår forrige fylte rapport som input og definerer hvor den resulterende filen skal sendes.

Eventuelt kan vi angi tilsvarende rapport- og eksportkonfigurasjonsobjekter for å tilpasse eksportprosessen.

5.1. PDF

JRPdfExporter eksportør = ny JRPdfExporter (); exporter.setExporterInput (ny SimpleExporterInput (jasperPrint)); exporter.setExporterOutput (ny SimpleOutputStreamExporterOutput ("medarbeiderrapport.pdf")); SimplePdfReportConfiguration reportConfig = ny SimplePdfReportConfiguration (); reportConfig.setSizePageToContent (true); reportConfig.setForceLineBreakPolicy (false); SimplePdfExporterConfiguration exportConfig = ny SimplePdfExporterConfiguration (); exportConfig.setMetadataAuthor ("baeldung"); exportConfig.setEncrypted (true); exportConfig.setAllowedPermissionsHint ("UTSKRIFT"); exporter.setConfiguration (reportConfig); exporter.setConfiguration (exportConfig); eksportør.exportReport ();

5.2. XLS

JRXlsxExporter eksportør = ny JRXlsxExporter (); // Sett inn og ut ... SimpleXlsxReportConfiguration reportConfig = ny SimpleXlsxReportConfiguration (); reportConfig.setSheetNames (new String [] {"Employee Data"}); exporter.setConfiguration (reportConfig); eksportør.exportReport ();

5.3. CSV

JRCsvExporter eksportør = ny JRCsvExporter (); // Set input ... exporter.setExporterOutput (new SimpleWriterExporterOutput ("employeeReport.csv")); eksportør.exportReport ();

5.4. HTML

HtmlExporter eksportør = ny HtmlExporter (); // Set input ... exporter.setExporterOutput (new SimpleHtmlExporterOutput ("employeeReport.html")); eksportør.exportReport ();

6. Delrapporter

Delrapporter er ikke mer enn en standardrapport innebygd i en annen rapport.

La oss først lage en rapport som viser e-postene til en ansatt:

La oss nå endre vår ansattes rapport slik at den inkluderer den forrige:

Merk at vi refererer til underrapporten med navnet på den kompilerte filen og sender den til idMedarbeider og nåværende rapportforbindelse som parametere.

Deretter la oss sammenstille begge rapportene:

InputStream-medarbeiderReportStream = getClass (). GetResourceAsStream ("/ medarbeiderrapport.jrxml"); JasperReport jasperReport = JasperCompileManager.compileReport (employeeReportStream); JRSaver.saveObject (jasperReport, "medarbeiderRapport.jasper"); InputStream emailReportStream = getClass (). GetResourceAsStream ("/ medarbeiderEmailReport.jrxml"); JRSaver.saveObject (JasperCompileManager.compileReport (emailReportStream), "medarbeiderEmailReport.jasper");

Koden vår for å fylle og eksportere rapporten krever ikke endringer.

7. Konklusjon

I denne artikkelen tok vi en kort titt på kjernefunksjonene i JasperReports-biblioteket.

Vi klarte å samle og fylle ut rapporter med poster fra en database; vi passerte parametere for å endre dataene som vises i rapporten i henhold til forskjellige kjøretidsforhold, innebygde underrapporter og eksporterte dem til de vanligste formatene.

Komplett kildekode for denne artikkelen finner du på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found