【发布时间】:2011-08-25 12:02:04
【问题描述】:
我需要在我的一个应用程序中集成一个 BIRT 图表引擎。 Birt 可以生成图像作为图表输出。我的想法是生成这个图表图像,然后将其发送到客户端进行显示。也许在服务器上的 RemoteServiceServlet 中。这是最好的方法吗?还是有其他方法可以做到这一点?
提前致谢,
【问题讨论】:
我需要在我的一个应用程序中集成一个 BIRT 图表引擎。 Birt 可以生成图像作为图表输出。我的想法是生成这个图表图像,然后将其发送到客户端进行显示。也许在服务器上的 RemoteServiceServlet 中。这是最好的方法吗?还是有其他方法可以做到这一点?
提前致谢,
【问题讨论】:
生成“报告”(无论是图像、PDF 还是任何需要由浏览器下载以响应用户操作的字节序列)的最可靠方法是让客户端的 RPC 调用返回立即使用 URL 或令牌,报告的内容稍后将在该 URL 或令牌处可用。稍后,在这种情况下,仅意味着需要后续请求来检索报告的内容,但该模式可以很好地扩展到可能需要大量时间来创建报告的用例。
Image 小部件,可能带有一个URL 模式http://example.com/getReportImage/<Generated Token>。这个请求可以简单地阻塞,直到报告完成。如果报表标识符的选择是报表参数的函数并且具有稳定的语义,那么您可以毫不费力地获得缓存和重复数据删除。
至于使用data: URL 的选择,只有当您的用户使用现代浏览器并且图像尺寸很小时才有意义。不适合一般情况。
【讨论】:
让客户端发送一个 RPC,让服务端完成所有的 BIRT 渲染。服务器完成后,将生成的 HTML(或图像)流式传输回客户端。见http://www.birt-exchange.org/org/forum/index.php/topic/15515-build-birt-report-engine-with-gwt/
myServiceImpl.getReport(
"monthlySales",
"2013-02-01",
"includeGST",
new AsyncCallback<String>() {
public void onSuccess(String serverGeneratedBirtHtml) {
myVerticalPanel.add(new HTML(serverGeneratedBirtHtml));
}
}
);
【讨论】: