我使用 JasperReports 库5.6.0
我厌倦了编程:
VIEWER(JRViewer)PDF ---> XML ---> PDF VIEWER(JRViewer)
但我对第2步有问题,
// file is variable xml file generated from step 1
JasperDesign design = JRXmlLoader.load(file);
JasperReport report = JasperCompileManager.compileReport(design);
JasperPrint print = JasperFillManager.fillReport(report, new HashMap(), new JRBeanCollectionDataSource(b));
JasperPrintManager.printReport(print, false);
我收到了错误:
java.lang.NullPointerException
at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:323)
at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:284)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:273)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:218)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:202)
at pl.opencare.wydruki.PrintFunctions$1.actionPerformed(PrintFunctions.java:460)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
答案 0 :(得分:0)
我看到此错误的唯一方法是,如果JRXmlLoader.load( file )中使用的文件在某种程度上是错误的(很可能是空的或者不是正确的.jrxml文件)。如果是这种情况,您未描述的“第一步”必须包含错误。
@Answer包含详细信息(我认为编辑问题会更适合提供更多问题的格式)
还有一个问题。我不知道,你所拥有的是JasperPrint实例,它代表已填写的报告。根据{{3}}导出,它创建了.jrpxml,并且可以使用JRXmlExported Documentation再次作为JasperPrint实例进行解析。尝试将填充的报告加载为JasperDesign以再次填充它可能会产生错误(显然确实如此)。是否有任何特殊原因导致您无法对用于创建报告的.jrxml文件或JasperDesign实例进行操作?
答案 1 :(得分:0)
代码第1步:
// p is my report
JasperPrint p = ..........
StringBuffer xml = new StringBuffer();
JRXmlExporter xmlExporter = new JRXmlExporter();
xmlExporter.setParameter(JRExporterParameter.JASPER_PRINT, p);
xmlExporter.setParameter(JRExporterParameter.OUTPUT_STRING_BUFFER, xml);
xmlExporter.exportReport();
File file = File.createTempFile("temp", ".xml");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
bw.write(xml.toString());
bw.close();
该文件不为空我可以显示它的临时目录。
步骤2中的sbove错误java.lang.NullPointerException,netbeans show line
JasperDesign design = JRXmlLoader.load(file);