使用IText的Birt图像永远不会结束

时间:2014-09-08 17:47:54

标签: image report itext birt

我正在使用Birt报告,当我想生成pdf文件时,它永远不会结束。问题就在于此。 IRunAndRenderTask.run。我创建IBirtEngine时也不例外。 以下是创建BirtEngine和报告设计的代码。

private static IReportEngine birtEngine = null;
private static IReportRunnable examenAuditifReportDesign = null;
private static IReportRunnable bilanCollectifReportDesign = null;
private static Properties configProps = new Properties();

static{
        loadEngineProps();//Read the birt configuration properties
        EngineConfig config = new EngineConfig();
        if( configProps != null){
            config.setLogConfig(configProps.getProperty("logDirectory"), Level.INFO);
            config.setBIRTHome(configProps.getProperty("birtHome"));
            config.setResourcePath(configProps.getProperty("ressourcePath"));
            config.setEngineHome(configProps.getProperty("birtHome"));
            config.setProperty("birtReportsHome", configProps.getProperty("birtReportsHome"));
        }
        try {
            RegistryProviderFactory.releaseDefault();
            Platform.startup( config );
        } catch ( BirtException e ) {
            e.printStackTrace( );
        }

        IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
        birtEngine = factory.createReportEngine( config ); 
        try {
            examenAuditifReportDesign = birtEngine.openReportDesign(
                    new FileInputStream(birtEngine.getConfig().getProperty("birtReportsHome")  + "/examenAuditif.rptdesign"));
            bilanCollectifReportDesign = birtEngine.openReportDesign(
                    new FileInputStream(birtEngine.getConfig().getProperty("birtReportsHome")  + "/bilanCollectif.rptdesign"));
        } catch (EngineException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

这是执行报告的代码。

IRunAndRenderTask task = birtEngine.createRunAndRenderTask(examenAuditifReportDesign);
task.setParameterValue("RPT_ID_Travailleur", t.getId());  
task.setParameterValue("RPT_LATEST_HA", params.getId_latest_ha());  
task.setParameterValue("RPT_LATEST_EXAMN", params.getId_latest_examen());  
task.setParameterValue("RPT_PREVIOUS_HA", params.getId_previous_ha());  
task.setParameterValue("RPT_PREVIOUS_EXAMN", params.getId_previous_examen());

PDFRenderOption options = new PDFRenderOption();
options.setOutputStream(outputStream);
options.setOutputFormat("pdf");
task.setRenderOption(options);
task.run();
task.close();

并且在task.run()中;它需要永远,我尝试了大约1小时或1个半小时,它没有结束。 如果有人可以提供帮助,那将是非常准确的。

再见,谢谢你。

2 个答案:

答案 0 :(得分:0)

如果此报告在birt Eclipse设计器中有效,那么它应该与birt运行时API一起使用,问题在于您的代码。

  • 当任务终止时,您需要关闭发送到PDFRenderOption对象的outputStream
  • 将此行添加到您的代码中:

    options.setSupportedImageFormats(" PNG; JPG; BMP&#34);

答案 1 :(得分:0)

我发现了问题,而且两个API都不是。

我们试图为worker生成一个pdf文件,我们正在压缩所有worker的所有pdf文件,这个zip保存在数据库的blob中。那就是问题所在。

如果zip保存在文件系统中,则可以正常工作。

谢谢大家。