贾斯珀报告没有得到正确的道路

时间:2014-12-26 01:36:52

标签: java jasper-reports

我在jasper中有一个报告,想要使用我的应用程序中的徽标(gif)(在/ src / main / resources / img中)

用于重新检索图像徽标的代码是

public void imprimir(MyReport myreport) throws Exception    
{

    List myReportList = new ArrayList();

    File logo = new File(getClass().getClassLoader().getResource("img/myLogo.gif").getPath());
    myreport.setLogo(logo);
    myReportList.add(myreport);

    FileInputStream fis = (FileInputStream) getClass().getClassLoader().getResourceAsStream("jasper/myreport.jasper");
    // JasperReport report = JasperCompileManager.compileReport(fis);
    JasperPrint print = JasperFillManager.fillReport(fis, null, new JRBeanCollectionDataSource(myReportList));
    JasperExportManager.exportReportToPdfFile(print, "c:/myreport.pdf");

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    JasperExportManager.exportReportToPdfStream(print, baos);

    DataSource datasource =  new ByteArrayDataSource(baos.toByteArray(), "application/pdf");

    Email mail = new Email();

    mail.setFromLabel("xxxxxxxx@xxxxxxxx.yyy.zz");
    mail.setTo("destiny@xxxxxxxx.yyy.zz");
    mail.setSubject("myreport");
    mail.setMessage("Mesage");

    EmailService emailService = new EmailService();
    emailService.sendEmail(mail, datasource);

}

但这条路径不存在。

[Server:server01] 09:40:12,492 ERROR [stderr] (default task-3) Caused by: java.io.FileNotFoundException: C:\Java\AS\wildfly-8.1.0.Final\content\MyProject.war\WEB-INF\classes\img\logo.gif

因此,看起来,Path正在被解决为不同的价值。 部署是在域模式(Clustered)中通过Wildfly 8.1 Final进行的。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

您的myLogo.gif已包含在MyProject.war文件中。路径C:\Java\AS\wildfly-8.1.0.Final\content\MyProject.war\WEB-INF\classes\img\logo.gif不存在。

我建议使用两种方法解决此问题。

1.从myLogo.gif移出MyProject.war。使用真实路径加载您的gif文件。

File logo = new File(realPath);
myreport.setLogo(logo);

2.将myreport.setLogo(logo)方法的参数类型更改为InputStream

InputStream logoInputStream = getClass().getClassLoader().getResourceAsStream("img/myLogo.gif");
myreport.setLogoInputStream(logoInputStream);