2011-12-19 17 views
21

Kendimi Jasper Raporları ile tanışmak için oldukça basit bir örnek proje yazıyorum. Ben PDF OutputStream üzere yapılandırılmış bir raporu dışa istiyorum, ama bunun için hiçbir fabrika yöntemi vardır:JasperReport'u PDF Çıktı Akışı'na Aktar?

InputStream template = JasperReportsApplication.class 
    .getResourceAsStream("/sampleReport.xml"); 
JasperReport report = JasperCompileManager.compileReport(template); 
JasperFillManager.fillReport(report, new HashMap<String, String>()); 
// nope, just chuck testa. 
//JasperExportManager.exportReportToPdfStream(report, new FileOutputStream(new File("/tmp/out.pdf"))); 

Nasıl bir OutputStream içinde PDF alabilirim?

cevap

28

Tamam, işte nasıl işliyor; JasperFillManager aslında, o yüzden JasperPrint nesnesi döndürür:

// get the JRXML template as a stream 
InputStream template = JasperReportsApplication.class 
    .getResourceAsStream("/sampleReport.xml"); 
// compile the report from the stream 
JasperReport report = JasperCompileManager.compileReport(template); 
// fill out the report into a print object, ready for export. 
JasperPrint print = JasperFillManager.fillReport(report, new HashMap<String, String>()); 
// export it! 
File pdf = File.createTempFile("output.", ".pdf"); 
JasperExportManager.exportReportToPdfStream(print, new FileOutputStream(pdf)); 

keyfini çıkarın.

+2

sadece bir dosyaya çıktı raporuna çalışıyorsanız, sen kullanabileceği başka exportReportToPdfFile' kendi başına çıkış akışını kullanmadan –

+0

Doğru, ama bu yol bana en esnekliği veriyor; Çıktı akışını bir dosyaya veya ağ üzerinden veya istediğim yere yazabilirim :) –

+1

Derlemenin * genellikle * gereksiz bir adım olduğunu unutmayın. Bunun yerine, yazılım her seferinde '.jrxml' dosyasını yeniden derlemek yerine' .jasper' dosyasını kullanarak raporu doldurmalıdır. –

16

Doldurulmuş raporu farklı akışlara ve biçimlere vermek için bir JRExporter kullanabilirsiniz.

exporter = new JRRtfExporter(); 
exporter = new JRHtmlExporter(); 

Burada mevcut daha ihracatçıları bulabilirsiniz: http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JRExporter.html

Hepsi raporun hedefini kontrol etmek için bir OUTPUT_STREAM parametresini kabul etmelidir

JRExporter exporter = null; 

exporter = new JRPdfExporter(); 
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream); 
exporter.exportReport(); 

Ayrıca diğer ihracatçılar olduğuna dikkat .

+0

Daha iyi polimorfik –

+1

5 yıl sonra, JRExportParameter kullanımdan kaldırılmıştır, kullanımdan kaldırılmış bir [yanıt] ekledim (http://stackoverflow.com/a/35916470/5292302) –

6

JRExporterParameter son sürümlerinde kullanımdan kaldırılmıştır, bu `bir olmayan kaldırılmış çözüm @stevemac answer

JRPdfExporter exporter = new JRPdfExporter(); 
exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); 
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputStream)); 
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration(); 
configuration.setMetadataAuthor("Petter"); //why not set some config as we like 
exporter.setConfiguration(configuration); 
exporter.exportReport();