JasperServer.cgi
#!python
# -*- coding: utf-8 -*-
"""
Reports Generator.
"""
import MySQLdb
def getJRXML(reportPath):
mycon= MySQLdb.connect(host='localhost',port=3306, db='jasperserver', user='root', passwd='')
mycur= mycon.cursor()
mycur.execute("select id from JIResourceFolder where uri='%s_files'" % reportPath)
id1= mycur.fetchone()[0]
mycur.execute("select id from JIResource where childrenFolder=%d" % id1)
id1= mycur.fetchone()[0]
mycur.execute("select mainReport from JIReportUnit where id=%d" % id1)
id1= mycur.fetchone()[0]
mycur.execute("select data from JIFileResource where id=%d" % id1)
jrxml= mycur.fetchone()[0]
return jrxml
#
params= {}
import os, sys, time
import cgi
cgiform= cgi.FieldStorage()
if len(cgiform)>0:
import cgitb; cgitb.enable()
for item in cgiform.keys():
params[item]= cgiform[item].value
#
reportUnit= params['reportUnit']; del params['reportUnit']
s1= getJRXML(reportUnit)
s2= reportUnit.split('/')[-1]
inttime= int(time.time())
tempDir= "%s\\temp" % os.path.abspath("%s\\..\\.." % os.path.dirname(sys.argv[0]))
JRXMLfile= "%s\\%s.%d.jrxml" % (tempDir, s2, inttime)
contentDir= "%s\\airscontent" % os.path.abspath("%s\\..\\.." % tempDir)
output= params['output']
reportFILE= "%s\\%s.%d.%s" % (contentDir,s2,inttime,output)
reportURI= "/airscontent/%s.%d.%s" % (s2,inttime, output)
jrxml= open(JRXMLfile,'w')
jrxml.write(s1)
jrxml.close()
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
import JasperReports
JR= JasperReports.JasperReports()
JR.startJVM()
connection= ("com.mysql.jdbc.Driver","jdbc:mysql://localhost:3306/airs","airs","airs")
JR.JasperReports(JRXMLfile,connection,params,reportFILE)
JR.shutdownJVM()
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if os.path.exists(reportFILE):
print """Content-type: text/html
""" % reportURI
else:
print """Content-type: text/html;charset=utf-8
Report '%s' failed
""" % reportURI
#
JasperReports.py
#!pyhon
# -*- coding: utf-8 -*-
"""
JasperReports wrapper:
"""
class JasperReports():
import jpype
JasperCompileManager= JasperFillManager= JasperExportManager= None
JRPdfExporter= JRRtfExporter= JRHtmlExporter= JRXlsExporter= None
JRExporterParameter= JRPdfExporterParameter= JRXlsExporterParameter= None
JRLoader= JRParameter= JRXmlDataSource= JRXPathQueryExecuterFactory= JRXmlUtils= None
def startJVM(self):
JVMPath= self.jpype.getDefaultJVMPath()
pathToJRLibs= "c:\\Program Files\\jasperserver-3.0\\apache-tomcat\\webapps\\jasperserver\\WEB-INF\\lib\\"
_jvmArgs = ["-ea"] # enable assertions
_jvmArgs.append("-Djava.ext.dirs=%s" % pathToJRLibs)
self.jpype.startJVM(JVMPath, *_jvmArgs)
#
self.JasperCompileManager= self.jpype.JClass("net.sf.jasperreports.engine.JasperCompileManager")
self.JasperFillManager= self.jpype.JClass("net.sf.jasperreports.engine.JasperFillManager")
self.JasperExportManager= self.jpype.JClass("net.sf.jasperreports.engine.JasperExportManager")
self.JRPdfExporter= self.jpype.JClass("net.sf.jasperreports.engine.export.JRPdfExporter")
self.JRRtfExporter= self.jpype.JClass("net.sf.jasperreports.engine.export.JRRtfExporter")
self.JRHtmlExporter= self.jpype.JClass("net.sf.jasperreports.engine.export.JRHtmlExporter")
self.JRXlsExporter= self.jpype.JClass("net.sf.jasperreports.engine.export.JRXlsExporter")
#
self.JRParameter= self.jpype.JClass("net.sf.jasperreports.engine.JRParameter")
self.JRExporterParameter= self.jpype.JClass("net.sf.jasperreports.engine.JRExporterParameter")
self.JRPdfExporterParameter= self.jpype.JClass("net.sf.jasperreports.engine.export.JRPdfExporterParameter")
self.JRXlsExporterParameter= self.jpype.JClass("net.sf.jasperreports.engine.export.JRXlsExporterParameter")
self.JRLoader= self.jpype.JClass("net.sf.jasperreports.engine.util.JRLoader")
self.JRXmlDataSource= self.jpype.JClass("net.sf.jasperreports.engine.data.JRXmlDataSource")
self.JRXPathQueryExecuterFactory= self.jpype.JClass("net.sf.jasperreports.engine.query.JRXPathQueryExecuterFactory")
self.JRXmlUtils= self.jpype.JClass("net.sf.jasperreports.engine.util.JRXmlUtils")
#:
def shutdownJVM(self):
self.jpype.shutdownJVM()
#
def JasperReports(self,jrxml,connection,parameters, report):
def JDBCconnection(conpars):
jdbcDriver= self.jpype.JClass(conpars[0])
dm= self.jpype.JClass("java.sql.DriverManager")
conn= dm.getConnection(conpars[1], conpars[2], conpars[3])
conn.setAutoCommit(self.jpype.JBoolean(False))
return conn
#}def JDBCconnection
s1= '.'.join(jrxml.split('.')[:-1])
output= parameters["output"]
jasper= "%s.jasper" % s1
jrprint= "%s.jrprint" % s1
#
self.JasperCompileManager.compileReportToFile(jrxml,jasper)
#
jdbc= JDBCconnection(connection)
jasperParameters= self.jpype.JClass("java.util.HashMap")()
if output in ['xls']:#,'html']:
jasperParameters.put(JRParameter.IS_IGNORE_PAGINATION, True)
for item in parameters.keys():
jasperParameters.put(item, parameters[item].decode("utf-8"))
self.JasperFillManager.fillReportToFile(jasper, jrprint, jasperParameters, jdbc)
#
if output=="pdf":
exporter = self.JRPdfExporter()
exporter.setParameter(self.JRPdfExporterParameter.IS_CREATING_BATCH_MODE_BOOKMARKS, True)
elif output=="rtf":
exporter= self.JRRtfExporter()
#
elif output=="xls":
exporter= self.JRXlsExporter()
exporter.setParameter(self.JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, True);
elif output=="html":
exporter= self.JRHtmlExporter()
else:
return
exporter.setParameter(self.JRExporterParameter.INPUT_FILE_NAME, jrprint)
exporter.setParameter(self.JRExporterParameter.OUTPUT_FILE_NAME, report)
exporter.exportReport()
# ------------------------------------------------------------------------------