⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jasperreportmanager.java

📁 一个webwork+spring+ibatis的小例子
💻 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 + -