JasperReports with Spring

1. Prehľad

JasperReports je knižnica prehľadov otvoreného zdroja, ktorá umožňuje používateľom vytvárať pixelovo dokonalé správy, ktoré je možné tlačiť alebo exportovať v mnohých formátoch vrátane PDF, HTML a XLS.

V tomto článku preskúmame jeho kľúčové funkcie a triedy a implementujeme príklady, aby sme predstavili jeho schopnosti.

2. Závislosť od Maven

Najprv musíme pridať jasperreports závislosť na našom pom.xml:

 net.sf.jasperreports jasperreports 6.4.0 

Najnovšiu verziu tohto artefaktu nájdete tu.

3. Šablóny správ

Návrhy správ sú definované v súboroch JRXML. Jedná sa o bežné súbory XML so zvláštnou štruktúrou, ktorú dokáže modul JasperReports interpretovať.

Poďme sa teraz pozrieť iba na relevantnú štruktúru súborov JRXML - aby sme lepšie pochopili Java časť procesu generovania správy, na ktorú sa primárne zameriavame.

Vytvorme jednoduchý prehľad s informáciami o zamestnancoch:

3.1. Zostavovanie správ

Súbory JRXML je potrebné kompilovať, aby ich prehľadový modul mohol vyplniť údajmi.

Vykonajme túto operáciu pomocou JasperCompilerManager trieda:

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

Aby sme sa vyhli zakaždému kompilácii, môžeme ju uložiť do súboru:

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

4. Populácia Správy

Najbežnejším spôsobom, ako vyplniť zostavené správy, sú záznamy z databázy. To si vyžaduje, aby zostava obsahovala dopyt SQL, ktorý motor vykoná, aby získal údaje.

Najskôr upravme náš prehľad tak, aby pridal dotaz SQL:

    ... 

Teraz vytvorme jednoduchý zdroj údajov:

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

Teraz môžeme vyplniť správu:

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

Všimnite si, že prechádzame nulový k druhému argumentu, pretože naša správa zatiaľ nedostáva žiadne parametre.

4.1. Parametre

Parametre sú užitočné na odovzdanie údajov do zostavy, ktoré nemôže nájsť vo svojom zdroji údajov, alebo keď sa údaje menia v závislosti od rôznych runtime podmienok.

Môžeme tiež zmeniť časti alebo dokonca celý dotaz SQL s parametrami prijatými v operácii vyplňovania správy.

Najskôr upravme prehľad tak, aby dostával tri parametre:

       // ... 

Teraz pridajme nadpis, aby sme zobrazili titul parameter:

 // ...           ... 

Ďalej upravme dotaz tak, aby používal min. plat a stav parametre:

VYBERTE * OD ZAMESTNÁVATEĽA KDE VÝPLATY> = $ P {minSalary} A $ P! {Condition}

Pri používaní súboru si všimnite rozdielnu syntax stav parameter. Toto informuje motor, že parameter by sa nemal používať štandardne Pripravené vyhlásenie parameter, ale akoby sa hodnota tohto parametra zapísala pôvodne do dotazu SQL.

Nakoniec si pripravíme parametre a vyplníme správu:

Parametre mapy = nový HashMap (); parameters.put ("title", "Report zamestnanca"); parameters.put ("minSalary", 15000.0); parameters.put ("condition", "LAST_NAME = 'Smith' OBJEDNÁVKA PRVÝM_NAME"); JasperPrint jasperPrint = JasperFillManager.fillReport (..., parametre, ...);

Upozorňujeme, že kľúče z parametre zodpovedajú názvom parametrov v správe. Ak motor zistí, že niektorý parameter chýba, získa hodnotu z defaultValueExpression parametra, ak existuje.

5. Export

Pri exportovaní správy najskôr vytvoríme inštanciu objektu triedy vývozcu, ktorý zodpovedá požadovanému formátu súboru.

Potom sme nastavili našu predchádzajúcu vyplnenú správu ako vstup a definovali, kam sa má výstupný súbor dostať.

Voliteľne môžeme nastaviť zodpovedajúce objekty zostavy a konfigurácie exportu, aby sme prispôsobili proces exportu.

5.1. PDF

Vývozca JRPdfExporter = nový JRPdfExporter (); exporter.setExporterInput (nový SimpleExporterInput (jasperPrint)); exporter.setExporterOutput (nový SimpleOutputStreamExporterOutput ("employeeReport.pdf")); SimplePdfReportConfiguration reportConfig = nový SimplePdfReportConfiguration (); reportConfig.setSizePageToContent (true); reportConfig.setForceLineBreakPolicy (false); SimplePdfExporterConfiguration exportConfig = nový SimplePdfExporterConfiguration (); exportConfig.setMetadataAuthor ("baeldung"); exportConfig.setEncrypted (true); exportConfig.setAllowedPermissionsHint ("TLAČ"); exporter.setConfiguration (reportConfig); exporter.setConfiguration (exportConfig); exporter.exportReport ();

5.2. XLS

Vývozca JRXlsxExporter = nový JRXlsxExporter (); // Nastaviť vstup a výstup ... SimpleXlsxReportConfiguration reportConfig = nový SimpleXlsxReportConfiguration (); reportConfig.setSheetNames (nový reťazec [] {"údaje o zamestnancovi}}); exporter.setConfiguration (reportConfig); exporter.exportReport ();

5.3. CSV

Vývozca JRCsvExporter = nový JRCsvExporter (); // Nastaviť vstup ... exporter.setExporterOutput (nový SimpleWriterExporterOutput ("employeeReport.csv")); exporter.exportReport ();

5.4. HTML

Vývozca HtmlExporter = nový HtmlExporter (); // Nastaviť vstup ... exporter.setExporterOutput (nový SimpleHtmlExporterOutput ("employeeReport.html")); exporter.exportReport ();

6. Podsprávy

Podsprávy nie sú ničím iným ako štandardným výkazom vloženým do iného výkazu.

Najskôr vytvorme správu, ktorá bude zobrazovať e-maily zamestnanca:

Poďme teraz upraviť náš prehľad zamestnancov tak, aby obsahoval ten predchádzajúci:

Všimnite si, že na podreport odkazujeme menom kompilovaného súboru a odovzdávame ho idEmployee a pripojenie aktuálnej správy ako parametre.

Ďalej zostavíme oba prehľady:

InputStream employeeReportStream = getClass (). GetResourceAsStream ("/ employeeReport.jrxml"); JasperReport jasperReport = JasperCompileManager.compileReport (employeeReportStream); JRSaver.saveObject (jasperReport, "employeeReport.jasper"); InputStream emailReportStream = getClass (). GetResourceAsStream ("/ employeeEmailReport.jrxml"); JRSaver.saveObject (JasperCompileManager.compileReport (emailReportStream), "employeeEmailReport.jasper");

Náš kód na vyplnenie a exportovanie prehľadu nevyžaduje úpravy.

7. Záver

V tomto článku sme sa krátko pozreli na základné funkcie knižnice JasperReports.

Dokázali sme zostaviť a vyplniť správy záznamami z databázy; odovzdali sme parametre na zmenu údajov zobrazených v prehľade podľa rôznych runtime podmienok, vložili sme podhlásenia a exportovali ich do najbežnejších formátov.

Kompletný zdrojový kód tohto článku nájdete na GitHub.