【问题标题】:Jasper Reports empty PDF report problem, using Spring ModelAndViewJasper报告空PDF报告问题,使用Spring ModelAndView
【发布时间】:2010-12-29 10:15:09
【问题描述】:

我正在尝试使用 Spring 使用 Jasper Reports 生成 PDF 报告。但是报告总是空的。我搜索了很多,找不到问题。我尝试将 byte[] pdfReport 写入 OutputStream 但结果相同,报告始终为空。

我有 2 个参数,其中一个是 testName,其中一个是图表。两者都不能在pdf报告中显示。

非常感谢您的帮助,

这是生成报告的代码。

//My class extends MultiActionController

DefaultPieDataset dataset = new DefaultPieDataset();

dataset.setValue(String.format("%s, %s", "pie1", "pie1"),20);
dataset.setValue(String.format("%s, %s", "pie2", "pie2"),80);

JFreeChart chart = ChartFactory.createPieChart("testPie", dataset, true, true, false);

Map model = new HashMap(); 
model.put("chart", chart.createBufferedImage(200, 200)); 
model.put("testName", "test report");
model.put("format", "pdf");

AbstractJasperReportsView  view = new JasperReportsMultiFormatView();
view.setUrl("/WEB-INF/classes/reports/"+"test1"+".jasper");
view.setApplicationContext(getApplicationContext());
view.setContentType("application/pdf");

Properties header = new Properties();
view.setHeaders(header);

ModelAndView mv = new ModelAndView(view, model);

JasperReport report =  (JasperReport) JRLoader.loadObject(getServletContext().getResourceAsStream("/WEB-INF/classes/reports/"+"test1"+".jasper"));

JasperPrint prt = JasperFillManager.fillReport(report, model);
byte[] pdfReport = JasperExportManager.exportReportToPdf(prt);

return mv;

这里是 jrxml 文件

<?xml version="1.0" encoding="UTF-8"?>
<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="test1" language="groovy" pageWidth="700" pageHeight="842" columnWidth="660" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="2"/>
    <parameter name="testName" class="java.lang.String"/>
    <parameter name="chart" class="java.awt.Image" isForPrompting="false"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="48" splitType="Stretch"/>
    </title>
    <pageHeader>
        <band height="35" splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band height="14" splitType="Stretch"/>
    </columnHeader>
    <detail>
        <band height="229" splitType="Stretch">
            <image>
                <reportElement x="162" y="13" width="200" height="200"/>
                <imageExpression class="java.awt.Image"><![CDATA[$P{chart}]]></imageExpression>
            </image>
            <textField>
                <reportElement x="37" y="61" width="100" height="20"/>
                <textElement/>
                <textFieldExpression class="java.lang.String"><![CDATA[$P{testName}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
    <columnFooter>
        <band height="112" splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band height="76" splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band height="42" splitType="Stretch"/>
    </summary>
</jasperReport>

【问题讨论】:

    标签: spring pdf jasper-reports ireport


    【解决方案1】:

    你为什么要这样做?

    ModelAndView mv = new ModelAndView(view, model);
    
    JasperReport report =  (JasperReport) JRLoader.loadObject(getServletContext().getResourceAsStream("/WEB-INF/classes/reports/"+"test1"+".jasper"));
    
    JasperPrint prt = JasperFillManager.fillReport(report, model);
    byte[] pdfReport = JasperExportManager.exportReportToPdf(prt);
    
    return mv;
    

    使用 JasperReportsMultiFormatView() 已经结合了报表的填充和导出。不需要以下内容:

    JasperReport report =  (JasperReport) JRLoader.loadObject(getServletContext().getResourceAsStream("/WEB-INF/classes/reports/"+"test1"+".jasper"));
    
    JasperPrint prt = JasperFillManager.fillReport(report, model);
    byte[] pdfReport = JasperExportManager.exportReportToPdf(prt);
    

    您必须在资源包中声明 JRXML 文件和报告数据键。

    我建议您查看我为 Spring 3 MVC - Jasper 集成教程编写的指南: http://krams915.blogspot.com/2010/12/spring-3-mvc-jasper-integration.html

    只需修改视图以改用 JasperReportsMultiFormatView()。

    查看教程部分了解更多信息。如果以后有时间,我将使用 JasperReportsMultiFormatView() 制作一个教程。如果没有,也许明天。如果这对您有帮助,请告诉我。

    【讨论】:

    • 非常感谢您的回复。我删除了不必要的代码,但结果相同,pdf 为空。很抱歉,我不知道必须在资源包中声明报告数据键。我只是用 iReports 生成 jrxml 文件,然后用 Maven 编译并使用它。你能告诉更多关于报告数据键的信息吗?你的教程很有帮助,我会继续阅读。
    • 不客气。你能在这里发布你如何声明新代码和资源包吗?当您从 iReports 生成 JRXML 文件时,您必须手动编辑那里的内容
    • 我在krams915.blogspot.com/2010/12/…添加了一个使用 JasperReportsMultiFormatView 的教程
    【解决方案2】:

    jasper 报告中有一个名为“whenNoDataType”的属性。您是否尝试将其设置为 whenNoDataType="AllSectionsNoDetail"

    报告语言也被指定为“groovy”。为什么?

    【讨论】:

    • 如果你使用 iReport 默认使用 Groovy。您必须手动更改它。我相信如果它是空白的或者至少提示我们选择一种语言会更好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多