Jasper Report Gist

RMAG news

Compile the Java code

javac -Xlint:unchecked -cp “lib/*” JasperReportCli.java

Run the Java code

java -cp .:lib/* JasperReportCli input.json output.pdf template.jrxml

Code version 1

import java.io.IOException;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JsonDataSource;

public class JasperReportCli {

public static void main(String[] args) {
if (args.length < 3) {
System.out.println(“Usage: java JasperReportCli input.json output.pdf template.jrxml”);
System.exit(1);
}

String jsonFilePath = args[0];
String pdfFilePath = args[1];
String templateFilePath = args[2];

System.out.println(“jsonFilePath: “ + jsonFilePath);
System.out.println(“pdfFilePath: “ + pdfFilePath);
System.out.println(“templateFilePath: “ + templateFilePath);

generateReport(jsonFilePath, pdfFilePath, templateFilePath);
}

public static void generateReport(String jsonFilePath, String pdfFilePath, String templateFilePath) {
try {
// Read the JSON file from the file system
InputStream inputStream = new FileInputStream(jsonFilePath);
Reader reader = new InputStreamReader(inputStream);

// Convert JSON data to Map
Map<String, Object> parameters = new Gson().fromJson(reader, new TypeToken<Map<String, Object>>() {}.getType());

System.out.println(“parameters: “ + parameters);

// Access report content
List<Map<String, Object>> reportData = (List<Map<String, Object>>) ((Map<String, Object>) parameters.get(“content”)).get(“report_content”);

System.out.println(“reportData: “ + reportData);

System.out.println(“inputStream: “ + inputStream);

// Convert JSON data to JsonDataSource
JsonDataSource dataSource = new JsonDataSource(inputStream);

System.out.println(“JsonDataSource: “+ dataSource);

// Compile JasperReports template
JasperCompileManager.compileReportToFile(templateFilePath);

// Fill the JasperReports template with data
JasperPrint jasperPrint = JasperFillManager.fillReport(templateFilePath, parameters, dataSource);

// Export the filled report to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, pdfFilePath);

System.out.println(“PDF Report generated successfully at: “ + pdfFilePath);

reader.close();
} catch(IOException e) {
e.printStackTrace();
System.exit(1);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}

Code version 2

import java.io.IOException;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JsonQLQueryExecuterFactory;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;

public class JasperReportCliv2 {

public static void main(String[] args) {
if (args.length < 3) {
System.out.println(“Usage: java JasperReportCli input.json output.pdf template.jrxml”);
System.exit(1);
}

String jsonFilePath = args[0];
String pdfFilePath = args[1];
String templateFilePath = args[2];

System.out.println(“jsonFilePath: “ + jsonFilePath);
System.out.println(“pdfFilePath: “ + pdfFilePath);
System.out.println(“templateFilePath: “ + templateFilePath);

generateReport(jsonFilePath, pdfFilePath, templateFilePath);
}

public static void generateReport(String jsonFilePath, String pdfFilePath, String templateFilePath) {
try {
// Read the JSON file from the file system
InputStream inputStream = new FileInputStream(jsonFilePath);

// Convert JSON data to Map
Reader reader = new InputStreamReader(inputStream);
Map<String, Object> parameters = new HashMap<>();
parameters.put(JsonQLQueryExecuterFactory.JSON_INPUT_STREAM, reader);

// Compile JasperReports template
JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromFile(templateFilePath);

// Fill the JasperReports template with data
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters);

// Export the filled report to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, pdfFilePath);

System.out.println(“PDF Report generated successfully at: “ + pdfFilePath);

reader.close();
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}

Template

<?xml version=”1.0″ encoding=”UTF-8″?>
<jasperReport xmlns=“http://jasperreports.sourceforge.net/jasperreports” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=“http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd” name=“ReportTemplate” pageWidth=“595” pageHeight=“842” columnWidth=“555” leftMargin=“20” rightMargin=“20” topMargin=“20” bottomMargin=“20” uuid=“0768ee19-df1c-41b1-aa36-91072e1144b2”>
<property name=“com.jaspersoft.studio.data.defaultdataadapter” value=“One Empty Record”/>
<style name=“Table_TH” mode=“Opaque” backcolor=“#F0F8FF”/>
<style name=“Table_TD” mode=“Opaque” backcolor=“#FFFFFF”/>
<queryString language=“json”>
<![CDATA[]]>
</queryString>
<field name=“logo” class=“java.lang.String”/>
<field name=“report_title” class=“java.lang.String”/>
<field name=“report_subtitle” class=“java.lang.String”/>
<field name=“date_generated” class=“java.lang.String”/>
<field name=“header1” class=“java.lang.String”/>
<field name=“header2” class=“java.lang.String”/>
<field name=“header3” class=“java.lang.String”/>
<field name=“header4” class=“java.lang.String”/>
<field name=“company_name” class=“java.lang.String”/>
<detail>
<band height=“250” splitType=“Stretch”>
<textField>
<reportElement x=“120” y=“10” width=“415” height=“20” uuid=“db2e77ab-7bcf-4e95-897f-7b379100225e”/>
<textFieldExpression><![CDATA[$F{report_title}]]></textFieldExpression>
</textField>
<textField>
<reportElement x=“120” y=“30” width=“415” height=“20” uuid=“240cb9a1-2b2b-46d1-b4f7-5a8d07a51e46”/>
<textFieldExpression><![CDATA[$F{report_subtitle}]]></textFieldExpression>
</textField>
<textField>
<reportElement x=“120” y=“50” width=“415” height=“20” uuid=“a279af90-6ed5-4583-9d6a-05d12794b7df”/>
<textFieldExpression><![CDATA[$F{date_generated}]]></textFieldExpression>
</textField>
<!– Table Section –>
<componentElement>
<reportElement x=“0” y=“80” width=“555” height=“20” uuid=“f7159b22-2721-4a17-a3df-d2c0dd42f857”/>
<jr:table xmlns:jr=“http://jasperreports.sourceforge.net/jasperreports/components” xsi:schemaLocation=“http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd”>
<datasetRun subDataset=“dataset1”>
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource(“content.report_content”)]]></dataSourceExpression>
</datasetRun>
<!– Dynamic columns –>
<jr:column width=“100” forEach=“content.header”>
<jr:tableHeader style=“Table_TH”/>
<jr:detailCell style=“Table_TD”>
<textField>
<reportElement style=“Table_TD” x=“0” y=“0” width=“100” height=“20”/>
<textFieldExpression><![CDATA[$F{REPORT_COUNT} == 1 ? $F{header} : “”]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
</jr:table>
</componentElement>

<textField>
<reportElement x=“10” y=“220” width=“250” height=“20” uuid=“95bdeee4-1673-4b28-8644-62d178d1d6c2”/>
<textFieldExpression><![CDATA[$F{company_name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x=“300” y=“220” width=“250” height=“20” uuid=“cd873be7-9928-4862-b3b5-cb9eb181edf0”/>
<textFieldExpression><![CDATA[“Page ” + String.valueOf($V{PAGE_NUMBER})]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>

Sample JSON data

{
“logo”: “logo.png”,
“report_title”: “User List Report”,
“report_subtitle”: “Generated on April 23, 2024”,
“date_generated”: “From 2024-04-01 to 2024-04-23”,
“content”: {
“header”: [
“User ID”,
“Username”,
“Email”,
“Created Date”
],
“report_content”: [
{
“User ID”: “1”,
“Username”: “john.doe”,
“Email”: “john.doe@example.com”,
“Created Date”: “2024-03-15”
},
{
“User ID”: “2”,
“Username”: “jane.smith”,
“Email”: “jane.smith@example.com”,
“Created Date”: “2024-04-10”
},
{
“User ID”: “3”,
“Username”: “admin”,
“Email”: “admin@example.com”,
“Created Date”: “2024-02-01”
},
{
“User ID”: “4”,
“Username”: “happy_coder12”,
“Email”: “happy_coder12@example.com”,
“Created Date”: “2023-11-21”
},
{
“User ID”: “5”,
“Username”: “bookworm_87”,
“Email”: “bookworm_87@example.com”,
“Created Date”: “2024-02-05”
},
{
“User ID”: “6”,
“Username”: “traveling_cat”,
“Email”: “traveling_cat@example.com”,
“Created Date”: “2024-03-29”
},
{
“User ID”: “7”,
“Username”: “music_lover45”,
“Email”: “music_lover45@example.com”,
“Created Date”: “2023-09-10”
},
{
“User ID”: “8”,
“Username”: “coding_enthusiast”,
“Email”: “coding_enthusiast@example.com”,
“Created Date”: “2024-04-15”
},
{
“User ID”: “9”,
“Username”: “green_thumb77”,
“Email”: “green_thumb77@example.com”,
“Created Date”: “2024-01-31”
},
{
“User ID”: “10”,
“Username”: “cloud_dreamer99”,
“Email”: “cloud_dreamer99@example.com”,
“Created Date”: “2023-12-25”
},
{
“User ID”: “11”,
“Username”: “baking_wizard”,
“Email”: “baking_wizard@example.com”,
“Created Date”: “2024-04-08”
},
{
“User ID”: “12”,
“Username”: “data_diver”,
“Email”: “data_diver@example.com”,
“Created Date”: “2024-03-04”
},
{
“User ID”: “13”,
“Username”: “design_thinker”,
“Email”: “design_thinker@example.com”,
“Created Date”: “2023-10-22”
},
{
“User ID”: “14”,
“Username”: “history_buff21”,
“Email”: “history_buff21@example.com”,
“Created Date”: “2024-02-12”
},
{
“User ID”: “30”,
“Username”: “user30”,
“Email”: “user30@example.com”,
“Created Date”: “2024-04-20”
}
]
},
“company_name”: “xyz”
}

Dependence Graph

Dependence Graph
——————-
jasperreports-6.4.0.jar
|— commons-collections4-4.4.jar
|— commons-collections-3.2.1.jar
|— commons-beanutils-1.9.4.jar
|— commons-logging-1.2.jar
| |— log4j-api.2.17.2.jar
| |— log4j-core.2.17.2.jar
|— commons-digester-2.1.jar
|— commons-codec-1.15.jar
|— poi-3.10.1.jar
| |— log4j-api.2.17.2.jar
| |— log4j-core.2.17.2.jar
|— itext-2.1.7.js2.jar
| |— bcpkix-jdk15on-1.64.jar
| |— bcprov-jdk15on-1.64.jar
|— jfreechart-1.0.19.jar
|— jcommon-1.0.23.jar
|— gson-2.8.9.jar
|— jackson-core-2.13.3.jar
|— jackson-databind-2.13.3.jar
|— jackson-annotations-2.13.3.jar
|— jasper-compiler-5.5.23.jar
|— jasperreports-fonts-6.0.0.jar
|— jasper-runtimes-5.5.23.jar

Leave a Reply

Your email address will not be published. Required fields are marked *