package sos.stacks.jasperreports;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.MediaSizeName;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.engine.export.JRRtfExporter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import net.sf.jasperreports.engine.util.JRLoader;
import sos.connection.SOSConnection;
import sos.connection.SOSConnectionFileProcessor;
import sos.documentfactory.DocumentFactoryClass;
import sos.net.SOSMailOrder;
import sos.settings.SOSConnectionSettings;
import sos.spooler.Order;
import sos.spooler.Variable_set;
import sos.spooler.Web_service_request;
import sos.spooler.Web_service_response;
import sos.spooler.Xslt_stylesheet;
import sos.util.SOSClassUtil;
import sos.util.SOSDate;
import sos.util.SOSPlainTextProcessor;
import sos.util.SOSSchedulerLogger;
import sos.util.SOSString;
import sos.xml.SOSXMLXPath;
/**
* Klasse JobSchedulerJasperReportJob
*
* <br>Der Job erzeugt aus einer Report-Konfiguration mit JasperReports einen Bericht,
* (siehe http://jasperreports.sourceforge.net)
* <br>
* <br>
* <br>Eine Report-Konfiguration legen Sie i.d.R. mit einem visuellen Report-Editor an,
* z.B. mit iReport (siehe http://ireport.sourceforge.net).
* <br>
* <br>
* <br>Es kann wahlweise die Datenbankverbindung des Job Schedulers oder eine separat angebbare
* <br>Datenbankverbindung für die Abfrage der Berichtsdaten verwendet werden.
* <br>
* <br>
* <br>Die Berichtsdaten können auch mittels Parameter generiert werden. Alle Jobparameter werden den JasperReport als
* Parameter zum Weiterverarbeiten weitergegeben.
* <br>
* <br>
* <br>Der Job unterstützt die Ausgabe in die Berichtsformate PDF, HTML, RTF, XML und XLS.
* <br>
* <br>Alle Generierten Reports können als emails versendet werden.
* <br>
* <br>Generieren von Reports mit JasperReport:
* <br>
* <br>Über die Jobparameter bzw. Orderparameter können folgende Parametern übergeben werden:
* <br> - Name der Jasper Vorlage. Die jasper-Vorlage mit Pfadangabe angeben.
* <br> <b>parameter:</b> name="<i>report_filename</i>" value="<i>jasperreports/config/dod/dod.jasper</i>"
* <br>
* <br> - Ausgabeverzeichnis
* <br> <b>parameter:</b> name="<i>output_filename</i>" value="<i>jasperreports/reports/dod_intervall.pdf"
* <br>
* <br> - Das Report wird hier zweimal erzeugt. Einmal in html und einmal in pdf
* <br> <b>parameter:</b> name="<i>output_type</i>" value="<i>html;pdf</i>"
* <br>
* <br> - Titel des Reports (gilt nur für dod-reports)
* <br> <b>parameter:</b> name="<i>title</i>" value="<i>DOD Yearly Order Report: ETH Zuerich</i>"
* <br>
* <br> - Verzeichnis der Sub Reports, falls Unterformulare vorhanden ist. Bitte schließende Slash nicht vergessen
* <br> <b>parameter:</b> name="<i>SUBREPORT_DIR</i>" value="<i>/home/test/scheduler.jasper/jasperreports/config/dod/dod_sub_report/</i>"
* <br>
* <br> - Konfigurationsdatei der Datenbankverbindung. Ist kein "settings_filename" angegeben, dann wird der Connection des schedulers übergeben
* <br> <b>parameter:</b> name="<i>settings_filename</i>" value="<i>/home/test/scheduler.jasper/config/sos_settings_dod.ini</i>"
* <br>
* <br> - Der Parameter benennt den Pfad und Namen einer Eingabedatei mit SQL-Statements.
* <br> Wird dem Parameter ein Dateiname zugewiesen, dann wird die in dieser Datei enthaltene Abfrage für den Report verwendet
* <br> anstelle der in der Berichtskonfiguration enthaltenen Abfrage, siehe Parameterreport_filename.
* <br> <b>parameter:</b> name="<i>query_filename</i>" value="<i>dod.sql</i>"
* <br>
* <br> - Der Parameter gibt eine SQL-Dateiname an. Ist dem Parameter eine Dateiname zugewiesen,
* <br> dann wird die Abfrage ausgeführt und das Resultat der Abfrage mit den Datenbankverbindungen
* <br> den JasperReports als Parameter übergeben.
* <br> Die Resultat der Abfrage sind freier Parametern, der zur weitergabe an den JasperReports
* <br> Parameter verwendet wird. In DOD-Report werden z.B. dated_from und dated_to als
* <br> Parameter gebraucht, die aus der SQL-Statements selektiert werden
* <br> <b>parameter:</b> name="<i>parameter_query_filename</i>" value="<i>dod_report_year.sql</i>"
* <br>
* <br>
* <br> -die Parameter dated_from und dated_to direkt übergeben z.B.
* <br> Die Parameter ist ein freier Parameter, der zur weitergabe an den JasperReports Parameter
* <br> verwendet wird. Es handelt sich um die Titel des Reports und wird in DOD-Reports verwendet.
* <br> <b>parameter:</b> name="<i>dated_from</i>" value="<i>2000-01-01</i>"
* <br> <b>parameter:</b> name="<i>dated_to</i>" value="<i>2007-01-01</i>"
* <br>
* <br> - Ist ein Druckername angegeben, dann wird das Dokument gedruckt.
* <br> <b>parameter:</b> name="<i>printer_name</i>" value=""
* <br>
* <br> - Anzahl zu druckenden Exemplarer
* <br> <b>parameter:</b> name="<i>printer_copies" value =""
* <br>
* <br> - Sprache der Reports festlegen
* <br> <b>parameter:</b> name="<i>report_locale" value ="de oder en"
* <br>
* <br>
* <br>- Parameter zur Mailversenden
* <br>mail_it funktion. Ist eine mail_it Parameter angegeben bzw auf true gesetzt, dann wird mit
* <br>der Scheduler Mail Funktion emails versendet. Es wird überprüft, ob zusätzlich
* <br>die Parameter "mail_to", "mail_cc", "mail_bcc", "mail_subject" und "mail_body" angegeben
* <br>sind. Wenn ja, dann werden zu diesen Adressanten mit den Betreff und body emails versendet.
* <br>Wenn diese Parametern nicht existieren, dann werden die Empfänger aus den Einstellungen
* <br>des Schedulers (factory.ini) genommen.
* <br>Ist der Jobparameter mail_it nicht vorhanden bzw. als false gesetzt, dann wird der email mit
* <br>Hilfe der Klasse SOSMailOrder versendet.
* <br>Die Voraussetzung zum email versenden mit der Klasse SOSMailOrder ist
* <br> 1. Datenbankverbindung ( hier ist die Datenbankverbindung des Schedulers oder die Datengemeint)
* <br> 2. das Existieren der Tabelle "SETTINGS"
* <br> 3. Einträge zum email versenden in der Tabelle "SETTINGS"
* <br> Die Empfänger und der Subject und Body werden aus der Jobparameter ausgelesen.
* <br>
* <br><b>parameter:</b> name="<i>mail_it</i>" value="true/false"
*
* <br>-Geben Sie hier eine oder mehrere eMail Adressen an, die den Report erhalten. Mehrere eMail Adressen werden durch Komma getrennt.
* <br>Ist diese Einstellung leer, dann werden Reports nicht per eMail versendet.
* <br><b>parameter:</b> name="<i>mail_to</i>" value=""
*
* <br>-Geben Sie hier eine oder mehrere eMail Adressen an, die den Report als carbon copy erhalten.
* Mehrere eMail Adressen werden durch Komma getrennt.
* <br><b>parameter:</b> name="<i>mail_cc</i>" value=""
*
* <br>-Geben Sie hier eine oder mehrere eMail Adressen an, die den Report als blind carbon copy erhalten. Mehrere eMail Adressen werden durch Komma getrennt.
* <br><b>parameter:</b> name="<i>mail_bcc</i>" value=""
*
* <br>-Der Inhalt des Parameters wird als Betreff der eMail des Reports verwendet und muss ausgefüllt sein, wenn Reports per eMail versendet werden.
* <br>Mit diesem Parameter kann das Layout des Reports im HTML-Format oder als plain text angegeben werden. Zur Bestimmen des Layout Typs wird dem Parameter folgender Prefix zugeordnet:
* <br> - factory:
* <br> - factory_file:
* <br> - plain:
* <br> - plain_file:
* <br>Es können folgende Platzhalter verwendet werden, die durch [ und] geklammert werden, z.B. in der Form [date]:
* <br> - [date] - aktuelles Datum
* <br> - [datetime] - aktuelles Datum und Uhrzeit
* <br> - [orderid] - ID des Auftrags
* <br> - [jobname] - Name des Jobs
* <br> - [taskid] - ID der Task
* <br><b>parameter:</b> name="<i>mail_subject</i>" value="<i>JasperReports: Report Delivery</i>"
* <br>
* <br>-Mit diesem Parameter kann das Layout des Reports im HTML-Format oder als plain text angegeben werden. Zur Bestimmen des Layout Typs wird dem Parameter folgender Prefix zugeordnet:
* <br> - factory:
* <br> - factory_file:
* <br> - plain:
* <br> - plain_file:
* <br>
* <br>Innerhalb des Layouts können folgende Platzhalter verwendet werden, die jeweils mit [ und ] geklammert werden, z.B. in der Form [date]:
* <br> - [date] - aktuelles Datum
* <br> - [datetime] - aktuelles Datum und Uhrzeit
* <br> - [orderid] - ID des Auftrags
* <br> - [jobname] - Name des Jobs
* <br> - [taskid] - ID der Task
* <br> - [sql] - SQL-Query, aus der der Report erstellt wurde
* <br> - [xml] - aus dem Ergebnis der Abfrage generiertes xml vor der Transformation
* <br><b>parameter:</b> name="<i>mail_body</i>" value=""
* <br>
* <br>
* <br>@author andreas.pueschel@sos-berlin.com; mueruevet.oeksuez@sos-berlin.com
* <br>@version 1.0
* <br>@resource sos.scheduler.jar, sos.spooler.jar, sos.stacks.jar, sos.util.jar,
* sos.xml.jar, sos.connection.jar, jasperreports-1.2.3.jar, poi-2.0-final-20040126.jar,
* itext-1.3.1.jar, commons-digester-1.7.jar, commons-javaflow-20060411.jar, commons-collections-2.1.jar,
* org.apache.commons.jar, sos.documentfactory.jar, sos.mail.jar, sos.settings.jar, sos.net.jar,
* activation, sos.hostware.jar,
* <br>
* <br>
* <br>@see job documentation in the package jobdoc for details
*/
public class JobSchedulerJasperReportJob extends sos.scheduler.managed.JobSchedulerManagedJob {
/** Konfigurationsdatei der Datenbankverbindungen */
private String settingsFilename = "";
/** Vorlagenname: Extention ist jasper*/
private String reportFilename = "";
/** SQL-Dateiname, wird dieser Parameter gesetzt dann wird den JasperReport
* die ResultSet ohne Datenbankverbindung übergeben.*/
private String queryFilename = "";
/** Ausgabetyp der Reportdatei*/
private String outputType = "pdf";
/** Name der Ausgabedatei oder eine Verzeichnisname */
private String outputFilename = "";
/** Wenn der Druckername eine prefix = "factory:" enthält, dann wird dieser
* über die Documentfactory ermittelt. Sonst wird über diesen Druckername gedruckt. */
private String printerName = "";
/** Einstellungsdatei für Datenbankverbindung, wenn Documentfactory printerName / mail von einer
* anderen Datenbank ermittelt werden soll */
private String factorySettingsFile = "";
/** sos.util.SOSString Objekt*/
private SOSString sosString = new SOSString();
/** temporäre Ausgabe hilfsdateiname */
private File filledReportFile = null;
/** Liste aller generierten Report Dokumente*/
private ArrayList listOfOutputFilename = null;
/** Ist ein parameter_query_filename angegeben, so wird dieser hier in java ausgeführt und das
* Ergebis als Parameter den jasperreport übergebenden */
private String parameterQueryFilename = "";
/** sos.spooler.Order Objekt */
private Order order = null;
/** sos.spooler.Variable_set Objekt */
private Variable_set orderData = null;
/** Anzahl zu druckenden Exemplarer*/
private int printerCopies = 1;
/** Ist eine mail_it Parameter angegeben bzw auf true gesetzt, dann wird mit
* der Scheduler Mail Funktion emails versendet. Es wird überprüft, ob zusätzlich
* die Parameter "mail_to", "mail_cc", "mail_bcc", "mail_subject" und "mail_body" angegeben
* sind. Wenn ja, dann werden zu diesen Adressanten mit den Betreff und body emails versendet.
* Wenn diese Parametern nicht existieren, dann werden die Empfänger aus den Einstellungen
* des Schedulers (factory.ini) genommen.*/
private boolean mailIt = false;
/** Geben Sie hier eine oder mehrere eMail Adressen an, die den Report erhalten.
* Mehrere eMail Adressen werden durch Komma getrennt.<br/>
* Ist diese Einstellung leer, dann werden Reports nicht per eMail versendet.*/
private String mailTo = "";
/** Geben Sie hier eine oder mehrere eMail Adressen an, die den Report als carbon copy erhalten.
* Mehrere eMail Adressen werden durch Komma getrennt. */
private String mailCc = "";
/**
* Geben Sie hier eine oder mehrere eMail Adressen an, die den Report als blind carbon copy erhalten.
* Mehrere eMail Adressen werden durch Komma getrennt.
*/
private String mailBcc = "";
/** Der Inhalt des Parameters wird als Betreff der eMail des
* Reports verwendet und muss ausgefüllt sein, wenn Reports per
* eMail versendet werden.
* <p>
* Es können folgende Platzhalter verwendet werden, die durch [
* und] geklammert werden, z.B. in der Form [date]:
* </p>
* <ul>
* <li>[date] - aktuelles Datum</li>
* <li>[datetime] - aktuelles Datum und Uhrzeit</li>
* <li>[orderid] - ID des Auftrags</li>
* <li>[jobname] - Name des Jobs</li>
* <li>[taskid] - ID der Task</li>
*</ul>
*/
private String mailSubject = "";
/**
* Löscht den alten Bericht bevor neue generiert wird.
* Das verhindert, falls keine neue Bericht erstellt wird, z.B. wegen DB oder SQL Fehler,
* dann soll auch keine alten Bericht abgeholt werden
*/
private boolean deleteOldFilename = false;
/**
* <p>
* Mit diesem Parameter kann das Layout
* des Reports im HTML-Format oder als plain text angegeben
* werden. Innerhalb des Layouts können folgende Platzhalter verwendet werden, die jeweils mit [
* und ] geklammert werden, z.B. in der Form [date]:
* </p>
* <ul>
* <li>[date] - aktuelles Datum</li>
* <li>[datetime] - aktuelles Datum und Uhrzeit</li>
* <li>[orderid] - ID des Auftrags</li>
* <li>[jobname] - Name des Jobs</li>
* <li>[taskid] - ID der Task</li>
* <li>[sql] - SQL-Query, aus der der Report erstellt wurde</li>
* <li>
* [xml] - aus dem Ergebnis der Abfrage generiertes xml vor der
* Transformation
* </li>
* </ul>
*
*/
private String mailBody = "";
/** SQL-Statement in base64 encodiert. Diese Variable wird zuerst decodiert und anschließend wird der
* Inhalt ausgeführt und der ResultSet den JasperReport ohne Datenbankverbindung übergeben.*/
private String queryStatement = "";
/** Schalter für das versenden bzw. nicht versenden von Reports als Attachment;
* Fall: suspend_attachment=true -> dann werden keine Reports versender
* Fall: suspend_attachment=false -> dann werden Reports mit versendet
* default: suspend_attachment=false */
private boolean suspendAttachment = false;
/**
* initialization
*/
public boolean spooler_init() {
try { // to fetch default job parameters
if (!super.spooler_init())
return false;
//init();
//this.getJobParameters();
return true;
} catch (Exception e) {
spooler_log.error("error occurred processing spooler_init(): " + e.getMessage());
return false;
}
}
/**
* process report
*/
public boolean spooler_process() {
//Order order = null;
//Variable_set orderData = null;
order = null;
orderData = null;
File settingsFile = null;
File reportFile = null;
File queryFile = null;
File queryStatementFile = null;
File outputFile = null;
File parameterQueryFile = null;
String stateText = "";
String tmpOutputFileWithoutExtension = ""; //hilfsvariable
SOSConnectionFileProcessor queryProcessor = null;
try {
spooler_log.debug3("******************spooler_process*****************************");
this.prepareParams();
listOfOutputFilename = new ArrayList();
this.setSettingsFilename("");
this.setReportFilename("");
this.setQueryFilename("");
this.setOutputType("pdf");
this.setOutputFilename("");
this.setQueryStatement("");
// get job parameters from job configuration (scheduler.xml)
this.getJobParameters();
// to fetch parameters from orders that have precedence to job parameters
this.getOrderParameters();
// to check report parameters
checkParams();
try { // to process report
reportFile = new File(this.getReportFilename());
if (!reportFile.exists())
throw new Exception("report file does not exist: " + reportFile.getCanonicalPath());
filledReportFile = File.createTempFile("sos", ".tmp");
filledReportFile.deleteOnExit();
queryFile = new File(this.getQueryFilename());
outputFile = null;
if (this.getOutputFilename() != null && this.getOutputFilename().length() > 0) {
String outputFile_ = maskFilename(this.getOutputFilename());
outputFile = new File(outputFile_);
} else {
outputFile = File.createTempFile("sos", ".tmp");
outputFile.deleteOnExit();
}
//eventuell vorhandene alte Berichte löschen
if(this.isDeleteOldFilename()) {
if(outputFile.exists()) {
spooler_log.debug3("..deleting old File " + outputFile.getCanonicalPath());
if(!outputFile.delete()) {
spooler_log.warn("..could not delete old File " + outputFile.getCanonicalPath());
} else {
spooler_log.debug3("..successfully delete old File " + outputFile.getCanonicalPath());
}
}
}
if (this.getSettingsFilename() != null && this.getSettingsFilename().length() > 0) {
settingsFile = new File(this.getSettingsFilename());
if (!settingsFile.exists()) throw new Exception("settings file does not exist: " + settingsFile.getCanonicalPath());
queryProcessor = new SOSConnectionFileProcessor(settingsFile.getCanonicalPath(), this.getLogger());
} else {
if (this.getConnection() == null) throw new Exception("job scheduler runs without database");
queryProcessor = new SOSConnectionFileProcessor(this.getConnection(), this.getLogger());
}
//alle Jobparametern werden den jasperreport übergeben
Map parameters = new HashMap();
Variable_set params = spooler_task.params();
/*if (orderData != null)
params.merge(orderData);
*/
if (orderData != null) {
spooler_log.debug6(".......orderDatanames: " + orderData.names());
java.util.StringTokenizer tokenizero = new java.util.StringTokenizer(orderData.names(), ";");
while( tokenizero.hasMoreTokens() ) {
String name = tokenizero.nextToken();
parameters.put(name, orderData.var(name));
spooler_log.debug6(".......orderData: " + name + "=" + orderData.var(name));
}
}
spooler_log.debug6(".......paramsnames: " + params.names());
java.util.StringTokenizer tokenizer = new java.util.StringTokenizer(params.names(), ";");
while( tokenizer.hasMoreTokens() ) {
String name = tokenizer.nextToken();
parameters.put(name, params.var(name));
spooler_log.debug6(".......jobparameter: " + name + "=" + params.var(name));
}
//Ausführen der sql-script und das Ergebnis den Jasperreport als Parameter übergeben
if (sosString.parseToString(parameterQueryFilename).length() > 0) {
parameterQueryFile = new File (this.parameterQueryFilename);
if (parameterQueryFile.exists()) {
queryProcessor.process(parameterQueryFile);
try {
parameters.putAll(queryProcessor.getConnection().get());
} catch (Exception e) {
spooler_log.warn("..error while get Resultset from query Processor Connection: " + e.toString());
}
} else {
spooler_log.warn(".." + parameterQueryFilename + " not exists");
}
}
if (sosString.parseToString(parameters.get("report_locale")).length() > 0) {
parameters.put(JRParameter.REPORT_LOCALE, new Locale(sosString.parseToString(parameters.get("report_locale"))));
} else {
parameters.put(JRParameter.REPORT_LOCALE, Locale.GERMAN);
}
//Ausgaben aller Parametern, die den JasperReport übergeben werden
Object[] param = parameters.entrySet().toArray();
for (int i = 0; i < param.length; i++) {
spooler_log.debug3( "..report parameter " + param[i].toString());
}
//java.util.ResourceBundle.getBundle("sos.stacks.jasperreports.dod").toString();
//parameters.put(JRParameter.REPORT_RESOURCE_BUNDLE, java.util.ResourceBundle.getBundle("sos.stacks.jasperreports.dod").toString());
if (sosString.parseToString(queryStatement).length() > 0) {
queryStatementFile = this.decodeBase64(this.queryStatement);
this.getLogger().debug3("queryStatementFile: " + queryStatementFile);
if (queryStatementFile.exists()) {
queryProcessor.process(queryStatementFile);
}
}
//existiert ein queryfile, dann wird das Ergebnis der Queryfile ohne Connection den jasperreport übergeben
//Vorher werden alle Platzhalter in der query_filname ersetzt mit Parameter
if (queryFile.exists()) {
//queryProcessor.process(queryFile);
// Paltzhalter in der query_filename parsieren
SOSPlainTextProcessor processor_ = new SOSPlainTextProcessor();
//File currQueryFile = File.createTempFile("temp", ".sql", queryFile.getParentFile());
File currQueryFile = processor_.process(queryFile, (HashMap)parameters);
currQueryFile.deleteOnExit();
queryProcessor.process(currQueryFile);
this.getLogger().debug5("query " + processor_.getDocumentContent());
}
if (queryFile.exists() || (queryStatementFile != null && queryStatementFile.exists())) {
JasperFillManager.fillReportToFile(reportFile.getCanonicalPath(), filledReportFile.getCanonicalPath(),
parameters,
new JRResultSetDataSource(queryProcessor.getConnection().getResultSet()));
} else {
JasperFillManager.fillReportToFile(reportFile.getCanonicalPath(),
filledReportFile.getCanonicalPath(),
parameters,
queryProcessor.getConnection().getConnection());
}
tmpOutputFileWithoutExtension = outputFile.getCanonicalPath().substring(0, outputFile.getCanonicalPath().lastIndexOf(".") ) + ".";
if (getOutputType().indexOf("pdf") > -1) {
outputFile = new File(tmpOutputFileWithoutExtension + "pdf");
JasperExportManager.exportReportToPdfFile(filledReportFile.getCanonicalPath(), outputFile.getCanonicalPath());
listOfOutputFilename.add(outputFile);
}
if (getOutputType().indexOf("htm") > -1 || getOutputType().indexOf("html") > -1) {
if (getOutputType().indexOf("html") > -1)
outputFile = new File(tmpOutputFileWithoutExtension + "html");
else
outputFile = new File(tmpOutputFileWithoutExtension + "htm");
// JasperExportManager.exportReportToHtmlFile(filledReportFile.getCanonicalPath(), outputFile.getCanonicalPath());
JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(filledReportFile);
JRHtmlExporter exporter = new JRHtmlExporter();
exporter.setParameter(JRHtmlExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRHtmlExporterParameter.OUTPUT_FILE_NAME, outputFile.getCanonicalPath());
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN , Boolean.FALSE);
exporter.exportReport();
listOfOutputFilename.add(outputFile);
}
if (this.getOutputType().indexOf("xml") > -1) {
outputFile = new File(tmpOutputFileWithoutExtension + "xml");
JasperExportManager.exportReportToXmlFile(filledReportFile.getCanonicalPath(), outputFile.getCanonicalPath(), true);
listOfOutputFilename.add(outputFile);
}
if (this.getOutputType().indexOf("xls") > -1) {
outputFile = new File(tmpOutputFileWithoutExtension + "xls");
JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(filledReportFile);
JRXlsExporter exporter = new JRXlsExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outputFile.getCanonicalPath());
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);
exporter.exportReport();
listOfOutputFilename.add(outputFile);
}
if (this.getOutputType().indexOf("rtf") > -1) {
outputFile = new File(tmpOutputFileWithoutExtension + "rtf");
JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(filledReportFile);
JRRtfExporter exporter = new JRRtfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outputFile.getCanonicalPath());
exporter.exportReport();
listOfOutputFilename.add(outputFile);
}
|