2009-10-29 2 views
6

Ich habe einen Bericht exportiert in Excel, PDF und Word mit Jaspis-Berichten. Ich benutze XML-Datei als die DataSource für den Bericht, aber wenn die Daten jasperexport exportiert leere Datei nur für PDF-Format, wenn ich den Dateninhalt reduzieren, exportieren Sie die Daten korrekt. Gibt es eine Beschränkung auf die PDF-Größe? Wie können wir die Größe in Jaspis-Berichten von Java verwalten?Jasper-Bericht exportiert leere Daten im PDF-Format, wenn mehr Daten vorhanden sind

Mein jrxml wirklich groß ist, also kann ich es nicht hier hinzufügen, ich habe mein Java-Code hinzugefügt, die ich nutzen, um den Inhalt zu exportieren:

JRAbstractExporter exporter = null; 
if (format.equals("pdf")) { 
    exporter = new JRPdfExporter(); 
    jasperPrint.setPageWidth(Integer.parseInt(pWidth)); 
} else if (format.equals("xls")) { 
    exporter = new JRXlsExporter(); 

} else if (format.equals("doc")) { 
    jasperPrint.setPageWidth(Integer.parseInt(pWidth)); 
} 
exporter.setParameter(JRExporterParameter.JASPER_PRINT, 
     jasperPrint); 
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, 
     outputStream_); 
exporter.exportReport(); 
contents = outputStream_.toByteArray(); 
response.setContentType("application/" + format); 
response.addHeader("Content-disposition", 
     "attachment;filename=" + name.toString() + "." + format); 

Antwort

2

Probieren Sie die Inhaltslänge einstellen:

response.setContentLength(outputStream_.toByteArray().length) 

Sehen Sie, ob dies Ihr Problem löst.

+0

Ich habe ein ähnliches Problem und versuchte dies, aber hat nicht funktioniert. Ich habe mehrere Stunden im Internet gesucht. Ich kann kleine Berichte (<100 KB) öffnen, aber größere Berichte erscheinen in Adobe Reader leer, obwohl ich sie zum Beispiel mit Foxit öffnen kann. Erfordert Abobe spezielle Spezifikationen, wenn größere Berichte generiert werden? –

+0

Ich habe versucht, Jaspis-Berichte und Adobe Reader zu aktualisieren, aber das hat auch nicht funktioniert. –

2

Vielleicht haben Sie keine Daten im Bericht definiert.

versuchen, diesen Code, wenn Bericht versteckt Abschnitte, wenn keine Daten zu vermeiden Erzeugung:

JasperReport jasperReport = (JasperReport)JRLoader.loadObject ("report1.jasper"); 
**jasperReport.setWhenNoDataType(WhenNoDataTypeEnum.ALL_SECTIONS_NO_DETAIL);** 

prost !.

10

Wenn kein Datum Quelle ist, dass Sie diesen Code versuchen

 jasperReport = JasperCompileManager.compileReport(sourceFileName); 
     jasperPrint = JasperFillManager.fillReport(jasperReport,jasperParameter,new JREmptyDataSource()); 
     JasperExportManager.exportReportToPdfFile(jasperPrint, "D://.pdf") 

Selbst wenn Sie keine Datenquelle und deren statischer Daten Bericht JREmptyDataSource geben, ist wichtig, sonst können Sie einen leeren Bericht erhalten.

Überprüfen Sie diesen Link für weitere Informationen https://stackoverflow.com/a/5334415/649451

- Prost!

+0

Jungs bei JasperSoft könnte dies für die überladene Methode verbessern JasperFillManager.fillReport (jasperReport, jasperParameter); und einfach unser Leben einfacher machen ... –

1

Ich hatte ähnliches Problem. Für eine große Anzahl von Datensätzen wurde der PDF-Bericht leer.

Dies wurde gelöst, indem JRParameter.IS_IGNORE_PAGINATION auf false gesetzt wurde.

0

Eine Methode, die für mich beim Umgang mit Big Data und Jaspis-Berichten funktioniert, besteht darin, zuerst die benötigten Daten in eine Datenbanktabelle einzufügen und dann eine SQL-Anweisung für den Jaspis-Bericht zu erstellen, der die von Ihnen erstellte Tabelle mit den Daten verbindet du brauchst. Dies bringt mehr Arbeit in der Datenbank und weniger in der Jaspis-Bibliothek. Hier ist ein Beispiel für eine Tabelle, die zum Speichern von Berichtsdaten erstellt werden kann.

CREATE TABLE RE_EMPLOYEE(
EMPLOYEE_ID INT UNIQUE NOT NULL 
COMPANY_ID INT UNIQUE NOT NULL 
REPORT_NAME VARCHAR(20) 
UNIQUE_USER_ID INT UNIQUE NOT NULL 
PRIMARY KEY (EMPLOYEE_ID, COMPANY_ID) 
);