📄 jasperreportmanager.java
字号:
/*
* Created on 2004-12-10
*
* HodeOA_SR
*
*/
package org.sanv.util.report;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
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.JasperRunManager;
import net.sf.jasperreports.engine.design.JRJdk13Compiler;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
//import net.sf.jasperreports.engine.util.JRClassLoader;
import net.sf.jasperreports.engine.util.JRLoader;
import com.opensymphony.webwork.ServletActionContext;
/**
* @author shaoqi
* HodeOA_SR
* com.hode.share.report
*
*/
public class JasperReportManager extends JasperRunManager{
// private static JasperReportManager jrm = new JasperReportManager();
/**
* 是否需要重新编译.xml 生成 .jasper
*/
private static boolean reCompile = false;
public static boolean isReCompile() {
return reCompile;
}
public static void setReCompile(boolean reCompile) {
JasperReportManager.reCompile = reCompile;
}
static
{
//读取配置信息
System.out.println("///111//////////////////////---"+System.getProperty("java.class.path"));
System.out.println("///111//////////////////////---"+System.getProperty("jasper.reports.compile.class.path"));
ResourceBundle resources;
try {
resources = ResourceBundle.getBundle("config/system/config", Locale
.getDefault());
ServletContext context = ServletActionContext.getServletContext();
System.setProperty(
"jasper.reports.compile.class.path",
//jasperreports 的jar包的存放路径 /WEB-INF/lib/jasperreports-0.6.3.jar
context.getRealPath(resources.getString("jasper.reports.compile.class.path")) + ";" +
context.getRealPath("/WEB-INF/lib/iReport.jar;") +
context.getRealPath("/WEB-INF/lib/jfreechart-0.9.21.jar;") +
context.getRealPath("/WEB-INF/lib/jcommon-0.9.6.jar;") +
System.getProperty("path.separator") + ";" +
///WEB-INF/classes/
context.getRealPath(resources.getString("path.separator"))
);
System.setProperty("java.class.path" , System.getProperty("java.class.path")+";"+System.getProperty("jasper.reports.compile.class.path"));
/* URLClassLoader sysloader = (URLClassLoader)ClassLoader.getSystemClassLoader();
Class sysclass = URLClassLoader.class;
File[] files = new File(context.getRealPath("/WEB-INF/lib/")).listFiles();
try {
Method method = sysclass.getDeclaredMethod("addURL",new Class[]{URL.class});
method.setAccessible(true);
for(int i=0;i<files.length;i++)
{
method.invoke(sysloader,new Object[]{ files[i].toURL()});
}
} catch (Throwable t) {
t.printStackTrace();
}
System.out.println("/////////////////////////---"+System.getProperty("java.class.path"));
System.out.println("/////////////////////////---"+System.getProperty("jasper.reports.compile.class.path"));
System.out.println("/////////////////////////---"+resources.getString("path.separator"));
*/
} catch (MissingResourceException mre) {
mre.printStackTrace();
}
System.out.println("ini over!");
}
/**
* 将xml文件编译成jasper文件
* @param xmlFilePath xml文件路径
* @param jasperFilePath jasper文件路径
* @return
*/
private static boolean compileReportToFile(String xmlFilePath,String jasperFilePath)
{
try
{
if(jasperFilePath==null || "".equals(jasperFilePath))
{
jasperFilePath = xmlFilePath.substring(0,xmlFilePath.lastIndexOf(".")+1)+"jasper";
}
ServletContext context = ServletActionContext.getServletContext();
String xmlRealFilePath = context.getRealPath(xmlFilePath);
String jasperRealFilePath = context.getRealPath(jasperFilePath);
File jasperFile = new File(jasperFilePath);
System.setProperty(
"jasper.reports.compile.temp",
// context.getRealPath(jasperFile.getParent())
jasperFile.getParent()
);
// System.out.println("//////////////////////////"+jasperFile.getParent());
// System.out.println("//////////////////////////"+context.getRealPath(jasperFile.getParent()));
// System.out.println("//////////////////////////"+jasperFile.getParentFile());
if(reCompile || !jasperFile.exists())
JasperCompileManager.compileReportToFile(xmlFilePath,jasperFilePath);
String scriptFileName = jasperFilePath.substring(0,xmlFilePath.lastIndexOf("."))+"Scriptlet";
File scriptFile = new File(scriptFileName+".class");
if(reCompile || !scriptFile.exists())
{
JRJdk13Compiler jrc = new JRJdk13Compiler();
jrc.compileClass(new File(scriptFileName+".java"),System.getProperty("java.class.path"));
}
URLClassLoader sysloader = (URLClassLoader)Thread.currentThread().getContextClassLoader();
Class sysclass = URLClassLoader.class;
try {
boolean hasPath = false;
URL[] urls=sysloader.getURLs();
for (int i=0;i<urls.length;i++)
{
System.out.println("///////////--"+sysloader.getURLs()[i]);
if(sysloader.getURLs()[i].getFile().equalsIgnoreCase(new File(scriptFile.getParent()).toURL().getFile()))
{
hasPath = true;
}
}
if(!hasPath)
{
Method method = sysclass.getDeclaredMethod("addURL",new Class[]{URL.class});
method.setAccessible(true);
method.invoke(sysloader,new Object[]{ new File(scriptFile.getParent()).toURL() });
}
} catch (Throwable t) {
t.printStackTrace();
}
return true;
}
catch (JRException e)
{
e.printStackTrace();
return false;
}
}
/**
* 将数据按照格式组成PDF返回
*/
public static byte[] runReportToPdf(
String sourceFileName,
Map parameters,
JRDataSource jrDataSource
) throws JRException
{
String xmlFilePath = sourceFileName.substring(0,sourceFileName.lastIndexOf(".")+1)+"xml";
compileReportToFile(xmlFilePath,null);
// System.out.println("complieReport over!");
try{
return JasperRunManager.runReportToPdf(sourceFileName,parameters,jrDataSource);
}
catch(Exception e)
{
e.printStackTrace();
return null;
}
}
/**
* 将数据按照格式组成PDF返回
*/
public static String runReportToHtmlFile(
String sourceFileName,
Map parameters,
JRDataSource jrDataSource
) throws JRException
{
String xmlFilePath = sourceFileName.substring(0,sourceFileName.lastIndexOf(".")+1)+"xml";
compileReportToFile(xmlFilePath,null);
// System.out.println("complieReport over!");
try{
return JasperRunManager.runReportToHtmlFile(sourceFileName,parameters,jrDataSource);
}
catch(Exception e)
{
e.printStackTrace();
return null;
}
}
/**
* 将数据已Html的方式输出
* @param sourceFileName
* @param parameters
* @param jrDataSource
* @param request
* @param response
* @param imageAction
* @throws JRException
*/
public static void exportToHtml(
String sourceFileName,
Map parameters,
JRDataSource jrDataSource,
HttpServletRequest request,
HttpServletResponse response,
String imageAction) throws JRException
{
String xmlFilePath = sourceFileName.substring(0,sourceFileName.lastIndexOf(".")+1)+"xml";
compileReportToFile(xmlFilePath,null);
/*// System.out.println("--------//////////////////////////"+System.getProperty("java.class.path"));
try{
Class clazz = JRClassLoader.loadClassForName("net.sf.jasperreports.engine.JRDataSource");
// Object accusationScriptlet = clazz.newInstance();
}
catch(Exception e)
{e.printStackTrace();}
*/
File reportFile = new File(sourceFileName);
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
System.out.println("--------//////////////////jasperReport////////"+jasperReport.getScriptletClass());
// System.setProperty("java.class.path","e:/work/HodeOA_SR/webjsp/accusation"+File.separator+System.getProperty("java.class.path")+File.separator+"./");
JasperPrint jasperPrint =
JasperFillManager.fillReport(
jasperReport,
parameters,
jrDataSource
);
JRHtmlExporter exporter = new JRHtmlExporter();
Map imagesMap = new HashMap();
request.getSession().setAttribute("IMAGES_MAP", imagesMap);
response.setContentType("text/html");
try{
PrintWriter out = response.getWriter();
// PrintWriter out = new PrintWriter(System.out);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, imageAction);
exporter.exportReport();
}
catch(IOException e)
{
}
}
public static void main(String aaa[])
{
// File jasperFile = new File("E:/work/HodeOA_SR/webjsp/accusation/testList.pdf");
// System.out.println(jasperFile.getPath());
// System.out.println(jasperFile.getParent());
// System.out.println(jasperFile.getParentFile());
// System.out.println(jasperFile.getAbsolutePath());
URLClassLoader sysloader = (URLClassLoader)ClassLoader.getSystemClassLoader();
Class sysclass = URLClassLoader.class;
try {
Method method = sysclass.getDeclaredMethod("addURL",new Class[]{URL.class});
method.setAccessible(true);
method.invoke(sysloader,new Object[]{ new File("E:/work/HodeOA_SR/webjsp/accusation").toURL() });
URL[] urls=sysloader.getURLs();
for (int i=0;i<urls.length;i++)
{
System.out.println("///////////--"+sysloader.getURLs()[i]);
}
} catch (Throwable t) {
t.printStackTrace();
}//end try catch
System.out.println("/////////////////////////---"+System.getProperty("java.class.path"));
try
{
Class clazz = Class.forName("accusationScriptlet", true, Thread.currentThread().getContextClassLoader());
}
catch (ClassNotFoundException e)
{
//if (log.isWarnEnabled())
// log.warn("Failure using Thread.currentThread().getContextClassLoader() in JRClassLoader class. Using JRClassLoader.class.getClassLoader() instead.");
}
// String str="sdfsdf\nsdfs\ndf";
// System.out.println(str);
// System.out.println(str.charAt(6));
// System.out.println(str.replaceAll("\n",""));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -