我将BIRT 3.7.2报告引擎与我的网络应用程序集成在一起。现在问题是,它在特定位置创建了一个HTML页面(如果我使用渲染格式html)。
我不想保存报告html页面,而是希望它直接在我的Web应用程序中显示html(保存在temp中并在使用后删除)。它还创建了一个图像目录&每次在其中包含嵌入图像和/或图形的报表时,都会将图像和/或图形保存在图像目录中,从而不必要地增加空间。
有人能帮助我吗?? ??
我遵循了以下步骤: https://dev.c-ware.de/confluence/display/PUBLIC/Embeding+Birt+into+Application+built+with+Maven
答案 0 :(得分:0)
我没有深入研究Birt库,也没有像你在链接中那样使用他们的API创建任何类,所以这可能不是最有效的解决方案。
这是几个月前我现在无法访问源代码,但基本上我只是将BirtRuntime添加到我的webapp作为covered here的servlet。
这允许我加载Birt报告,但我还需要将它们嵌入现有的网页中。我已经在这个应用程序中有一个非常简单的代理servlet,它只会读取url的html内容。所以我只是使用我的BIRT报告的URL来调用这个servlet,我会将输出粘贴到我想要的网页上。
代理servlet是这样的:
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
public class ProxyServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException {
String urlString = request.getParameter("url");
try {
URL url = new URL(urlString);
url.openConnection();
InputStream in = url.openStream();
ServletOutputStream out = response.getOutputStream();
IOUtils.copy(in, out);
}
catch (MalformedURLException e) {
throw new ServletException(e);
}
catch (IOException e) {
throw new ServletException(e);
}
}
}