2013-05-10 69 views
0

嗨,我对jasper报告非常陌生。只需要一个需求,我需要从.jasper文件中检索信息。我正在使用下面的代码。从碧玉文件中检索数据

但问题的compileReport不占用文件我在我的本地机器上我得到这样

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:150) at jasper.test(jasper.java:28) at jasper.main(jasper.java:40)

一个错误,我不知道什么是wrong.Is它不能让我的开发文件文件?哪些类缺失? 我绝对无能为力。

我的代码是:

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.util.Collection; 
import java.util.HashMap; 
import java.util.Map; 

import dori.jasper.engine.JRException; 
import net.sf.jasperreports.engine.JRDataSource; 
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.JasperExportManager; 
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; 
import net.sf.jasperreports.view.JasperViewer; 


public class jasper { 

    public static void test() throws FileNotFoundException, net.sf.jasperreports.engine.JRException{ 

    JasperReport report = JasperCompileManager.compileReport("C:\\Users\\Mandakini\\Downloads\\testReport.jasper"); 

    JasperPrint print = JasperFillManager.fillReport(report, new HashMap<String, String>()); 
    // export it! 
    //File pdf = File.createTempFile("output.", ".pdf"); 

    OutputStream output= new FileOutputStream(new File("F:/catalog.pdf")); 
    JasperExportManager.exportReportToPdfStream(print,output); 

    } 

    public static void main(String args[]) throws FileNotFoundException, net.sf.jasperreports.engine.JRException{ 
     test(); 
    } 
} 

感谢

+2

您从类路径中遗漏了任何包含类org/apache/commons/digester/Digester的jar。 – 2013-05-10 15:42:27

+0

我添加了所有的罐子。我现在得到的错误是 - 线程“main”中的异常net.sf.jasperreports.engine.JRException:com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException:1字节UTF的无效字节1 -8序列。需要做什么,我很困惑寻找一个解决方案,我作为一个参数给compileReport的是.jasper文件(报告)。有什么不对的吗? – nisha 2013-05-10 16:08:23

+0

可能重复[jasper工作在netbeans罚款,但它抛出异常](http://stackoverflow.com/questions/5839077/jasper-work-fine-in-netbeans-but-it-throw-exception) – 2013-05-11 19:54:36

回答

0

一个java.lang.NoClassDefFoundErrorClassNotFoundException应该总是告诉你,它引用的类是从你的类路径中失踪。在这种情况下,它是org.apache.commons.digester.Digester。您可以下载包含此类here的罐子。

要产生一个报告,这样做:

JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromFile(yourJasperFilePath); 

Map<String, Object> parameters = new HashMap<>(); 
// set your parameters 

Class.forName("com.mysql.jdbc.Driver"); 
Connection con = ...; // possibly get a connection 

byte[] report = JasperRunManager.runReportToPdf(jasperReport, parameters, con); // pass the report, the report parameters, and a connection 
// this will fill the byte[] with the produced report 

FileOutputStream out = new FileOutputStream(somePath); 
out.write(report); 
out.close(); 

至于,我是什么样的它生成报告的不知道怎么设置。该信息可能位于.jasper.jrxml文件中。

+0

嗨Sotirios Delimanolis ,我加了所有的罐子。我现在得到的错误是 - 线程“main”中的异常net.sf.jasperreports.engine.JRException:com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException:1字节UTF的无效字节1 -8序列。 需要做什么,我很困惑寻找一个解决方案,我作为一个参数给compileReport是.jasper文件(报告)。有什么不对的吗? – nisha 2013-05-10 16:07:36

+0

@nisha一个'.jasper'文件已经被编译(像一个java'.class'文件)。我想你想要的是'jrxml'文件。 – 2013-05-10 16:08:44

+0

你的意思是,如果我想从.jasper文件中检索信息,我需要获取jrxml文件?我可以通过反编译.jasper文件来获取jrxml。你是这个意思吗?我采取了这样做的程序,但我又得到了“线程中的异常”主“net.sf.jasperreports.engine.JRRuntimeException:未知的超链接目标0”代码我> sourcePath =“C \:ort.jasper”; destinationPath =“F:/catalog.jrxml”; JasperReport report =(JasperReport)JRLoader.loadObject(sourcePath); JRXmlWriter.writeReport(report,destinationPath,“UTF-8”); – nisha 2013-05-10 16:23:52