2010-12-29 3 views
0

Ich versuche, PDF-Bericht mit Jasper Report mit Spring zu erzeugen. Aber der Bericht ist immer leer. Ich habe viel gesucht und konnte kein Problem finden. Ich habe versucht, byte [] pdfReport zu OutputStream schreiben, aber das Ergebnis ist gleich, Bericht ist immer leer.Jasper Report leeren PDF-Report Problem, mit Spring Modeland

Ich habe 2 Parameter ein o sie ist Testname und einer von ihnen ist Diagramm. Beide können nicht im PDF-Bericht angezeigt werden.

Vielen Dank für Ihre Hilfe,

Hier ist der Code, den Bericht erzeugt.

//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; 

Und hier ist jrxml Datei

<?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> 

Antwort

2

Warum tun Sie das folgende?

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; 

Die Verwendung von JasperReportsMultiFormatView() kombiniert bereits das Füllen und Exportieren des Berichts. Keine Notwendigkeit für die folgenden:

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

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

Sie müssen die JRXML Datei deklarieren und Datenschlüssel in einem Ressourcenbündel melden.

Ich schlage vor, Sie dieses Handbuch prüfe ich für Frühling schrieb 3 MVC - Jasper Integration Tutorial: http://krams915.blogspot.com/2010/12/spring-3-mvc-jasper-integration.html

ändern, nur die Ansichten, die die JasperReportsMultiFormatView() stattdessen zu verwenden.

Weitere Informationen finden Sie im Abschnitt Lernprogramme. Wenn ich später Zeit habe, mache ich ein Tutorial mit JasperReportsMultiFormatView(). Wenn nicht vielleicht morgen. Lass es mich wissen, wenn dir das hilft.

+0

Vielen Dank für die Antwort. Ich habe den unnötigen Code entfernt, aber das Ergebnis ist gleich, pdf ist leer. Und es tut mir leid, ich weiß nicht über Berichtsdatenschlüssel muss in einem Ressourcenpaket deklariert werden. Ich erzeuge nur die jrxml-Datei mit iReports, kompiliere sie dann mit Maven und benutze sie. Könnten Sie bitte mehr über den Berichtsdatenschlüssel erfahren? und Ihre Tutorials sind sehr hilfreich, ich werde sie weiter lesen. – jiraiya

+0

Gern geschehen. Können Sie hier veröffentlichen, wie Sie den neuen Code und das Ressourcenbündel deklarieren? Wenn Sie die Datei JRXML von iReports generieren, werden Sie etwas dort manuell – chris

+0

bearbeiten muss ich habe ein Tutorial hinzugefügt mit JasperReportsMultiFormatView bei http://krams915.blogspot.com/2010/12/spring-mvc-3-jasper- how-to-use.html – chris

1

Es ist eine Eigenschaft in Jaspis Bericht namens ‚whenNoDataType‘. Haben Sie versucht, das auf zu setzen, wennNoDataType = "AllSectionsNoDetail"

Auch die Berichtssprache wird als "groovy" angegeben. Warum?

+0

Wenn Sie iReport standardmäßig verwenden, wird Groovy verwendet. Sie müssen es manuell ändern. Ich glaube, es wäre besser, wenn es leer ist oder uns zumindest auffordert, eine Sprache zu wählen – chris

Verwandte Themen