将JasperPrint转换为文件

| 我遇到了另一个问题...我已经在Google上搜索了一下,但还没有发现有关我的问题的任何信息,因此我在这里询问... 我有一个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也会工作...     
已邀请:
        您可以将报告生成为PDF(或其他格式),并使用Jasper将其作为文件发送。 JRXls出口商 一些片段:
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(); 
    
        您可以将其写入
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);
    
        您想将其作为.print文件或诸如.pdf之类的通用可读文件发送吗? 不过,我认为这并不重要。这里的问题与JasperPrint无关,而与Java * x *邮件类有关,后者具有陡峭的学习曲线。特别注意
javax.mail.internet.MimeMultipart
。     

要回复问题请先登录注册