javac -Xlint:unchecked -cp "lib/*" JasperReportCli.java
java -cp .:lib/* JasperReportCli input.json output.pdf template.jrxml
Code version 1
import java.io.*;
import java.util.*;
import java.nio.file.*;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.*;
public class JasperReportCli {
public static void main(String[] args) {
if (args.length < 3) {
System.out.println("Usage: java -cp .:lib/* JasperReportCli input.json output.pdf template.jrxml");
System.exit(1);
}
String jsonFilePath = args[0];
String pdfFilePath = args[1];
String templateFilePath = args[2];
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> jsonData = new Gson().fromJson(reader, new TypeToken<Map<String, Object>>() {}.getType());
// System.out.println("jsonData: " + jsonData);
// Access relevant data from the Map
String logo = (String) jsonData.get("logo");
String reportTitle = (String) jsonData.get("report_title");
String reportSubtitle = (String) jsonData.get("report_subtitle");
String dateGenerated = (String) jsonData.get("date_generated");
String companyName = (String) jsonData.get("company_name");
Map<String, Object> content = (Map<String, Object>) jsonData.get("content");
List<String> header = (List<String>) content.get("header");
List<Map<String, String>> reportContent = (List<Map<String, String>>) content.get("report_content");
// Create parameters for the report
Map<String, Object> parameters = new HashMap<>();
parameters.put("logo", logo);
parameters.put("report_title", reportTitle);
parameters.put("report_subtitle", reportSubtitle);
parameters.put("date_generated", dateGenerated);
parameters.put("company_name", companyName);
parameters.put("header", header);
parameters.put("report_content", reportContent);
// System.out.println("parameters: " + parameters);
// // Create CSV from data
// String csvFilePath = createCsvFromData(header, reportContent);
// // Create a JRDataSource from the CSV file
// JRCsvDataSource dataSource = new JRCsvDataSource(new File(csvFilePath));
// dataSource.setUseFirstRowAsHeader(true);
// Read the file using java.io.File
File jsonFile = new File(jsonFilePath);
// Convert JSON data to JsonDataSource
JsonDataSource dataSource = new JsonDataSource(jsonFile);
System.out.println("JsonDataSource: " + dataSource);
// Compile JasperReports template
InputStream templateStream = new FileInputStream(templateFilePath);
JasperReport jasperReport = JasperCompileManager.compileReport(templateStream);
// Fill the JasperReports template with data
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);
// Export the filled report to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, pdfFilePath);
System.out.println("PDF Report generated successfully at: " + pdfFilePath);
// close IO objects
reader.close();
inputStream.close();
} catch(FileNotFoundException e) {
e.printStackTrace();
System.out.println("JSON file not found");
System.exit(1);
} catch(IOException e) {
e.printStackTrace();
System.out.println("Filed to read JSON file");
System.exit(1);
} catch (JRException e) {
e.printStackTrace();
System.exit(1);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
public static String createCsvFromData(List<String> header, List<Map<String, String>> reportContent) throws IOException {
// Define the path for the CSV file
String csvFilePath = "report_table_content_tmp.csv";
// Create the CSV file
File csvFile = new File(csvFilePath);
try (PrintWriter writer = new PrintWriter(csvFile)) {
// Write header row
for (int i = 0; i < header.size(); i++) {
writer.print(header.get(i));
if (i < header.size() - 1) {
writer.print(",");
}
}
writer.println();
// Write report content rows
for (Map<String, String> row : reportContent) {
for (int i = 0; i < header.size(); i++) {
writer.print(row.get(header.get(i)));
if (i < header.size() - 1) {
writer.print(",");
}
}
writer.println();
}
}
return csvFilePath;
}
}
<?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="842" pageHeight="595" columnWidth="555" leftMargin="20"
rightMargin="20" topMargin="20" bottomMargin="20">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<style name="ngLine" forecolor="#003258" />
<style name="ngFont" forecolor="#003258" fontName="DejaVu Sans" />
<style name="table_TH" mode="Opaque" backcolor="#F0F8FF">
<box>
<pen lineColor="#000000" lineWidth="0.5"/>
</box>
</style>
<style name="table_CH" mode="Opaque" backcolor="#FFFFFF">
<box>
<bottomPen lineWidth="2.0" lineColor="#003258"/>
</box>
</style>
<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="company_name" class="java.lang.String" />
<field name="dataSource" class="net.sf.jasperreports.engine.data.JsonDataSource" />
<field name="header" class="java.util.List">
<fieldDescription><![CDATA[$F{dataSource}.selectNodes("$.content.header")]]></fieldDescription>
</field>
<title>
<band height="140" splitType="Stretch">
<image hAlign="Left" vAlign="Middle">
<reportElement x="20" y="2" width="100" height="81" backcolor="#FFFFFF"/>
<imageExpression><![CDATA["logo.png"]]></imageExpression>
</image>
<textField>
<reportElement style="ngFont" mode="Transparent" x="650" y="2" width="150" height="37"/>
<textElement textAlignment="Right" verticalAlignment="Middle">
<font size="20" isBold="true" />
</textElement>
<textFieldExpression><![CDATA[$F{report_title}]]></textFieldExpression>
</textField>
<textField>
<reportElement style="ngFont" x="650" y="35" width="150" height="23"/>
<textElement textAlignment="Right" verticalAlignment="Middle" />
<textFieldExpression><![CDATA[$F{report_subtitle}]]></textFieldExpression>
</textField>
<textField>
<reportElement style="ngFont" x="650" y="62" width="150" height="23"/>
<textElement textAlignment="Right" verticalAlignment="Middle" />
<textFieldExpression><![CDATA[$F{date_generated}]]></textFieldExpression>
</textField>
<line>
<reportElement style="ngLine" x="0" y="85" width="800" height="2"/>
</line>
</band>
</title>
<detail>
<band height="500" splitType="Stretch">
<!-- <componentElement>
<reportElement key="table" x="0" y="0" width="700" height="500" uuid="f7159b22-2721-4a17-a3df-d2c0dd42f857" isRemoveLineWhenBlank="true"/>
<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="table">
<dataSourceExpression><![CDATA[$P{header}]]></dataSourceExpression>
</datasetRun>
<jr:column width="650">
<jr:tableHeader>
<staticText>
<reportElement x="0" y="0" width="100" height="20"/>
<text><![CDATA[Column Header]]></text>
</staticText>
</jr:tableHeader>
<jr:detailCell>
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<textFieldExpression><![CDATA[$F{header}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
</jr:table>
</componentElement> -->
</band>
</detail>
<pageFooter>
<band height="37">
<line>
<reportElement style="ngLine" x="0" y="2" width="800" height="2"/>
</line>
<textField>
<reportElement style="ngFont" x="0" y="7" width="150" height="30"/>
<textElement textAlignment="Right" verticalAlignment="Top">
<font size="10" isBold="true" />
</textElement>
<textFieldExpression><![CDATA[$F{company_name}]]></textFieldExpression>
</textField>
<textField>
<reportElement style="ngFont" x="300" y="7" width="150" height="30"/>
<textElement textAlignment="Right" verticalAlignment="Top">
<font size="10" isBold="false" />
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA["CONFIDENTIAL"]]></textFieldExpression>
</textField>
</band>
</pageFooter>
</jasperReport>
{
"logo": "logo.png",
"report_title": "User List Report",
"report_subtitle": "Application User List",
"date_generated": "April 23, 2024",
"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 Inc"
}
Top comments (0)