2009-10-29 11 views
6

Ho un report da esportare in Excel, PDF e Word utilizzando i report jasper. Uso il file xml come DataSource per il report, ma quando i dati aumentano il report jasper esporta il file vuoto solo per il formato PDF, quando riduco il contenuto dei dati esporta i dati disponibili correttamente. c'è qualche limitazione alle dimensioni del pdf? , come possiamo gestire la dimensione nei report jasper di java?report Jasper esporta i dati vuoti in formato PDF quando ci sono più dati

mio jrxml è davvero grande, quindi non posso che pensavi, ho aggiunto il mio codice Java che io uso per esportare il contenuto:

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

risposta

2

provare a impostare la lunghezza del contenuto:

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

Verifica se questo risolve il tuo problema.

+0

Ho un problema simile e ho provato, ma non ha funzionato. Ho cercato su Internet per diverse ore. Posso aprire piccoli report (<100 kb), ma i report più grandi appaiono vuoti in Adobe Reader, anche se posso aprirli con Foxit, ad esempio. Abobe richiede specifiche speciali quando vengono generati report di maggiori dimensioni? –

+0

Ho provato ad aggiornare i report jasper e adobe reader, ma anche questo non ha funzionato. –

2

forse non hai dati definiti nel rapporto.

provare questo codice durante la generazione di report per evitare di sezioni che si nascondono quando non ci sono dati:

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

applausi !.

10

Quando non c'è sorgente si può provare questo codice

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

Anche se non si dispone di alcuna fonte di dati e la sua un report di dati statici dando JREmptyDataSource è importante, altrimenti si rischia di ottenere un report vuoto.

Controllare questo link per maggiori informazioni https://stackoverflow.com/a/5334415/649451

- Cheers!

+0

ragazzi di JasperSoft potrebbero migliorare questo metodo per il sovraccarico JasperFillManager.fillReport (jasperReport, jasperParameter); e semplifica le nostre vite ... –

1

Ho avuto un problema simile. Per un numero elevato di record, il pdf stava diventando un report vuoto.

Questo problema è stato risolto impostando JRParameter.IS_IGNORE_PAGINATION su false.

0

Un metodo che ha funzionato per me quando si ha a che fare con i big data e i report jasper è innanzitutto inserire i dati necessari in una tabella di database e quindi creare un'istruzione SQL sul report jasper che si unirà alla tabella creata con i dati hai bisogno. Questo mette più lavoro sul database e meno sulla libreria jasper. Ecco un esempio di una tabella che può essere creata per memorizzare i dati del report.

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) 
); 
Problemi correlati