Вызов JasperReport из Java-приложения
1. Скачать библиотеку JasperReport для Java
Результат, который вы получите:
Извлечь zip файл который вы только скачали:
2. Скачать библиотеку управления Database
Если отчет должен быть соединен с базой данных вам нужно иметь библиотеки управления вида этой базы данных (JDBC Driver Library).
Можете посмотреть руководство скачивания JDBC Driver по ссылке:
3. Приготовить отчеты (Report)
Вам нужен файл отчета JasperReport. Мы запустим этот отчет из Java. Вы можете скачать пример файла отчета по ссылке:
Извлечь скачанный файл, у нас будет файл jrxml.
4. Создать project Java & объявить библиотеку
Создать обычный project Java.
- JavaCallJasperReportTutorial
Создать папку libs и скопировать самые нужные библиотеки в эту папку.
Включая:
Включая:
- commons-beanutils-*.jar
- commons-collections-*.jar
- commons-digester-*.jar
- commons-logging-*.jar
- groovy-all-*.jar
- itextpdf-*.jar
- itext-pdfa-*.jar
- jasperreports-*.jar
Далее скопировать библиотеки JDBC Driver в папку libs, здесь я копирую все 3 вида JDBC Driver управляющие базами данных Oracle, MySQL, SQLServer.
Чтобы объявить библиотеки с Project, нажмите правую мышь на Project и выбрать Properties
Выбрать все файлы jar в папке libs:
5. Создать файл PDF из JasperReport
Это простой пример, Java вызывает отчет JasperReport и создает файл PDF. В этом простом примере пока не участвует Database.
PdfFromXmlFile.java
package org.o7planning.tutorial.javajasperreport;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
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.JasperReport;
public class PdfFromXmlFile {
public static void main(String[] args) throws JRException, IOException {
// Compile jrxml file.
JasperReport jasperReport = JasperCompileManager
.compileReport("C:/jasperreport/StyledTextReport/StyledTextReport.jrxml");
// Parameters for report
Map<String, Object> parameters = new HashMap<String, Object>();
// DataSource
// This is simple example, no database.
// then using empty datasource.
JRDataSource dataSource = new JREmptyDataSource();
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
parameters, dataSource);
// Make sure the output directory exists.
File outDir = new File("C:/jasperoutput");
outDir.mkdirs();
// Export to PDF.
JasperExportManager.exportReportToPdfFile(jasperPrint,
"C:/jasperoutput/StyledTextReport.pdf");
System.out.println("Done!");
}
}
Результаты запуска примера:
6. Создать утилитарный class помогающий подключиться к некоторым видам Database
- Oracle
- MySQL
- SQLServer
OracleConnUtils.java
package org.o7planning.tutorial.javajasperreport.conn;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class OracleConnUtils {
public static Connection getOracleConnection()
throws ClassNotFoundException, SQLException {
String hostName = "localhost";
String sid = "db11g";
String userName = "learningsql";
String password = "12345";
return getOracleConnection(hostName, sid, userName, password);
}
public static Connection getOracleConnection(String hostName, String sid,
String userName, String password) throws ClassNotFoundException,
SQLException {
// Declare the class Driver for ORACLE DB
// This is necessary with Java 5 (or older)
// Java6 (or newer) automatically find the appropriate driver.
// If you use Java> 5, then this line is not needed.
Class.forName("oracle.jdbc.driver.OracleDriver");
// Example: jdbc:oracle:thin:@localhost:1521:db11g
String connectionURL = "jdbc:oracle:thin:@" + hostName + ":1521:" + sid;
Connection conn = DriverManager.getConnection(connectionURL, userName,
password);
return conn;
}
}
MySQLConnUtils.java
package org.o7planning.tutorial.javajasperreport.conn;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class MySQLConnUtils {
public static Connection getMySQLConnection()
throws ClassNotFoundException, SQLException {
String hostName = "localhost";
String dbName = "learningsql";
String userName = "root";
String password = "12345";
return getMySQLConnection(hostName, dbName, userName, password);
}
public static Connection getMySQLConnection(String hostName, String dbName,
String userName, String password) throws SQLException,
ClassNotFoundException {
// Declare the class Driver for MySQL DB
// This is necessary with Java 5 (or older)
// Java6 (or newer) automatically find the appropriate driver.
// If you use Java> 5, then this line is not needed.
Class.forName("com.mysql.jdbc.Driver");
// Cấu trúc URL Connection dành cho Oracle
// Ví dụ: jdbc:mysql://localhost:3306/simplehr
String connectionURL = "jdbc:mysql://" + hostName + ":3306/" + dbName;
Connection conn = DriverManager.getConnection(connectionURL, userName,
password);
return conn;
}
}
SQLServerConnUtils.java
package org.o7planning.tutorial.javajasperreport.conn;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class SQLServerConnUtils {
// Connect to SQLServer
// (Using JDBC Driver: SQLJDBC)
public static Connection getSQLServerConnection_SQLJDBC()
throws ClassNotFoundException, SQLException {
String hostName = "localhost";
String sqlInstanceName = "SQLEXPRESS";
String database = "learningsql";
String userName = "sa";
String password = "12345";
return getSQLServerConnection_SQLJDBC(hostName, sqlInstanceName,
database, userName, password);
}
// Connect to SQLServer & using JTDS library
public static Connection getSQLServerConnection_JTDS() throws SQLException,
ClassNotFoundException {
String hostName = "learningsql";
String sqlInstanceName = "SQLEXPRESS";
String database = "simplehr";
String userName = "sa";
String password = "12345";
return getSQLServerConnection_JTDS(hostName, sqlInstanceName, database,
userName, password);
}
// Connect to SQLServer
// (Using JDBC Driver: SQLJDBC)
private static Connection getSQLServerConnection_SQLJDBC(String hostName,
String sqlInstanceName, String database, String userName,
String password) throws ClassNotFoundException, SQLException {
// Declare the class Driver for SQLServer DB
// This is necessary with Java 5 (or older)
// Java6 (or newer) automatically find the appropriate driver.
// If you use Java> 5, then this line is not needed.
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// jdbc:sqlserver://ServerIp:1433/SQLEXPRESS;databaseName=simplehr
String connectionURL = "jdbc:sqlserver://" + hostName + ":1433"
+ ";instance=" + sqlInstanceName + ";databaseName=" + database;
Connection conn = DriverManager.getConnection(connectionURL, userName,
password);
return conn;
}
// Connect to SQLServer & using JTDS library
private static Connection getSQLServerConnection_JTDS(String hostName,
String sqlInstanceName, String database, String userName,
String password) throws ClassNotFoundException, SQLException {
// Declare the class Driver for SQLServer DB
// This is necessary with Java 5 (or older)
// Java6 (or newer) automatically find the appropriate driver.
// If you use Java> 5, then this line is not needed.
Class.forName("net.sourceforge.jtds.jdbc.Driver");
// jdbc:jtds:sqlserver://localhost:1433/simplehr;instance=SQLEXPRESS
String connectionURL = "jdbc:jtds:sqlserver://" + hostName + ":1433/"
+ database + ";instance=" + sqlInstanceName;
Connection conn = DriverManager.getConnection(connectionURL, userName,
password);
return conn;
}
}
ConnectionUtils.java
package org.o7planning.tutorial.javajasperreport.conn;
import java.sql.Connection;
import java.sql.SQLException;
public class ConnectionUtils {
public static Connection getConnection() throws SQLException,
ClassNotFoundException {
// Using Oracle
// You may be replaced by other Database.
return OracleConnUtils.getOracleConnection();
}
//
// Test Connection ...
//
public static void main(String[] args) throws SQLException,
ClassNotFoundException {
System.out.println("Get connection ... ");
// Get a Connection object
Connection conn = ConnectionUtils.getConnection();
System.out.println("Get connection " + conn);
System.out.println("Done!");
}
}
7. Передать Datasource и параметр в отчет
Пример далее будет сложнее предыдущего примера. Мы передадим параметры и информацию подключения в базу данных в отчет из Java.
JavaCallJasperReport.java
package org.o7planning.tutorial.javajasperreport;
import java.io.File;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.export.ExporterInput;
import net.sf.jasperreports.export.OutputStreamExporterOutput;
import net.sf.jasperreports.export.SimpleExporterInput;
import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput;
import net.sf.jasperreports.export.SimplePdfExporterConfiguration;
import org.o7planning.tutorial.javajasperreport.conn.ConnectionUtils;
public class JavaCallJasperReport {
public static void main(String[] args) throws JRException,
ClassNotFoundException, SQLException {
String reportSrcFile = "F:/ECLIPSE_TUTORIAL/JASPERREPORT/HelloJasperReport/FirstJasperReport.jrxml";
// First, compile jrxml file.
JasperReport jasperReport = JasperCompileManager.compileReport(reportSrcFile);
Connection conn = ConnectionUtils.getConnection();
// Parameters for report
Map<String, Object> parameters = new HashMap<String, Object>();
JasperPrint print = JasperFillManager.fillReport(jasperReport,
parameters, conn);
// Make sure the output directory exists.
File outDir = new File("C:/jasperoutput");
outDir.mkdirs();
// PDF Exportor.
JRPdfExporter exporter = new JRPdfExporter();
ExporterInput exporterInput = new SimpleExporterInput(print);
// ExporterInput
exporter.setExporterInput(exporterInput);
// ExporterOutput
OutputStreamExporterOutput exporterOutput = new SimpleOutputStreamExporterOutput(
"C:/jasperoutput/FirstJasperReport.pdf");
// Output
exporter.setExporterOutput(exporterOutput);
//
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
exporter.setConfiguration(configuration);
exporter.exportReport();
System.out.print("Done!");
}
}