以编程方式从Web-Viewer

时间:2017-01-13 15:17:23

标签: java web birt

我在我的服务器上安装了BIRT Web-Viewer,并且能够使用以下URL构建报告:

http://hostname:port/birt/run?__report=test.rptdesign

现在我需要以编程方式从我的Java代码中调用此URL并将结果检索为流或文件。

是否有Web-Viewer的API?
如果没有,我可以像这样调用URL并提取PDF吗?:

HttpClient httpClient = HttpClients.createDefault();
HttpGet postRequest = new HttpPost("http://hostname:port/birt/run");
List<NameValuePair> formData = new ArrayList<>();
formData.add(new BasicNameValuePair("__report", "test.rptdesign"));
HttpEntity entity = new UrlEncodedFormEntity(formData);
HttpResponse response = httpClient.execute(postRequest);

1 个答案:

答案 0 :(得分:0)

我发现,如果我使用值__format的{​​{1}}参数,则对请求的响应是PDF内容,这正是我想要的。

标准响应是HTML,将在第二次请求时返回。我很确定必须通过会话检索响应。

修改 根据要求,我将发布我的请求代码。我修改了一下,因为我使用了一些自定义类来保存配置和报告。

pdf

在调用public InputStream getReport() throws Exception { StringBuilder urlBuilder = new StringBuilder() .append("http://example.com:9080/contextRoot/run") .append("?__report=ReportDesign.rptdesign&__format=pdf"); if (reportParameters != null) { for (Map.Entry<String, String> parameter : reportParameters.entrySet()) { String key = StringEscapeUtils.escapeHtml(parameter.getKey()); String value = StringEscapeUtils.escapeHtml(parameter.getValue()); urlBuilder.append('&') .append(key); .append('='); .append(value); } } URL requestUrl = new URL(burlBuilder.toString()); HttpURLConnection connection = (HttpURLConnection) requestUrl.openConnection(); connection.setRequestMethod("GET"); connection.setDoInput(true); connection.connect(); return connection.getInputStream(); } 之前,我还有另一种方法将使用过的数据作为XML写入文件系统,但我认为只有像我一样使用非常动态的数据时才需要这样做。