我正在使用focframework来构建我的Web应用程序。我已经开发了一些独立的Jasper报告,并且可以独立地在focframework中正常工作。现在,我想要一个按钮,通过将它们串联在同一个PDF文件中,可以将它们全部打印在一起。
很显然,我将按以下方式使用Vaadin BrowserWindowOpener。但是然后我应该准备一个资源对象。
StreamResource resource = ???;
BrowserWindowOpener browserWindowOpener = new BrowserWindowOpener(resource);
browserWindowOpener.extend(button);
任何想法如何将Jasper报表的串联放置在StreamResource对象中?
我知道有一些答案可以解释一般情况下的操作方法,但是由于我使用的是focframework,因此我希望有一个更有针对性的答案,允许我使用现有的foc开发(如果有)。
答案 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中控制分页符,样式等