Jasper izvještava s proljećem

1. Pregled

JasperReports je biblioteka za izvještavanje otvorenog koda koja omogućuje korisnicima stvaranje pikselnih izvješća koja se mogu ispisati ili izvesti u mnogim formatima, uključujući PDF, HTML i XLS.

U ovom ćemo članku istražiti njegove ključne značajke i klase te primijeniti primjere kako bismo prikazali njegove mogućnosti.

2. Ovisnost Mavena

Prvo, moramo dodati jasperreports ovisnost o našoj pom.xml:

 net.sf.jasperreports jasperreports 6.4.0 

Najnoviju verziju ovog artefakta možete pronaći ovdje.

3. Predlošci izvješća

Dizajn izvješća definiran je u JRXML datotekama. To su obične XML datoteke s određenom strukturom koje mehanizam JasperReports može protumačiti.

Pogledajmo sada samo relevantnu strukturu JRXML datoteka - da bismo bolje razumjeli Java dio procesa generiranja izvještaja, koji je naš primarni fokus.

Stvorimo jednostavno izvješće za prikaz podataka o zaposlenicima:

3.1. Sastavljanje izvješća

JRXML datoteke trebaju se sastaviti kako bi ih mehanizam za izvještaje mogao ispuniti podacima.

Izvedimo ovu operaciju uz pomoć JasperCompilerManager razred:

InputStream workerReportStream = getClass (). GetResourceAsStream ("/ workerReport.jrxml"); JasperReport jasperReport = JasperCompileManager.compileReport (workerReportStream);

Da bismo ga izbjegli svaki put, možemo ga spremiti u datoteku:

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

4. Stanovništvo Izvještaji

Najčešći način popunjavanja sastavljenih izvješća je zapisima iz baze podataka. To zahtijeva da izvješće sadrži SQL upit koji će motor izvršiti za dobivanje podataka.

Prvo izmijenimo naše izvješće kako bismo dodali SQL upit:

    ... 

Sada, kreirajmo jednostavan izvor podataka:

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

Sada možemo popuniti izvještaj:

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

Imajte na umu da prolazimo null drugom argumentu jer naše izvješće još ne prima nikakve parametre.

4.1. Parametri

Parametri su korisni za prosljeđivanje podataka mehanizmu izvješća koje ne može pronaći u svom izvoru podataka ili kada se podaci mijenjaju ovisno o različitim uvjetima izvođenja.

Također možemo promijeniti dijelove ili čak cijeli SQL upit s parametrima primljenim u operaciji popunjavanja izvješća.

Prvo izmijenimo izvješće tako da prima tri parametra:

       // ... 

Sad, dodajte naslovni odjeljak da se prikaže titula parametar:

 // ...           ... 

Dalje, promijenimo upit da bismo koristili minPlaća i stanje parametri:

ODABERITE * OD ZAPOSLENIKA GDJE PLATA> = $ P {minPlata} I $ P! {Uvjet}

Obratite pažnju na različitu sintaksu kada koristite stanje parametar. To govori motoru da se parametar ne smije koristiti kao standard PreparedStatement parametar, ali kao da bi vrijednost tog parametra bila izvorno zapisana u SQL upitu.

Na kraju, pripremimo parametre i popunimo izvješće:

Parametri karte = novi HashMap (); parameters.put ("naslov", "Izvještaj zaposlenika"); parameters.put ("minPlaća", 15000,0); parameters.put ("condition", "LAST_NAME = 'Smith' NARUČI PO FIRST_NAME"); JasperPrint jasperPrint = JasperFillManager.fillReport (..., parametri, ...);

Imajte na umu da tipke parametri odgovaraju nazivima parametara u izvješću. Ako motor otkrije da parametar nedostaje, vrijednost će dobiti od defaultValueExpression parametra ako postoji.

5. Izvoz

Za izvoz izvješća prvo instanciramo objekt klase izvoznika koji odgovara formatu datoteke koji nam treba.

Zatim postavljamo prethodno prethodno ispunjeno izvješće kao ulaz i definiramo gdje izlaziti rezultirajuću datoteku.

Po želji možemo postaviti odgovarajuće konfiguracijske objekte izvješća i izvoza kako bismo prilagodili postupak izvoza.

5.1. PDF

JRPdfExporter izvoznik = novi JRPdfExporter (); exporter.setExporterInput (novi SimpleExporterInput (jasperPrint)); exporter.setExporterOutput (novi SimpleOutputStreamExporterOutput ("workerReport.pdf")); SimplePdfReportConfiguration reportConfig = novo SimplePdfReportConfiguration (); reportConfig.setSizePageToContent (true); reportConfig.setForceLineBreakPolicy (netačno); SimplePdfExporterConfiguration exportConfig = novo SimplePdfExporterConfiguration (); exportConfig.setMetadataAuthor ("baeldung"); exportConfig.setEncrypted (true); exportConfig.setAllowedPermissionsHint ("PRINTING"); exporter.setConfiguration (reportConfig); exporter.setConfiguration (exportConfig); exporter.exportReport ();

5.2. XLS

JRXlsxExporter izvoznik = novi JRXlsxExporter (); // Postavljanje ulaza i izlaza ... SimpleXlsxReportConfiguration reportConfig = novi SimpleXlsxReportConfiguration (); reportConfig.setSheetNames (novi String [] {"Podaci o zaposleniku"}); exporter.setConfiguration (reportConfig); exporter.exportReport ();

5.3. CSV

JRCsvExporter izvoznik = novi JRCsvExporter (); // Postavljanje unosa ... exporter.setExporterOutput (novi SimpleWriterExporterOutput ("workerReport.csv")); exporter.exportReport ();

5.4. HTML

HtmlExporter izvoznik = novi HtmlExporter (); // Postavljanje unosa ... exporter.setExporterOutput (novi SimpleHtmlExporterOutput ("workerReport.html")); exporter.exportReport ();

6. Podizvještaji

Podizvješća nisu ništa drugo nego standardno izvješće ugrađeno u drugo izvješće.

Prvo izradimo izvješće koje će prikazati e-poštu zaposlenika:

Sada, izmijenimo naše izvješće o zaposlenicima tako da uključuje prethodno:

Imajte na umu da podreport upućujemo na ime kompilirane datoteke i prosljeđujemo ga idZaposlenik i trenutna veza izvješća kao parametri.

Dalje, sastavimo oba izvješća:

InputStream workerReportStream = getClass (). GetResourceAsStream ("/ workerReport.jrxml"); JasperReport jasperReport = JasperCompileManager.compileReport (workerReportStream); JRSaver.saveObject (jasperReport, "workerReport.jasper"); InputStream emailReportStream = getClass (). GetResourceAsStream ("/ workerEmailReport.jrxml"); JRSaver.saveObject (JasperCompileManager.compileReport (emailReportStream), "workerEmailReport.jasper");

Naš kod za popunjavanje i izvoz izvješća ne zahtijeva izmjene.

7. Zaključak

U ovom smo članku kratko pregledali osnovne značajke knjižnice JasperReports.

Uspjeli smo sastaviti i popuniti izvješća zapisima iz baze podataka; proslijedili smo parametre za promjenu podataka prikazanih u izvješću u skladu s različitim uvjetima izvođenja, ugradili podizvještaje i izvezli ih u najčešće formate.

Kompletni izvorni kod za ovaj članak možete pronaći na GitHubu.