【问题标题】:The compiled with help of JSS report does not work from Java code - ReportExpressionEvaluationData is raised在 JSS 报告的帮助下编译的报告不适用于 Java 代码 - 引发 ReportExpressionEvaluationData
【发布时间】:2021-05-03 19:45:08
【问题描述】:

我正在尝试一个简单的示例,从 JasperSoft Studio 中创建的 .jasper 报告生成 PDF。

我创建了一个空报告,完全没有(测试 - teste_vazio.jasper/teste_vazio.jrxml)。 我通过 Jasper Studio 本身生成了 .jasper 文件。 我创建了一个 Java 项目。我添加了以下库:

  • com.lowagie.text-2.1.7.jar
  • commons-beanutils-1.9.4.jar
  • commons-collections4-4.4.jar
  • commons-digester-2.1.jar
  • commons-logging-1.2.jar
  • itext-2.1.7.jar
  • jasperreports-6.12.1.jar
  • jasperreports-annotation-processors-6.16.0.jar
  • jasperreports-custom-visualization-6.16.0.jar
  • jasperreports-fonts-6.12.1.jar
  • jasperreports-functions-6.16.0.jar
  • jasperreports-javaflow-6.16.0.jar
  • jasperreports-metadata-6.16.0.jar
  • joda-time-2.10.10-no-tzdb.jar
  • joda-time-2.10.10.jar

我开发了以下代码:

public static void main(String[] args) {
        System.out.println("Teste");
        generateReport();
    }
    
    static void generateReport() {
        try(Connection conn = DriverManager.getConnection(URL,USER,PASS) ) {
            JasperPrint jasperPrint = JasperFillManager.fillReport(Main.class.getResourceAsStream("teste_vazio.jasper"), new HashMap<String,Object>(),conn);
            File file = new File("/Users/julio/Desktop/JasperLibs/relatorio.jrprint");
            
            if (!file.exists()) {
                file.createNewFile();
                JRSaver.saveObject(jasperPrint, file);
            } else {
                JRPdfExporter exporterPdf = new JRPdfExporter();
                ExporterInput input = new SimpleExporterInput(jasperPrint);
                exporterPdf.setExporterInput(input);
                exporterPdf.setExporterOutput(new SimpleOutputStreamExporterOutput(new File("/Users/julio/Desktop/JasperLibs/relatorio.pdf")));
                exporterPdf.exportReport();
            }
        } catch (SQLException | JRException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

.jrxml的代码是:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.15.0.final using JasperReports Library version 6.15.0-dd49bfb94918336b8321d5507193f0169ead4e95  -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="teste_vazio" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="6cad13ce-e8d7-4cd7-a095-3a1ab64cfe80">
    <queryString>
        <![CDATA[]]>
    </queryString>
    <background>
        <band splitType="Stretch"/>
    </background>
    <pageHeader>
        <band height="35" splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band height="61" splitType="Stretch"/>
    </columnHeader>
    <detail>
        <band height="125" splitType="Stretch"/>
    </detail>
    <columnFooter>
        <band height="45" splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band height="54" splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band height="42" splitType="Stretch"/>
    </summary>
</jasperReport>

运行项目时出现以下错误:

Exception in thread "main" java.lang.ClassCastException: net.sf.jasperreports.compilers.ReportExpressionEvaluationData cannot be cast to [B
    at net.sf.jasperreports.engine.design.JRAbstractJavaCompiler.loadEvaluator(JRAbstractJavaCompiler.java:109)
    at net.sf.jasperreports.engine.design.JRAbstractCompiler.loadEvaluator(JRAbstractCompiler.java:351)
    at net.sf.jasperreports.engine.JasperCompileManager.getEvaluator(JasperCompileManager.java:382)
    at net.sf.jasperreports.engine.fill.JRFillDataset.createCalculator(JRFillDataset.java:487)
    at net.sf.jasperreports.engine.fill.BaseReportFiller.<init>(BaseReportFiller.java:168)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:273)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:79)
    at net.sf.jasperreports.engine.fill.JRFiller.createBandReportFiller(JRFiller.java:251)
    at net.sf.jasperreports.engine.fill.JRFiller.createReportFiller(JRFiller.java:272)
    at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:114)
    at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:103)
    at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:530)
    at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:491)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:929)
    at Main.generateReport(Main.java:46)
    at Main.main(Main.java:28)

我认为 Jasper Studio 生成的文件存在一些不兼容问题。 有没有人经历过这种情况?

【问题讨论】:

  • 您是否尝试使用 Java 代码编译 jrxml?有用吗?

标签: jasper-reports


【解决方案1】:

正如 Alex K 所建议的那样,我通过 Java 编译了报告,并且一切运行良好。 非常感谢亚历克斯!

下面是用来编译的代码,以防有人需要!

InputStream jrxmlStream = Main.class.getResourceAsStream("Cherry.jrxml");
            JasperReport relatorioCompilado = JasperCompileManager.compileReport(jrxmlStream);
            
            JasperPrint jasperPrint = JasperFillManager.fillReport(relatorioCompilado, new HashMap<String,Object>(),conn);
            File file = new File("/Users/julio/Desktop/JasperLibs/relatorio.jrprint");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 2012-11-12
    • 1970-01-01
    相关资源
    最近更新 更多