将JasperPrint转换为文件

时间:2011-06-14 17:08:04

标签: java jasper-reports

我有一个不同的问题......我用谷歌搜索了一下但没有发现任何关于我的问题所以我在这里问... 我有一个对象JasperPrint我生成文档... 问题是我需要从这个JasperPrint创建一个java.io.File而不将文件保存在计算机上。

我需要做的是:通过电子邮件发送文件。此文件必须由jasperreport生成。我无法将流保存在机器上以便以后删除...所以我需要在运行时将内存中的文件或类似内容...

所以...我有我的对象jasperprint,需要从这个获得一个java.io.File ... 有人知道我该怎么办?

安德鲁......在评论中无法回答,所以我在这里写一下...... 在javax.mail中,我这样做了:

File fileAttachment = myfile;
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(fileAttachment);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(fileAttachment.getName());
multipart.addBodyPart(messageBodyPart);

当我从我的机器传递一个文件时它正在工作...... 所以我认为当我使用java.io.File时它会工作,即使它只在内存中...

3 个答案:

答案 0 :(得分:3)

您可以将报告生成为PDF(或其他格式),并将其作为文件发送给Jasper。 JRXlsExporter

一些片段:

JasperPrint print = JasperFillManager.fillReport(report, new HashMap(), jasperReports); 
long start = System.currentTimeMillis(); 

OutputStream output = new FileOutputStream(new File("c:/output/JasperReport.pdf")); 
JasperExportManager.exportReportToPdfStream(print, output); 

// coding For Excel: 


JRXlsExporter exporterXLS = new JRXlsExporter(); 
exporterXLS.setParameter(JRXlsExporterParameter.JA SPER_PRINT, print); 
exporterXLS.setParameter(JRXlsExporterParameter.OU TPUT_STREAM, output); 
exporterXLS.setParameter(JRXlsExporterParameter.IS _ONE_PAGE_PER_SHEET, Boolean.TRUE); 
exporterXLS.setParameter(JRXlsExporterParameter.IS _AUTO_DETECT_CELL_TYPE, Boolean.TRUE); 
exporterXLS.setParameter(JRXlsExporterParameter.IS _WHITE_PAGE_BACKGROUND, Boolean.FALSE); 
exporterXLS.setParameter(JRXlsExporterParameter.IS _REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE); 
exporterXLS.exportReport(); 

答案 1 :(得分:1)

您可以将其写入OutputStream,然后使用此流创建电子邮件附件。以下是XLS导出器的示例。

JasperPrint jsPrint;
ByteArrayOutputStream out = new ByteArrayOutputStream();

JRXlsExporter exporterXLS = new JRXlsExporter();
exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT, jsPrint);
exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, out);
exporterXLS.exportReport();

如果您想发送此邮件,可以创建ByteArrayDataSource(请参阅更新后的问题),而不是FileDataSource

ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
ByteArrayDataSource bads = new ByteArrayDataSource(in,mimeType);

答案 2 :(得分:0)

您想将其作为.print文件或普遍可读的内容发送,例如.pdf吗?

但是,我认为这不重要。这里的问题不在于JasperPrint,而在于java * x * mail classes,它具有陡峭的学习曲线。特别注意javax.mail.internet.MimeMultipart