在focframework中,我如何制作一个按钮,以打印多个Jasper报告并排打印在一起

时间:2018-10-09 10:17:43

标签: java vaadin

我正在使用focframework来构建我的Web应用程序。我已经开发了一些独立的Jasper报告,并且可以独立地在focframework中正常工作。现在,我想要一个按钮,通过将它们串联在同一个PDF文件中,可以将它们全部打印在一起。

很显然,我将按以下方式使用Vaadin BrowserWindowOpener。但是然后我应该准备一个资源对象。

StreamResource resource = ???;
BrowserWindowOpener browserWindowOpener = new BrowserWindowOpener(resource);
browserWindowOpener.extend(button);

任何想法如何将Jasper报表的串联放置在StreamResource对象中?

我知道有一些答案可以解释一般情况下的操作方法,但是由于我使用的是focframework,因此我希望有一个更有针对性的答案,允许我使用现有的foc开发(如果有)。

2 个答案:

答案 0 :(得分:2)

正如您在问题中提到的,使用BrowserWindowOpener看起来是正确的方法。

RequestingFragment mFragment;

public ErrorCompactAdapter(Context context, ArrayList<Error> errors, 
                           RequestingFragment fragment) 
{
    this.context = context;
    this.errors = errors;
    this.mFragment = fragment;
}

// While passing the fragment into your adapter, do it this way.

ErrorCompactAdapter errorCompactAdapter = new ErrorCompactAdapter(
          context, errors, RequestingFragment.this);

holder.errorTakeOverButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // use you method of fragment here
        mFragment.startRequest();
    }
});

要获取“ StreamResource资源”,我们可以执行以下操作:

StreamResource resource = ???;
BrowserWindowOpener browserWindowOpener = new BrowserWindowOpener(resource);
browserWindowOpener.extend(button);

现在,我们需要类型为com.vaadin.server.StreamSource的streamSource。为了使我们拥有一个专门的串联报告的类,我希望这能满足您的需求:

StreamResource resource = new StreamResource(streamSource, "printnig_"+System.currentTimeMillis()+".pdf");
resource.setMIMEType("application/pdf");

您显然必须实现上面列出的不同方法。这些方法调用将告诉FStreamSource_Report它有多少个基础报告,并且每次都会为它们准备数据来调用它们。

MyUserDataClass:是您选择的一个类,您可以使用getUserData()在不同的方法实现中访问该类;

以下是一个示例:     FStreamSource_Report streamSource =新的FStreamSource_Report(prodProgram){

FStreamSource_Report<MyUserDataClass> streamSource = new FStreamSource_Report<MyUserDataClass>(myUserDataClassInstance) {
protected void init(int reportIndex){
    //init to print the report at reportIndex.
}

protected void shut(int reportIndex){
    //dispose the necessary data for reportIndex
}

protected boolean next(int reportIndex){
    //Return true if you have a report to print at reportIndex
}

protected String getReportFileName(int reportIndex){
    //Return the report filename at reportIndex
}

protected JRFocObjectParameters getParams(int reportIndex){
    //Return the JRFocObjectParameters needed for reportIndex
}

protected JRFocListDataSource getDataSource(int reportIndex){
    //Return the Jasper/foc Data source for the Jasper details section at reportIndex
}

答案 1 :(得分:1)

您不能做的就是将不同文件的所有字节一个接一个地连接起来。

贾斯珀报告(Jasper Reports)具有将不同报告相互嵌套的选项。也许只需创建一个包含多个报告的大型报告即可。

这将允许您在Jasper中控制分页符,样式等